Saya agak penasaran, salah satu edisi SQL 2012 perusahaan dengan 128 GB ukuran RAM basis data adalah 370 GB dan terus bertambah, jumlah memori yang digunakan oleh kunci (OBJECTSTORE_LOCK_Manager) petugas memori menampilkan 7466016 KB. Saya juga bisa mengkonfirmasi dengan melihat counter perfselect * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)'
Namun, saat saya menjalankan kueri
select count(*) from sys.dm_tran_locks
ini hanya menampilkan 16 kunci. Jadi apa yang menggunakan kunci lebih dari 7 GB. Apakah ada cara untuk mengetahuinya?
Apakah itu berarti jika begitu memori untuk kunci telah dialokasikan, SQL belum membatalkan alokasi itu? Dalam 1 jam terakhir saya tidak melihat jumlah kunci melebihi 500 tetapi memori kunci tetap sama.
Max Server Memory adalah 106 GB, Kami tidak menggunakan halaman kunci dalam memori dan saya tidak melihat tekanan memori atau kesalahan dalam log kesalahan dalam 12 jam terakhir. Penghitung MBytes yang tersedia menunjukkan lebih dari 15 GB memori yang tersedia.
Monitor aktivitas secara konsisten menunjukkan 0 tugas tunggu sehingga jelas tidak ada pemblokiran.
Mengingat kunci server SQL membutuhkan sekitar 100 byte memori, 7 GB adalah banyak memori dan mencoba mencari tahu siapa yang menggunakannya.
Saya menjalankan papan dasbor server melaporkan transaksi teratas dengan jumlah kunci mengatakan "saat ini tidak ada transaksi penguncian yang berjalan pada sistem. Namun, memori kunci masih menunjukkan seperti yang dinyatakan di atas. DB paling sibuk selama jam semalam.