Estou usando o sp_spaceused
procedimento armazenado interno antes e depois de executar uma operação em nosso software para ver quais tabelas têm inserções de linha e como o tamanho de cada tabela é alterado.
O que estou vendo é que, de todas as tabelas que recebem linhas escritas para elas, apenas um punhado mostra que a tabela aumentou de lado. Os outros que mostram linhas foram adicionadas não mostram alterações no tamanho deste procedimento armazenado.
O único caso em que isso não é verdade é na primeira transação após executar um truncado em todas as tabelas. Então, para mim, parece que, em vez de armazenar dados duplicados, o SQL Server está mostrando linhas inseridas, mas deve estar apenas armazenando ponteiros para linhas idênticas anteriores.
Alguém pode confirmar isso por favor?
fonte
Respostas:
Não, o SQL Server não detecta linhas duplicadas
O SQL Server está preenchendo páginas vazias ou parcialmente vazias nas páginas alocadas.
Portanto, se eu tiver uma linha muito estreita (digamos 2 colunas), posso adicionar mais algumas centenas de linhas na mesma página sem aumentar o espaço usado.
Demonstração rápida e suja (sem linhas duplicadas, mas você pode jogar com isso, se quiser)
fonte
Depende da versão do SQL Server e das opções de compactação de dados:
Portanto, para compactação de prefixo e dicionário (compactação de página), o SQL Server usa ponteiros para armazenar (parcialmente ou totalmente) valores duplicados (não linhas duplicadas) na mesma coluna ou no diff. colunas.
Resultados:
fonte