Administração de Banco de Dados George Azevedo da Silva José Antônio da Cunha ADM. Banco de Dados Entendendo como funciona a organização física de um database Quando criamos um database, O SQL Server faz uma pré-alocação de espaço, segmentando o database em páginas de 8kb, numeradas seqüencialmente. Cada conjunto de oito páginas contíguas formam uma unidade lógica maior denominada extensão (extent). Uma tabela nasce numa extent mista e cresce em extents uniformes, por questão de otimização de espaço. 31/05/2017 José Antônio da Cunha 2 ADM. Banco de Dados Entendendo com funciona a organização física de um database Quando uma tabela é criada, o SQL Server faz uma consulta nas páginas que controlam extents mistas para obter um endereço de extent com espaço disponível. Da mesma maneira, quando essa tabela precisa se expandir será efetuada uma busca nas páginas que controlam extents uniformes para obter o endereço de uma extent livre (estamos falando de páginas GAM e SGAM respectivamente). 31/05/2017 José Antônio da Cunha 3 ADM. Banco de Dados Entendendo com funciona a organização física de um database GAM – Global Allocation Map SGAM – Shared Global Allocation Map •Páginas GAM controlam a alocação de extents uniformes; •Páginas SGAM controlam a alocação de extents mistas. Essas páginas são criadas no momento da “demarcação” do database, que acontece na sua criação ou no momento da expansão. 31/05/2017 José Antônio da Cunha 4 ADM. Banco de Dados Entendendo com funciona a organização física de um database Num database, a terceira página será sempre ocupada por uma página GAM e a quarta por uma SGAM, responsáveis por gerenciar as próximas 64.000 extents. A página GAM utiliza um bit para informar se a próxima extent está livre ou não; como existem 8.000 bytes livres numa página, e cada byte controla 8 extents seqüências, chegamos no resultado de 64.000 extents controladas por uma página GAM. 31/05/2017 José Antônio da Cunha 5 ADM. Banco de Dados Entendendo com funciona a organização física de um database Portanto, o duedo de páginas GAM/SGAM controla até 4GB de dados (64.000 * 64KB) (64 KB é o tamanho de uma extent). Se você criar um database de 5GB, serão encontradas 2 páginas GAM; a primeira será a página de número 3 e a segunda virá após aproximadamente 64.000 * 8 = 512.000 páginas (na verdade, esse número é 511.232, pois são descontados 97 bytes de cada página para controle interno). O mesmo critério vale para as páginas SGAM, ocupando as posições de número 4 e 511.233. 31/05/2017 José Antônio da Cunha 6 ADM. Banco de Dados Entendendo com funciona a organização física de um database Pag 0 Pag 1 Header Do PFS database Pag 2 Pag 8088 Pag 3 ..... GAM SGAM ..... PFS Pag 16176 PFS ..... Pag Pag 511232 511233 GAM SGAM Além de administrar extents com páginas GAM/SGAM, existe um controle adicional, informando se a página está ou não alocada e seu percentual de utilização. Esse controle é exercido por páginas com o anacrônimo PFS, de Page Free Space. Cada página PFS controla 8.088 páginas contíguas num database. A primeira página PFS é a de número 1, logo após a header do database, representada pela página 0. Como mostra a Figura acima. 31/05/2017 José Antônio da Cunha 7 ADM. Banco de Dados Entendendo com funciona a organização física de um database Existe ainda um controle utilizado para gerenciar as extent utilizadas por heaps e índices, fornecido pelas páginas IAM (Index Allocation Map). Uma página IAM controla 512.000 páginas de uma tabela. Diferentemente das páginas GAM, SGAM e PFS que são demarcadas na criação e/ou alteração de tamanho do database, páginas IAM são alocadas randomicamente (= “on demand”) à medida que a tabela (ou índice cresce). As páginas IAM são utilizadas em conjunto com as páginas PFS para orientar o banco nas inclusões. 31/05/2017 José Antônio da Cunha 8 ADM. Banco de Dados Entendendo com funciona a organização física de um database Assim, quando ocorre um insert numa heap e a página atual já se encontra totalmente preenchida, é efetuada uma busca conjunta nas páginas IAM e PFS para determinar uma página já pertencente a essa tabela para acomodar a inserção. Se não encontrar espaço nas páginas PFS, será efetuada uma requisição na página GAM para uma nova extent. Observação: tabelas com índices cluster não se orientam com base nas páginas IAM, pois as inserções não são baseadas na teoria de “onde existe espaço”, mas sim na chave do índice cluster. 31/05/2017 José Antônio da Cunha 9 ADM. Banco de Dados Visualizando a organização física de um database Comando: dbcc checkalloc *************************************************************** Table sys.sysrscols Object ID 3. Index ID 1, partition ID 196608, alloc unit ID 196608 (type In-row data). FirstIAM (1:2261). Root (1:80). Dpages 0. Index ID 1, partition ID 196608, alloc unit ID 196608 (type In-row data). 75 pages used in 9 dedicated extents. Total number of extents is 9. *************************************************************** 31/05/2017 José Antônio da Cunha 10