Blockieren von Sequenzobjekten
Wir haben ein Problem mit einem Sequenzobjekt, das wir haben und das als viel bezeichnet wird. Es wird verwendet, um einen Wert zuzuweisen, bevor ein Datensatz in eine Tabelle eingefügt wird.
Heute habe ich gesehen, dass über 700 Sitzungen (die alle versuchten, den nächsten Wert vom Sequenzobjekt abzurufen) von einer Sitzung blockiert wurden, die versuchte, den nächsten Wert vom Sequenzobjekt mit einem Wartetyp von PAGELATCH_EX abzurufen. Die anderen über 700 Sitzungen warteten auf LATCH_EX.
Als ich in die Wait-Ressource schaute, bezog sie sich auf sys.sysobjvalues.
Ich bin neugierig, warum dies passieren kann und ob andere Leute dies gesehen haben. Wir haben kürzlich den CACHE-Wert für diese Sequenz von DEFAULT (50) auf 200 geändert. Ich nahm an, dass dies die Leistung beim Aufrufen der Sequenz verbessern würde, da wir sie so häufig verwenden, aber möglicherweise habe ich mich geirrt.
Wir verwenden SQL Server 2012 SP4.
Antworten
Die anderen über 700 Sitzungen warteten auf LATCH_EX.... Wir haben kürzlich den CACHE-Wert für diese Sequenz von DEFAULT (50) auf 200 geändert.
Wenn Sie 700 wartende Sitzungen haben, ist mein erster Gedanke, dass der Cache angesichts der Arbeitslast viel höher sein muss. Ich würde empfehlen, etwas im Bereich von 500-1000 auszuprobieren (und vielleicht weiter zu erhöhen), bis Sie sehen, dass sich die Wartezeiten entweder stabilisieren oder abfallen. Es sollte einen Sweet Spot geben, den Sie mit einem größeren Cache-Wert finden können.