一部の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に減少しました。その後、平日に再びゆっくりと上昇します...