DBCC CheckDB 後性能監視器中的數據庫記憶體記憶體顯著下降
我們一直在監控一些
SQLServer: Memory Manager
的指標,並註意到在DBCC CheckDB
工作之後,指標Database Cache Memory (KB)
顯著下降。準確地說,它從 140 GB 記憶體數據庫記憶體下降到 60 GB。之後,在一周內再次緩慢上升。(“
Free Memory KB
”的數量,緊隨其後從 20 GB 變為 100 GBCheckDB
)
DBCC CheckDB
每週日執行,因此數據庫記憶體記憶體必須每週再次增加What is the behavior of this ? Why CheckDB pushes database pages out of memory ?
第二個問題是為什麼“
buffer cache hit ratio
”完成後沒有變化DBCC CheckDB
?平均為 99.99%,
DBCC CheckDB
工作後下降到 ~98.00%,然後很快回到 99%,而我預計“buffer cache hit ratio
”會顯著下降,因為必須再次將數據庫數據從儲存讀取到 RAM?
我們一直在監控一些 SQLServer: Memory Manager 的指標,並註意到在 DBCC CheckDB 作業之後,指標
數據庫高速記憶體記憶體 (KB) 顯著下降。準確地說,它從 140 GB 記憶體數據庫記憶體下降到 60 GB
DBCC CHECKDB
這是正確的,當此範例命令完成時,您可以清楚地看到此行為21h45
為什麼
這種行為是由於
database snapshot
創建的DBCC
命令被刪除,刪除了它在記憶體中的所有對象。您可以通過創建數據庫快照、在記憶體中載入一些數據然後刪除該快照來複製該行為
CREATE DATABASE MY_DATABASE GO USE MY_DATABASE GO CREATE TABLE dbo.bla(id int identity(1,1) PRIMARY KEY NOT NULL, val int, val2 char(100)); INSERT INTO dbo.bla(val,val2) SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),'bla' FROM master..spt_values spt CROSS APPLY master..spt_values spt2; GO CREATE DATABASE MY_DATABASE_SNAPSHOT ON ( NAME ='MY_DATABASE', FILENAME ='D:\DATA\MY_DATABASE.ss' ) AS SNAPSHOT OF MY_DATABASE; GO USE MY_DATABASE_SNAPSHOT GO SELECT * FROM dbo.bla; SELECT COUNT(file_id) * 8/1024.0 AS BufferSizeInMB FROM sys.dm_os_buffer_descriptors;
刪除快照前的 BufferSize
BufferSizeInMB 1061.70312 --before
刪除快照
USE master GO DROP DATABASE MY_DATABASE_SNAPSHOT ;
刪除快照後的 BufferSize
BufferSizeInMB 824.179687 --after
第二個問題是為什麼 DBCC CheckDB 完成後“緩衝區記憶體命中率”沒有改變?
這取決於數據載入回緩衝區記憶體的速度。
如果您的緩衝池在較長時間內被填滿,則該比率平均應保持較高水平。
這與您問題的這一部分相對應:
…它(緩衝池數據大小)從 140 GB 記憶體數據庫記憶體下降到 60 GB。之後,在一周內再次緩慢上升……