Wir sehen sehr hohe PAGELATCH_EX- und PAGELATCH_SH-Wartetypen zusammen mit hohen WRITELOG-Wartezeiten. Ich habe die Abfrage diagnostiziert, die das Warten auf PAGELATCH verursacht, und kann sie beseitigen, indem ich die Einfügungsrate in einen ausgelasteten Cluster-Primärschlüssel reduziere, der mit einem IDENTITY-Wert definiert ist. Ich verstehe, dass dieses Phänomen als Latch-Konflikt beim Einfügen der letzten Seite bekannt ist.
Meine Frage ist jedoch, wenn SQL Server eingefügt wird, ob SQL Server ein exklusives PAGELATCH_EX auf einer Pufferseite verwendet, den Datensatz in die Pufferseite einfügt , den Datensatz in das Transaktionsprotokoll schreibt und dann das exklusive PAGELATCH_EX als detailliertes https: // freigibt www.microsoft.com/en-ie/download/details.aspx?id=26665 Page 24. Oder schreibt er den Datensatz zuerst in das Transaktionsprotokoll, bevor er den PAGELATCH_EX als detailliert "PAGELATCH-Konflikt bei sehr gleichzeitigen" INSERT-Workloads lösen - Hintergrundinformationen SQLCAT-Handbuch zu: Relational Engine
Wenn der Datensatz so geschrieben wird, dass er außerhalb des Latching-Mechanismus protokolliert wird, kann ich langsame Schreibvorgänge auf die Festplatte als Ursache für hohe PAGELATCH-Wartezeiten ausschließen. Aber wenn die Verriegelung gehalten wird, bis der Datensatz zum Protokollieren gehärtet ist, sollte ich wahrscheinlich WRITELOG in Betracht ziehen.
Würden mehrere nicht gruppierte Indizes dazu führen, dass der PAGELATCH_ * -Latch länger gehalten wird, dh wenn eine Tabelle einen Cluster aufweist und mehrere nicht gruppierte Indizes gleichzeitig Latches hinzugefügt und für jede der Indexpufferseiten freigegeben werden?
Update 1 Nach dem Lesen von confio-sql-server-writelog-wait Folie zwei und der allgemeinen WAL-Architektur. Ich bin jetzt der Ansicht, dass der in beiden Whitepapers beschriebene Schritt "Aufzeichnen eines Protokolleintrags, bei dem die Zeile geändert wurde" sich auf SQL Server bezieht, der eine Änderung im Transaktionsprotokollcache protokolliert, nicht auf der Festplatte. Sobald die Transaktion abgeschlossen oder der Puffer voll ist, werden alle Datensätze sofort auf die Festplatte geschrieben.