Tenho várias dúvidas sobre estrutura interna do SQL Server.
Vamos supor que temos uma tabela em um banco de dados.
As páginas SGAM e GAM acompanham as extensões compartilhadas e uniformes dentro de 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 de extensões mistas e as posições dessas páginas são gravador para as páginas IAM e, depois disso, das extensões GAM (extensões uniformes) e essas informações são armazenadas na próxima página IAM encadeada).
Digamos que as páginas da tabela foram alocadas e 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 as 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 de que a extensão está alocada ou tem algumas páginas gratuitas (a página inteira é gratuita, não parcialmente).
O cabeçalho do arquivo e as páginas SGAM, GAM e IAM estão entre as primeiras páginas de um arquivo. Qual estrutura de dados realmente aponta para eles?
O SQL Server rastreia o espaço livre na página, em tabelas heap, bem como em páginas LOB usando a página PSF internamente.
Além disso, você pode usar
sys.dm_db_file_space_usage
o DMV para descobrirtotal_page_count
,allocated_extent_page_count
bem comounallocated_extent_page_count
em um banco de dados.Clique aqui para ampliar - saída usando DBCC PAGE
Consulte: Inside The Storage Engine: GAM, SGAM, PFS e outros mapas de alocação
Eu não entendo esta pergunta. A menor unidade de armazenamento é uma página. Oito páginas 8K formam uma extensão. Abaixo está o que compreende uma página de dados :
Eu recomendo ler o blog SQLSkills.com, no qual Paul e sua equipe escrevem muito sobre os componentes internos do SQL Server .