Sql Server 2008-Update-Abfrage so viel Zeit
Ich habe eine Tabelle name Companies
mit 372370
records.
Und es ist nur eine Zeile, die hat CustomerNo = 'YP20324'
.
Ich eine folgende Abfrage ausgeführt und das dauert so viel Zeit, ich wartete 5 Minuten und es war immer noch läuft. Ich konnte nicht herausfinden, wo das problem ist.
UPDATE Companies SET UserDefined3 = 'Unzustellbar 13.08.2012' WHERE CustomerNo = 'YP20324'
- was ist Indizes ??
- "372370 records. "- das ist eine sehr kleine Zahl....
- Überprüfen Sie die sperren für die Tabelle. Versuchen Sie es ausführen
SELECT
mit der gleichenWHERE
- Klausel und sehen Sie, wie viel Zeit es braucht. - es dauert weniger als eine Sekunde, wenn ich ausführen, WÄHLEN Sie mit der gleichen WHERE-Klausel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie don ' T Trigger on update, das auf dieser Tabelle?
Haben Sie eine cascade foreign key auf die Spalte?
Sind Sie sicher, dass die Leistung Ihrer server? versuchen Sie, einen Blick auf die Speicher, cpu, wenn Sie die Abfrage ausführen (zum Beispiel auf einem 386er mit 640 MB könnte ich verstehen, dass es langsam ist :p)
Und für die sperren können Sie mit der rechten klicken Sie auf die Datenbank und auf den Bericht, den Sie sehen können, das blockieren von Transaktionen. Manchmal hilft es, für gleichzeitigen Zugriff.
Versuchen Sie, einen index auf das Feld, das Sie verwenden in Ihrem
WHERE
Klausel:Überprüfen Sie auch, ob es andere aktive Abfragen, die blockieren könnten das update.
Versuchen Sie diese SQL und sehen, was läuft:
Mehr details:
Liste der Abfragen unter SQL-Server
oder
http://sqlhint.com/sqlserver/scripts/tsql/list-long-running-queries
Sobald ich jemanden gefunden, Datenbank verkleinern und blockieren alle anderen Menschen.
Mehr als wahrscheinlich nicht Ihre UPDATE nichts tut, wird das nur darauf wartet, blockiert durch eine andere Anweisung. Verwenden Activity Monitor zu untersuchen, was die Ursache der Blockierung. Wahrscheinlich haben Sie ein weiteres statement, dass die Schritte einer Transaktion, und Sie haben vergessen, es zu schließen.
Könnte es andere Ursachen zu, zB. Datenbank/log Wachstum. Nur Sie können die Untersuchung. Ein index auf
CustomerNo
erforderlich ist, stimmt, aber das fehlen eines index ist unwahrscheinlich, um zu erklären, 5 Minuten auf 370k Datensätze. Blockieren ist eher.Gibt es mehr fortschrittliche tools wie
sp_whoisactive
.5mn ist viel zu lang für 370k Zeilen, auch ohne Indizes, jemand anderes ist das sperren Ihre update. verwenden
sp_who2
(oder activity monitor), und überprüfen Sie BlockedBy Spalte zu finden, die sperren Ihre updateIch würde vorschlagen, um eine Neuerstellung der Indizes. Das sollte sicher helfen.
Wenn Sie nicht über index auf Feld CustomerNo müssen Sie eine hinzufügen.
370k Datensätze ist nichts für sql Server. Sie sollten überprüfen, Indizes auf dieser Tabelle. Jeder index macht den update-Vorgang länger.
WHERE
Klausel würde erheblich beschleunigen update. Wenn Sie viele Indizes zu aktualisieren, weil der Felder, die sich geändert haben, dass könnte verlangsamtINSERT
oderUPDATE
aber nicht viel, und nur, wenn das Massenladen von vielen Zeilen.