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.