Eu sei que um INSERT em uma tabela SQL pode ser lento por vários motivos:
- Existência de INSERT TRIGGERs na mesa
- Muitas restrições impostas que precisam ser verificadas (geralmente chaves estrangeiras)
- A página é dividida no índice clusterizado quando uma linha é inserida no meio da tabela
- Atualizando todos os índices não agrupados relacionados
- Bloqueio de outras atividades na mesa
- Tempo de resposta de gravação de E / S insuficiente
- ... alguma coisa que eu perdi?
Como posso saber qual é o responsável no meu caso específico? Como posso medir o impacto das divisões de página versus atualizações de índice não agrupadas em cluster e tudo o mais?
Eu tenho um proc armazenado que insere cerca de 10.000 linhas por vez (de uma tabela temporária), que leva cerca de 90 segundos por 10 mil linhas. Isso é inaceitavelmente lento, pois faz com que outros spids se esgotem.
Examinei o plano de execução e vejo a tarefa INSERT CLUSTERED INDEX e todas as INDEX BUSCAS das pesquisas do FK, mas ainda não me diz ao certo por que leva tanto tempo. Não há gatilhos, mas a tabela possui um punhado de FKeys (que parecem estar adequadamente indexados).
Este é um banco de dados SQL 2000.