Мне любопытно, что одна из корпоративных выпусков SQL 2012 с объемом оперативной памяти 128 ГБ составляет 370 ГБ и растет, объем памяти, используемый клерком памяти блокировок (OBJECTSTORE_LOCK_Manager), показывает 7466016 КБ. Я также могу подтвердить это, посмотрев на счетчик перфорированияselect * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)'
Тем не менее, когда я запускаю запрос
select count(*) from sys.dm_tran_locks
это показывает только 16 замков. Так что используется более 7 ГБ замков. Есть ли способ узнать?
Означает ли это, что когда память для блокировок была выделена, SQL еще не освободил ее? За последние 1 час я не вижу количество блокировок, превышающее 500, но память блокировки остается прежней.
Максимальный объем памяти сервера составляет 106 ГБ. Мы не используем блокировку страниц в памяти, и я не вижу какого-либо давления памяти или ошибок в журнале ошибок за последние 12 часов. Счетчик доступных MBytes показывает более 15 ГБ доступной памяти.
Монитор активности последовательно показывает 0 ожидающих задач, поэтому, очевидно, нет блокировки.
Учитывая, что блокировка сервера SQL занимает около 100 байт памяти, 7 ГБ - это много памяти, и мы пытаемся выяснить, кто ее использует.
Я запускаю отчет о верхней транзакции на панели мониторинга сервера по счетчику блокировок, который говорит: «в настоящее время в системе не выполняется транзакций блокировки. Однако блокировка памяти по-прежнему отображается, как указано выше. БД наиболее загружена в течение ночных часов.