Compreendendo páginas e extensões

A unidade fundamental de armazenamento de dados no SQL Server é a página. O espaço em disco alocado a um arquivo de dados (.mdf ou .ndf) em um banco de dados é logicamente dividido em páginas numeradas de forma contígua de 0 a n. As operações de E/S de disco são executadas no nível de página. Ou seja, o SQL Server lê ou grava páginas de dados inteiras.

As extensões são uma coleção de oito páginas fisicamente contíguas e são usadas para gerenciar as páginas de forma eficaz. Todas as páginas são armazenadas em extensões.

Páginas

No SQL Server, o tamanho de página é 8 KB. Isso significa que os bancos de dados SQL Server têm 128 páginas por megabyte. Cada página começa com um cabeçalho de 96 bytes usado para armazenar informações de sistema sobre a página. Essas informações incluem o número de página, o tipo de página, a quantidade de espaço livre na página e a ID de unidade de alocação do objeto que possui a página.

A tabela a seguir mostra os tipos de página usados nos arquivos de dados de um banco de dados SQL Server.

Tipo de página

Conteúdo

Dados

Linhas de dados com todos os dados, exceto dados text, ntext, image, nvarchar(max), varchar(max), varbinary(max) e xml, quando o texto na linha é definido como ON.

Índice

Entradas de índice.

Texto/Imagem

Tipos de dados de objeto grande:

  • Dados text, ntext, image, nvarchar(max), varchar(max), varbinary(max) e xml

Colunas de comprimento variável quando a linha de dados excede 8 KB:

  • varchar, nvarchar, varbinary e sql_variant

Global Allocation Map, Shared Global Allocation Map

Informações sobre alocação de extensões.

Page Free Space

Informações sobre alocação de página e espaço livre disponível em páginas.

Index Allocation Map

Informações sobre extensões usadas por uma tabela ou índice por unidade de alocação.

Bulk Changed Map

Informações sobre extensões modificadas pelas operações em massa desde a última instrução BACKUP LOG por unidade de alocação.

Differential Changed Map

Informações sobre extensões modificadas desde a última instrução BACKUP DATABASE por unidade de alocação.

ObservaçãoObservação

Os arquivos de log não contêm páginas; eles contêm uma série de registros de log.

As linhas de dados são colocadas em série na página, iniciando imediatamente após o cabeçalho. Uma tabela de deslocamento da linha tem início no final da página, e cada tabela de deslocamento da linha contém uma entrada para cada linha na página. Cada entrada registra a distância do primeiro byte da linha em relação ao início da página. As entradas na tabela de deslocamento da linha estão em seqüência inversa da seqüência das linhas na página.

Página de dados do SQL Server com deslocamentos de linha

Suporte à linha grande

As linhas não podem passar de uma página para outra, no entanto, partes da linha podem ser afastadas da página da linha para que a linha possa ser realmente muito grande. A quantidade máxima de dados e sobrecarga contida em uma única linha de uma página é 8.060 bytes (8 KB). Porém, isso não inclui os dados armazenados no tipo de página de Texto/Imagem. Essa restrição é consentida para tabelas que contêm colunas varchar, nvarchar, varbinary ou sql_variant. Quando o tamanho total da linha de todas as colunas fixas e variáveis em uma tabela exceder a limitação de 8.060 bytes, o SQL Server moverá uma ou mais colunas de comprimento variável dinamicamente para as páginas na unidade de alocação ROW_OVERFLOW_DATA, iniciando com a coluna com a maior largura. Isso é feito sempre que uma operação de inserção ou atualização aumenta o tamanho total da linha além do limite de 8.060 bytes. Quando uma coluna é movida para uma página na unidade de alocação ROW_OVERFLOW_DATA, é mantido um ponteiro de 24 bytes na página original da unidade de alocação IN_ROW_DATA. Se uma operação subseqüente reduzir o tamanho da linha, o SQL Server moverá as colunas dinamicamente para a página de dados original. Para obter mais informações, consulte Dados de estouro de linha excedendo 8 KB.

Extensões

As extensões são a unidade básica em que o espaço é gerenciado. Uma extensão tem oito páginas fisicamente contíguas ou 64 KB. Isso significa que os bancos de dados SQL Server têm 16 extensões por megabyte.

Para tornar a alocação de espaço eficiente, o SQL Server não aloca extensões inteiras a tabelas com quantidades pequenas de dados. O SQL Server tem dois tipos de extensões:

  • Extensões uniformes que pertencem a um único objeto; todas as oito páginas na extensão podem ser usadas apenas pelo objeto proprietário.

  • Extensões mistas compartilhadas por até oito objetos. Cada uma das oito páginas da extensão pode pertencer a um objeto diferente.

Uma nova tabela ou um índice geralmente são páginas alocadas de extensões mistas. Quando a tabela ou o índice cresce até adquirir oito páginas, é alternado para usar extensões uniformes para alocações subseqüentes. Se um índice for criado em uma tabela existente que tiver linhas suficientes para gerar oito páginas no índice, todas as alocações para o índice estarão em extensões uniformes.

Extensões mistas e uniformes