Ich weiß, dass ein INSERT in einer SQL-Tabelle aus einer Reihe von Gründen langsam sein kann:
- Vorhandensein von INSERT TRIGGERs auf dem Tisch
- Viele erzwungene Einschränkungen, die überprüft werden müssen (normalerweise Fremdschlüssel)
- Die Seite wird im Clustered-Index aufgeteilt, wenn eine Zeile in die Mitte der Tabelle eingefügt wird
- Aktualisieren aller zugehörigen nicht gruppierten Indizes
- Blockieren von anderen Aktivitäten auf dem Tisch
- Schlechte Antwortzeit für E / A-Schreibvorgänge
- ... was ich verpasst habe?
Wie kann ich feststellen, welche in meinem speziellen Fall verantwortlich ist? Wie kann ich die Auswirkung von Seitenteilen im Vergleich zu nicht gruppierten Indexaktualisierungen im Vergleich zu allem anderen messen?
Ich habe eine gespeicherte Prozedur, die ungefähr 10.000 Zeilen gleichzeitig einfügt (aus einer temporären Tabelle), was ungefähr 90 Sekunden pro 10k Zeilen dauert. Das ist inakzeptabel langsam, da andere Spids ausfallen.
Ich habe mir den Ausführungsplan angesehen und sehe die INSERT CLUSTERED INDEX-Task und alle INDEX SEEKS aus den FK-Lookups, aber es sagt mir immer noch nicht genau, warum es so lange dauert. Keine Trigger, aber die Tabelle enthält eine Handvoll FKeys (die korrekt indiziert zu sein scheinen).
Dies ist eine SQL 2000-Datenbank.