Je sais qu'un INSERT sur une table SQL peut être lent pour plusieurs raisons:
- Existence de INSERT TRIGGER sur la table
- Beaucoup de contraintes imposées qui doivent être vérifiées (généralement des clés étrangères)
- La page se divise dans l'index cluster lorsqu'une ligne est insérée au milieu du tableau
- Mise à jour de tous les index non cluster liés
- Blocage d'une autre activité sur la table
- Mauvais temps de réponse en écriture IO
- ... quelque chose que j'ai manqué?
Comment savoir qui est responsable dans mon cas spécifique? Comment puis-je mesurer l'impact des fractionnements de page par rapport aux mises à jour d'index non clusterisées par rapport à tout le reste?
J'ai un proc stocké qui insère environ 10 000 lignes à la fois (à partir d'une table temporaire), ce qui prend environ 90 secondes par 10 000 lignes. C'est trop lent, car cela provoque la temporisation d'autres spids.
J'ai examiné le plan d'exécution et je vois la tâche INSERT CLUSTERED INDEX et toutes les INDEX SEEKS des recherches FK, mais cela ne me dit toujours pas avec certitude pourquoi cela prend si longtemps. Pas de déclencheurs, mais la table a une poignée de FKeys (qui semblent être correctement indexés).
Il s'agit d'une base de données SQL 2000.