Várias perguntas sobre SGAM e GAM e IAM e PFS no SQL Server

8

Tem várias perguntas sobre a estrutura interna do SQL Server.

Vamos supor que temos uma tabela em um banco de dados.

  1. As páginas SGAM e GAM acompanham as extensões compartilhadas e uniformes em um único intervalo GAM (~ 4 GB) e nos ajudam a encontrar o tipo apropriado de extensão ao alocar páginas / extensões (inicialmente as primeiras 8 páginas são alocadas a partir de extensões e posições mistas dessas páginas). gravador para as páginas do IAM e, depois, das extensões do GAM (extensões uniformes) e essas informações são armazenadas na próxima página do IAM em cadeia).

    Digamos que as páginas da tabela foram alocadas, o tamanho da tabela é superior a 8 páginas e, algum tempo depois, as linhas foram excluídas, deixando algum espaço reutilizável. Como o SQL Server sabe que extensões têm espaço livre?

    As páginas têm informações sobre o tamanho do espaço livre, mas é muito demorado verificar todas as páginas. Os bits nas páginas SGAM e GAM não nos dizem nada além do que a extensão está alocada ou tem algumas páginas gratuitas (a página inteira é gratuita, não parcialmente).

  2. As páginas de cabeçalho do arquivo e SGAM, GAM e IAM estão entre as primeiras páginas de um arquivo. Que estrutura de dados realmente aponta para eles?

nova impressão
fonte

Respostas:

11

Como o SQL Server sabe que extensões têm espaço livre?

O SQL Server rastreia o espaço livre na página, nas tabelas de heap e também nas páginas LOB usando a página PSF internamente.

Além disso, você pode usar o sys.dm_db_file_space_usageDMV para descobrir total_page_count, allocated_extent_page_countbem como unallocated_extent_page_countdentro de um banco de dados.

As páginas Espaço Livre da Página (PFS) 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 possui um byte para cada página, registrando se a página está alocada e, se estiver, se está vazia, de 1 a 50%, de 51 a 80%, de 81 a 95% ou de 96 a 100%.

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

Clique aqui para ampliar - saída usando DBCC PAGE

insira a descrição da imagem aqui

Consulte: Por dentro do mecanismo de armazenamento: GAM, SGAM, PFS e outros mapas de alocação

As páginas de cabeçalho do arquivo e SGAM, GAM e IAM estão entre as primeiras páginas de um arquivo. Que estrutura de dados realmente aponta para eles?

Eu não entendi essa pergunta. A menor unidade de armazenamento é uma página. Oito páginas de 8K formam uma extensão. Abaixo está o que compreende uma página de dados :

insira a descrição da imagem aqui

Eu recomendo ler o blog SQLSkills.com, no qual Paul e sua equipe escrevem muito sobre os internos do SQL Server .

Kin Shah
fonte