Sql-Server

DBCC CheckDB 後性能監視器中的數據庫記憶體記憶體顯著下降

  • August 1, 2019

我們一直在監控一些SQLServer: Memory Manager的指標,並註意到在DBCC CheckDB工作之後,指標

Database Cache Memory (KB)

顯著下降。準確地說,它從 140 GB 記憶體數據庫記憶體下降到 60 GB。之後,在一周內再次緩慢上升。(“ Free Memory KB”的數量,緊隨其後從 20 GB 變為 100 GB CheckDB

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。之後,在一周內再次緩慢上升……

引用自:https://dba.stackexchange.com/questions/244302