Gerenciando espaço usado por objetos

Uma página IAM (Index Allocation Map) mapeia as extensões em uma parte de 4 gigabytes (GB) de um arquivo de banco de dados usada por uma unidade de alocação. Uma unidade de alocação deve ser de um dos três tipos:

  • IN_ROW_DATA

    Mantém uma partição de um heap ou um índice.

  • LOB_DATA

    Mantém tipos de dados LOB (objetos grandes), como xml, varbinary(max) e varchar(max).

  • ROW_OVERFLOW_DATA

    Mantém dados de comprimento variável armazenados em colunas varchar, nvarchar, varbinary ou colunas sql_variant que excedem o limite de tamanho de linha de 8.060 bytes.

Cada partição de um heap ou um índice contém pelo menos uma unidade de alocação de IN_ROW_DATA. Também pode conter uma unidade de alocação do LOB_DATA ou ROW_OVERFLOW_DATA, dependendo do esquema do heap ou índice. Para obter mais informações sobre unidades de alocação, consulte Organização de tabela e índice.

Uma página IAM cobre um intervalo de 4 GB em um arquivo e tem a mesma cobertura de uma página GAM ou SGAM. Se a unidade de alocação contiver extensões de mais de um arquivo, ou mais de um intervalo de 4 GB de um arquivo, haverá várias páginas IAM vinculadas com uma cadeia de IAM. Portanto, cada unidade de alocação tem pelo menos uma página IAM para cada arquivo no qual tem extensões. Também poderá haver mais de uma página IAM em um arquivo, se o intervalo das extensões no arquivo alocado à unidade de alocação exceder o intervalo que uma única página IAM pode registrar.

Páginas IAM que gerenciam extensões

As páginas IAM são alocadas conforme exigido para cada unidade de alocação e ficam localizadas aleatoriamente no arquivo. A exibição de sistema, sys.system_internals_allocation_units, aponta para a primeira página IAM de uma unidade de alocação. Todas as páginas IAM para aquela unidade de alocação são vinculadas em uma cadeia.

Observação importanteImportante

A exibição de sistema sys.system_internals_allocation_units é destinada apenas para uso interno e está sujeita a alterações. A compatibilidade não é garantida.

Páginas IAM vinculadas em uma cadeia por unidade de alocação

Uma página IAM tem um cabeçalho que indica a extensão inicial do intervalo de extensões mapeado pela página IAM. A página IAM também tem um bitmap grande no qual cada bit representa uma extensão. O primeiro bit no mapa representa a primeira extensão no intervalo, o segundo bit representa a segunda extensão, e assim por diante. Se um bit for 0, a extensão que ele representa não será alocada à unidade de alocação que possui IAM. Se o bit for 1, a extensão que ele representa será alocada à unidade de alocação que possui página IAM.

Quando o Mecanismo de banco de dados do SQL Server precisar inserir uma linha nova e não houver espaço disponível na página atual, ele usará as páginas IAM e PFS para localizar uma página para alocação ou, para um heap ou uma página de Texto/Imagem, uma página com espaço suficiente para manter a linha. O Mecanismo de Banco de Dados usa as páginas IAM para localizar as extensões alocadas à unidade de alocação. Para cada extensão, o Mecanismo de Banco de Dados pesquisa as páginas PFS para verificar se há uma página que possa ser usada. Cada página IAM e PFS abrange muitas páginas de dados, portanto, há poucas páginas IAM e PFS em um banco de dados. Isso significa que as páginas IAM e PFS geralmente estão na memória do pool de buffers SQL Server, portanto, elas podem ser pesquisadas rapidamente. Para índices, o ponto de inserção de uma linha nova é definido pela chave do índice. Nesse caso, não acontece o processo de pesquisa descrito anteriormente.

O Mecanismo de Banco de Dados só alocará uma extensão nova a uma unidade de alocação quando não conseguir encontrar uma página rapidamente em uma extensão existente com espaço suficiente para manter a linha que estiver sendo inserida. O Mecanismo de Banco de Dados aloca extensões disponíveis no grupo de arquivos usando um algoritmo de alocação proporcional. Se um grupo de arquivos tiver dois arquivos e um deles tiver duas vezes mais espaço livre do que o outro, serão alocadas duas páginas do arquivo com o espaço disponível para cada página alocada do outro arquivo. Isso significa que todo arquivo em um grupo de arquivos deve ter uma porcentagem semelhante de espaço usado.