Gerenciando alocações de extensão e espaço livre

As estruturas de dados SQL Server que gerenciam alocações de extensão e controlam espaço livre têm uma estrutura relativamente simples. Seus benefícios são:

  • As informações de espaço livre são compactadas, portanto, poucas páginas contêm essas informações.

    Isso aumenta a velocidade reduzindo a quantidade de leituras de disco exigidas para recuperar as informações de alocação. Além disso, também aumenta a chance de as páginas de alocação permanecerem na memória e não exigirem mais leituras.

  • A maioria das informações de alocação não é encadeada. Isso simplifica a manutenção das informações de alocação.

    Cada alocação ou desalocação de página pode ser executada rapidamente. O que diminui a contenção entre tarefas simultâneas que precisam alocar ou desalocar páginas.

Gerenciando alocações de extensão

O SQL Server usa dois tipos de mapas de alocação para registrar a alocação de extensões:

  • Global Allocation Map (GAM)

    As páginas GAM registram quais extensões foram alocadas. Cada GAM cobre 64.000 extensões ou quase 4 GB de dados. O GAM tem um bit para cada extensão no intervalo que cobre. Se o bit for 1, a extensão será livre; se o bit for 0, a extensão será alocada.

  • Shared Global Allocation Map (SGAM)

    As páginas SGAM registram quais extensões estão sendo usadas atualmente como extensões mistas e também têm pelo menos uma página não usada. Cada SGAM cobre 64.000 extensões ou quase 4 GB de dados. O SGAM tem um bit para cada extensão no intervalo que abrange. Se o bit for 1, a extensão será usada como uma extensão mista e terá uma página livre. Se o bit for 0, a extensão não será usada como uma extensão mista, ou será uma extensão mista e todas as suas páginas estarão sendo usadas.

Cada extensão tem os padrões de bit a seguir configurados no GAM e no SGAM, com base em seu uso atual.

Uso atual da extensão

Configuração de bit GAM

Configuração de bit SGAM

Livre, não está sendo usado

1

0

Extensão uniforme ou extensão mista completa

0

0

Extensão mista com páginas livres

0

1

Isso gera algoritmos de gerenciamento de extensão simples. Para alocar uma extensão uniforme, o Mecanismo de Banco de Dados pesquisa o GAM de um 1 bit e o define como 0. Para encontrar uma extensão mista com páginas livres, o Mecanismo de Banco de Dados pesquisa o SGAM de um 1 bit. Para alocar uma extensão mista, o Mecanismo de Banco de Dados pesquisa o GAM de um 1 bit, o define como 0 e define o bit correspondente no SGAM como 1. Para desalocar uma extensão, o Mecanismo de Banco de Dados verifica se o bit do GAM está definido como 1 e o bit do SGAM como 0. Os algoritmos usados internamente pelo Mecanismo de Banco de Dados são mais complexos que os descritos neste tópico, porque o Mecanismo de Banco de Dados distribui dados uniformemente em um banco de dados. No entanto, até os algoritmos reais são simplificados por não precisarem gerenciar cadeias de informações de alocação de extensão.

Controlando espaço livre

As páginas PFS (Page Free Space) registram o status de alocação de cada página, se uma página individual foi alocada, e a quantidade de espaço livre em cada página. O PFS tem um byte para cada página, que registra se a página está alocada e, em caso afirmativo, se ela está vazia, de 1 a 50% completa, de 51 a 80% completa, de 81 a 95% completa ou de 96 a 100% completa.

Após a alocação de uma extensão a um objeto, o Mecanismo de Banco de Dados usa as páginas PFS para registrar quais páginas na extensão são alocadas ou livres. Essas informações são usadas quando o Mecanismo de Banco de Dados precisa alocar uma página nova. A quantidade de espaço livre em uma página é mantida apenas para páginas heap e de Texto/Imagem. Ela é usada quando o Mecanismo de Banco de Dados precisa encontrar uma página com espaço livre disponível para manter uma linha recentemente inserida. Como o ponto em que a linha nova deve ser inserida é definido pelos valores de chave de índice, os índices não exigem que o espaço livre da página seja controlado.

Uma página PFS é a primeira página após a página de cabeçalho do arquivo em um arquivo de dados (página número 1). Ela é seguida por uma página GAM (página número 2) e uma página SGAM (página 3). Há uma página PFS de aproximadamente 8.000 páginas em tamanho após a primeira página PFS. Há outra página GAM com 64.000 extensões após a primeira página GAM na página 2, e outra página SGAM com 64.000 extensões após a primeira página SGAM na página 3. A ilustração a seguir mostra a seqüência de páginas usada pelo Mecanismo de Banco de Dados para alocar e gerenciar as extensões.

Páginas usadas para alocar e gerenciar extensões