Implementação da compactação de páginas
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Este artigo resume como o Mecanismo de Banco de Dados implementa a compactação de páginas. Este resumo fornece informações básicas para ajudar no planejamento do espaço de armazenamento exigido pelos dados.
A compactação de página é semelhante para tabelas, partições de tabela, índices e partições de índice. A descrição a seguir de compactação de página para uma tabela se aplica à compactação de página de todos os tipos de objeto. Os exemplos a seguir compactam cadeias de caracteres, mas a compactação de prefixo e dicionário segue os mesmos princípios para outros tipos de dados.
A compactação do nível folha de tabelas e índices usando a compactação de página consiste em três operações nesta ordem:
- Compactação de linha
- Compactação de prefixo
- Compactação de dicionário
Quando você usa a compactação de página, as páginas do nível não folha dos índices são compactadas usando apenas a compactação de linha. Para obter mais informações sobre a compactação de linhas, consulte Implementação da compactação de linhas.
Compactação de prefixo
Para cada página que está sendo compactada, a compactação de prefixo usa estas etapas:
Para cada coluna, é identificado um valor que pode ser usado para reduzir o espaço de armazenamento para os valores de cada coluna.
Uma linha que representa os valores de prefixo de cada coluna é criada e armazenada em uma estrutura CI (informações de compactação) que segue imediatamente o cabeçalho da página.
Os valores de prefixo repetidos da coluna são substituídos por uma referência ao prefixo correspondente. Se o valor em uma linha não corresponder exatamente ao valor do prefixo selecionado, uma correspondência parcial ainda poderá ser indicada.
A ilustração a seguir mostra um exemplo de página de uma tabela antes da compactação de prefixo.
A ilustração a seguir mostra a mesma página após a compactação de prefixo. O prefixo é movido para o cabeçalho e os valores da coluna são alterados para referências ao prefixo.
Na primeira coluna da primeira linha, o valor 4b
indica que os quatro primeiros caracteres do prefixo (aaab
) estão presentes nessa linha, bem como o caractere b
. Isso faz com que o valor resultante seja aaabb
, que é o valor original.
Compactação de dicionário
Após a conclusão da compactação de prefixo, é aplicada a compactação de dicionário. A compactação de dicionário procura valores repetidos em qualquer lugar da página e os armazena na área de informações de compactação. Ao contrário da compactação de prefixo, a compactação de dicionário não se restringe a uma coluna. A compactação de dicionário pode substituir valores repetidos que ocorrem em qualquer lugar de uma página. A ilustração a seguir mostra a mesma página após a compactação de dicionário.
O valor 4b
foi referenciado a partir de diferentes colunas da página.
Quando ocorre a compactação de página
Quando uma tabela é criada e possui compactação de página, não ocorre compactação. No entanto, os metadados da tabela indicam que a compactação de página deve ser usada. Como os dados são adicionados à primeira página de dados, os dados são compactados por linha. Como a página não está cheia, nenhum benefício é obtido com a compactação de página. Quando a página está cheia, a próxima linha a ser adicionada inicia a operação de compactação de página. A página inteira é revisada; cada coluna é avaliada para compactação de prefixo e, em seguida, todas as colunas são avaliadas para confirmar se a compactação de dicionário é necessária. Se a compactação de página tiver criado espaço suficiente na página para uma linha adicional, a linha será adicionada, e os dados serão compactados tanto por linha quanto por página. Se o espaço obtido com a compactação de página menos o espaço necessário para a estrutura de CI não for significativo, a compactação de página não será usada para essa página. As linhas futuras caberão na nova página ou, se não couberem, uma nova página será adicionada à tabela. Da mesma forma que a primeira página, a nova página não é inicialmente compactada.
Quando uma tabela existente que contém dados for convertida para compactação de página, cada página será recriada e avaliada. A recriação de todas as páginas causará a recriação da tabela, do índice ou da partição.