Welche Konsequenzen hat die Verwendung der Option für die Tabellensperre bei einem schnellen Ladeziel?

8

Ich versuche, eine Faktentabelle als Teil eines Gesamtleistungsprojekts zu beschleunigen. Der Tisch ist nur etwa 120 Millionen Zeilen, etwa 100k sind jeden Abend hinzugefügt. Der Tisch ist ziemlich stark indiziert.

Momentan verwende ich ein SSIS Fast Load OLE DB Ziel und das Laden der 100.000 Zeilen dauert ungefähr 15 Minuten. Das schien mir sehr hoch zu sein, um 100k Zeilen einzufügen, also änderte ich das Paket, um seine Ergebnisse in eine Zwischenspeichertabelle zu schreiben, und testete dann einen T-SQL aus dieser Zwischenspeichertabelle in die Faktentabelle. Die Einfügung läuft jetzt in weniger als 1 Minute.

Ich fand es ziemlich merkwürdig, dass eine einfache alte T-SQL-Einfügung schneller als SSIS Fast Load wäre, also habe ich angefangen zu schauen, welche Kästchen am OLEDB-Ziel überprüft wurden. Es stellt sich heraus, dass die Tabellensperre NICHT überprüft wurde. Wenn ich diese Option ankreuze, ist die SSIS-Last jetzt unter 1 Minute. Meine Fragen sind:

  • Welche Auswirkungen hat die Deaktivierung der Tabellensperre?
  • Gibt die T-SQL-Insert-Anweisung standardmäßig eine Tabellensperre aus, weshalb sie anfänglich schneller war?
AS2012 20.05.2013, 16:49
quelle

1 Antwort

7

Nun, ich denke, die Erklärung ist einfach (siehe eine ausführlichere Referenz hier ):

Für Ihre erste Frage:

  

Table Lock - Standardmäßig ist diese Einstellung aktiviert und die Empfehlung   ist es zu überprüfen, es sei denn, die gleiche Tabelle wird von einigen verwendet   anderer Prozess zur gleichen Zeit. Es gibt an, dass eine Tabellensperre erworben wird   in der Zieltabelle, anstatt mehrere Zeilen zu erfassen   Sperren, die zu Lock-Eskalationsproblemen führen könnten.

Was die INSERT-Anweisung betrifft, so wird in Anbetracht der ziemlich großen Anzahl von Zeilen, die eingefügt werden müssen, SQL Server höchstwahrscheinlich eine Tabellensperre setzen.

Um dies zu bestätigen, können Sie überprüfen, welche Art von Sperren auf dem Tisch gehalten werden, indem Sie%% DM% verwenden. Hier sind ein paar gute Beispiele dafür, wie man die Ergebnisse interpretiert (und auch eine gute Leseleistung bei Lock-Eskalation): Ссылка .

    
Marcel N. 20.05.2013, 17:21
quelle

Tags und Links