Gostaria de obter algumas informações / raciocínios adicionais sobre o comportamento de exclusão do SQL Server. Temos um banco de dados bastante grande com mais de 1800 GB.
Existem algumas tabelas muito rasas (apenas algumas colunas inteiras) com muitos milhões de linhas. Quando excluímos 10.000s de linhas dessas tabelas rasas, as consultas de exclusão geralmente são bastante rápidas (no máximo alguns segundos).
Também temos uma tabela com um campo do tipo que image
armazena imagens com média de 100 KB. Quando excluímos apenas alguns milhares de linhas desta tabela, leva mais de um minuto.
Embora a diferença seja clara (muito mais tamanho de dados é excluído), estou ansioso para saber mais sobre o que acontece no SQL Server. Para que eu possa entender melhor, o último exclui ser muito mais lento.
Alguém por favor pode lançar alguma luz?
fonte
Respostas:
A exclusão de um
image
blob de 100 KB não é, na verdade, uma operação de tamanho de dados. O blob é desalocado, não excluído e não há log de imagem completa. Você pode facilmente testar isso:Os registros de log que você verá serão algo como:
Como você pode ver, não há registro 'DELETE' com +102400 bytes de dados para a linha que contém a
image
coluna. Existem várias desalocações (a operação PFS / IAM / GAM) e uma simples exclusão de linha (no meu caso, heap seria muito semelhante para o B-Tree se eu tivesse lembrado de declarar o ID como PK ...). Para obter mais detalhes, consulte Como ler e interpretar o log do SQL Server .O que deixa em aberto a pergunta original: por que uma exclusão é mais lenta que a outra? Eu recomendo que você leia Como analisar o desempenho do SQL Server . Siga a metodologia descrita para capturar as esperas de uma declaração específica e ver qual é a causa. Consulte Analisando a execução de consultas individuais , especialmente a parte sobre Analisando os tempos de espera da execução de consultas individuais. Somente depois que você medir, poderemos responder ao enigma. pode haver muitos fatores: mais bloqueios devido a leituras simultâneas na tabela de blob, falta de índices para localizar as linhas candidatas a DELETE em uma tabela, aciona a execução etc. etc. A metodologia vinculada ajudará você a identificar a causa.
fonte