Tôi hơi tò mò, một trong những phiên bản SQL 2012 dành cho doanh nghiệp với 128 GB dung lượng RAM của cơ sở dữ liệu là 370 GB và đang tăng lên, dung lượng bộ nhớ được sử dụng bởi các nhân viên khóa (OBargetSTORE_LOCK_Manager) hiển thị 7466016 KB. Tôi cũng có thể xác nhận rằng bằng cách nhìn vào quầy hoàn hảoselect * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)'
Tuy nhiên, khi tôi chạy truy vấn
select count(*) from sys.dm_tran_locks
Nó chỉ hiển thị 16 ổ khóa. Vì vậy, những gì đang sử dụng hơn 7 GB ổ khóa. Có cách nào để tìm ra?
Điều đó có nghĩa là nếu một khi bộ nhớ cho các khóa đã được cấp phát thì SQL vẫn chưa được giải phóng nó? Trong 1 giờ qua tôi không thấy số lượng khóa vượt quá 500 nhưng bộ nhớ khóa vẫn giữ nguyên.
EDIT: Bộ nhớ máy chủ tối đa là 106 GB, Chúng tôi không sử dụng các trang khóa trong bộ nhớ và tôi không thấy bất kỳ áp lực bộ nhớ hoặc bất kỳ lỗi nào trong nhật ký lỗi trong 12 giờ qua. Avialble MBytes couter hiển thị hơn 15 GB bộ nhớ khả dụng.
EDIT 2 Trình giám sát hoạt động luôn hiển thị 0 nhiệm vụ chờ nên rõ ràng là không chặn.
Xem xét khóa máy chủ SQL mất khoảng 100 byte bộ nhớ 7 GB là rất nhiều bộ nhớ và cố gắng tìm ra ai đang sử dụng nó.
EDIT 3: Tôi chạy một bảng điều khiển máy chủ báo cáo giao dịch hàng đầu bằng số đếm khóa cho biết "hiện tại không có giao dịch khóa nào đang chạy trên hệ thống. Tuy nhiên, bộ nhớ khóa vẫn hiển thị như đã nêu ở trên. DB bận nhất trong giờ qua đêm.