Ich möchte einige zusätzliche Einblicke / Gründe für das Löschverhalten von SQL Server erhalten. Wir haben eine ziemlich große Datenbank von über 1800 GB.
Darin befinden sich einige sehr flache Tabellen (nur wenige ganzzahlige Spalten) mit vielen Millionen Zeilen. Wenn wir 10.000 Zeilen aus diesen flachen Tabellen löschen, sind die Löschabfragen im Allgemeinen recht schnell (höchstens eine Handvoll Sekunden).
Wir haben auch eine Tabelle mit einem Feld vom Typ, in dem image
Bilder mit einer durchschnittlichen Größe von 100 KB gespeichert sind. Wenn wir nur einige tausend Zeilen aus dieser Tabelle löschen, dauert es weit über eine Minute.
Obwohl der Unterschied klar ist (viel mehr Daten werden gelöscht), bin ich gespannt darauf, mehr darüber zu erfahren, was in SQL Server passiert. Damit ich besser verstehen kann, löscht letzteres so viel langsamer.
Kann jemand bitte etwas Licht ins Dunkel bringen?
quelle
Antworten:
Das Löschen eines 100-KB-
image
Blobs ist eigentlich keine Operation mit Datengröße. Der Blob wird freigegeben, nicht gelöscht, und es erfolgt keine Vollbildprotokollierung. Sie können dies leicht testen:Die Protokolldatensätze, die Sie sehen, sehen wie folgt aus:
Wie Sie sehen können, gibt es keinen 'DELETE'-Datensatz mit +102400 Datenbytes für die Zeile, die die
image
Spalte enthält. Es gibt eine Reihe von Freigaben (die PFS / IAM / GAM-Operation) und eine einfache Zeilenlöschung (Heap würde in meinem Fall für B-Tree sehr ähnlich aussehen, wenn ich daran gedacht hätte, ID als PK zu deklarieren ...). Weitere Informationen finden Sie unter Lesen und Interpretieren des SQL Server-Protokolls .Was die ursprüngliche Frage offen lässt: Warum ist ein Löschvorgang langsamer als der andere? Ich empfehle Ihnen , die Analyse der SQL Server-Leistung zu lesen . Befolgen Sie die beschriebene Methode, um die Wartezeiten für eine bestimmte Anweisung zu erfassen und die Ursache zu ermitteln. Siehe Analysieren der Ausführung einzelner Abfragen , insbesondere den Teil Analysieren der Wartezeiten für die Ausführung einzelner Abfragen. Erst nachdem Sie gemessen haben, können wir das Rätsel beantworten. Es kann viele Faktoren geben: Mehr Blockierung aufgrund gleichzeitiger Lesevorgänge in der Blob-Tabelle, fehlende Indizes zum Auffinden der DELETE-Kandidatenzeilen in einer Tabelle, Ausführen von Triggern usw. usw. Die verknüpfte Methode hilft Ihnen dabei, die Ursache zu ermitteln.
quelle