Speicher, der von Locks verwendet wird

9

Ich bin ein bisschen neugierig, eine der SQL 2012 Enterprise Edition mit 128 GB RAM-Größe der Datenbank ist 370 GB und wächst, Speicherplatz wird von Sperren (OBJECTSTORE_LOCK_Manager) verwendet, der 7466016 KB anzeigt. Ich kann das auch bestätigen, indem ich mir den Perf Counter anseheselect * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)'

Wenn ich jedoch eine Abfrage ausführe

select count(*) from sys.dm_tran_locks

Es werden nur 16 Sperren angezeigt. Was verwendet also mehr als 7 GB Sperren? Gibt es einen Weg, das herauszufinden?

Bedeutet dies, dass SQL nach der Zuweisung von Speicher für Sperren noch nicht freigegeben wurde? In den letzten 1 Stunden habe ich keine Sperranzahl von mehr als 500 gesehen, aber der Sperrspeicher bleibt gleich.

BEARBEITEN: Der maximale Serverspeicher beträgt 106 GB. Wir verwenden keine Sperrseiten im Speicher und ich sehe in den letzten 12 Stunden keinen Speicherdruck oder Fehler im Fehlerprotokoll. Avialble MBytes Couter zeigt mehr als 15 GB verfügbaren Speicher an.

EDIT 2 Der Aktivitätsmonitor zeigt konsistent 0 wartende Aufgaben an, also offensichtlich keine Blockierung.

Wenn man bedenkt, dass die SQL Server-Sperre ungefähr 100 Byte Speicher benötigt, sind 7 GB viel Speicher und der Versuch herauszufinden, wer sie verwendet.

BEARBEITEN 3: Ich führe eine Server-Dashboard-Bericht-Top-Transaktion nach Sperranzahl aus. Dort heißt es: "Derzeit werden keine Sperrtransaktionen auf dem System ausgeführt. Der Sperrspeicher wird jedoch weiterhin wie oben angegeben angezeigt. Die Datenbank ist während der Nachtstunden am stärksten ausgelastet.

SQL Learner
quelle
Ich würde vorschlagen, sowohl system_health als auch RING_BUFFERS zu betrachten, um zu sehen, was los ist
Kin Shah

Antworten:

8

Der Sperrmanager ist ein derart heißer kritischer Codepfad (wahrscheinlich der heißeste kritische Codepfad), dass er, wenn er auf eine Speicherzuweisung für jede Sperrleistung warten müsste, tanken würde. Es weist wahrscheinlich große Speicherblöcke zu und verwaltet sie selbstständig. Es würde mich nicht wundern, wenn es auch Speicher reserviert, damit in einigen kritischen Codepfaden nicht der Speicher ausgeht.

Remus Rusanu
quelle
Remus, ich weiß nicht, wer sonst in diesem Forum die C ++ - Seite von SQL Server so gut kennt wie Sie. Geben Sie also einen Vorteil des Zweifels. :-)
SQL Learner
6

Nachtrag zu @ RemusRusanus Antwort (würde nicht in einen Kommentar passen) ...

Angesichts der Tatsache, dass das Datenbankmodul bis zu 5000 Sperren pro Objekt zulässt, bevor es eskaliert und Remus 'Antwort bezüglich der kritischen Natur des Sperrenmanagers berücksichtigt, erscheint die hohe Reservierung plausibel:

5000 (Sperren) * 10 (Tabellen oder Indizes) * 96 (Bytes pro Sperre) * 1000 (gleichzeitige Abfragen) = 4,47 GB

Ich würde spekulieren, dass die Reservierung aus einer Kombination des verfügbaren Arbeitsspeichers und der aktuellen Arbeitslast abgeleitet wurde, aber nirgendwo dokumentiert oder gebloggt wurde. Könnte auch spekulieren, dass Ihr 128-GB-Speicher 2008 als großzügig eingestuft worden wäre und die 7-GB-Reservierung darauf hindeutet, dass bei dieser Größe eine hohe OLTP-Arbeitslast erwartet wird.

Mark Storey-Smith
quelle
1
Die Datenbankgröße wird voraussichtlich bis Ende des Jahres 1,5 TB betragen. Sie ist erst seit einigen Wochen in Betrieb. Ihre Berechnung macht irgendwie Sinn.
SQL Learner
2

sys.dm_tran_lock zeigt gesperrte Ressourcen und Anforderungen für Sperren für Ressourcen an , nicht für einzelne Zeilen, die gesperrt wurden. Jede gesperrte Ressource enthält viele Zeilen und möglicherweise andere Objekte, die gesperrt sind.

Gibt Informationen zu derzeit aktiven Lock Manager-Ressourcen zurück. Jede Zeile stellt eine aktuell aktive Anforderung an den Sperrmanager für eine Sperre dar, die gewährt wurde oder darauf wartet, gewährt zu werden.

Die Spalten in der Ergebnismenge sind in zwei Hauptgruppen unterteilt: Ressource und Anforderung. Die Ressourcengruppe beschreibt die Ressource, für die die Sperranforderung gestellt wird, und die Anforderungsgruppe beschreibt die Sperranforderung.

Stoleg
quelle