DBCC CheckDBの後にパフォーマンスモニターのデータベースキャッシュメモリが大幅に低下する


8

私たちはいくつかSQLServer: Memory Managerの指標を監視しており、DBCC CheckDB仕事の後、指標が

Database Cache Memory (KB)

大幅に低下します。正確には、キャッシュされた140 GBのDBメモリから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 ?

2番目の質問は、「buffer cache hit ratio」がDBCC CheckDB完了後に変更されなかった理由です。

データベースのデータをストレージからRAMに再度読み込む必要があるため、平均して99.99%で、DBCC CheckDBジョブ終了後は約98.00%に低下し、99%にかなり速くbuffer cache hit ratio戻ります。


BCHRに関して、それ以上下がらなかった理由は、CHECKDBコードが先読み(RA)を使用して実行でき、RAによって実行されたI / OがBCHRの計算に含まれないためです。これにより、BCHRはかなり役に立たないパフォーマンスカウンターになります。
Tibor Karaszi

回答:


9

一部のSQLServer:Memory Managerのメトリックを監視しており、DBCC CheckDBジョブの後、メトリックが

データベースキャッシュメモリ(KB)が大幅に低下します。正確には、140 GBのキャッシュされたDBメモリから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

2番目の質問は、DBCC CheckDBの完了後に「バッファキャッシュヒット率」が変化しなかった理由です。

これは、データがバッファキャッシュにロードされる速度に依存します。

バッファー・プールが長時間にわたって満杯になる場合、それはこの比率に達し、平均して高いままになります。

これはあなたの質問のこの部分に対応します:

...それ(バッファープールデータサイズ)は、140 GBのキャッシュされたDBメモリから60 GBに減少しました。その後、平日に再びゆっくりと上昇します...


ランディありがとう!DBCC CheckDBによって作成された内部データベーススナップショットについて話すとき、それはメモリ内に作成されますか?またはディスクで?または両方
Aleksey Vitsko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.