私たちはいくつかのSQLServer: Memory Manager
のメトリックを監視しており、DBCC CheckDB
ジョブの後、メトリックが
Database Cache Memory (KB)
大幅に低下します。正確には、140 GBのキャッシュDBメモリから60 GBに減少しました。その後、平日に再びゆっくりと上昇します。 (「Free Memory KB
」の量は、CheckDB
の直後に20 GBから100 GBになりました)
DBCC CheckDB
は毎週日曜日に実行されるため、データベースキャッシュメモリは毎週再び増加する必要があります
What is the behavior of this ? Why CheckDB pushes database pages out of memory ?
2番目の質問は、buffer cache hit ratio
の完了後に「DBCC CheckDB
」が変更されなかった理由です。
それは平均で99.99%でしたが、DBCC CheckDB
ジョブの後、それは〜98.00%に低下し、データベースデータを読み取る必要があるため、 "buffer cache hit ratio
"が大幅に低下すると予想していたのにかなり速く99%に戻りました。 RAMに再度保存しますか?
一部のSQLServer:Memory Managerのメトリックを監視しており、DBCC CheckDBジョブの後、メトリックが
データベースキャッシュメモリ(KB)が大幅に低下します。正確には、140 GBのキャッシュされたDBメモリから60 GBに減少しました
これは正しいです。この例のDBCC CHECKDB
コマンドが21h45
で完了すると、この動作がはっきりとわかります。
なぜ
この動作は、DBCC
コマンドによって作成されたdatabase snapshot
が削除され、メモリ内のオブジェクトがすべて削除されるためです。
データベースのスナップショットを作成し、一部のデータをメモリにロードして、そのスナップショットを削除することで、動作を再現できます
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;
スナップショットを削除する前のバッファサイズ
BufferSizeInMB
1061.70312 --before
スナップショットの削除
USE master
GO
DROP DATABASE MY_DATABASE_SNAPSHOT ;
スナップショットをドロップした後のBufferSize
BufferSizeInMB
824.179687 --after
2番目の質問は、DBCC CheckDBの完了後に「バッファキャッシュヒット率」が変化しなかった理由です。
これは、データがバッファキャッシュにロードされる速度に依存します。
バッファープールが長時間にわたって満杯になる場合は、平均してこの比率にとどまるはずです。
これはあなたの質問のこの部分に対応します:
... It(Buffer pool datasize)は、140 GBのキャッシュされたDBメモリから60 GBに低下しました。その後、平日に再びゆっくりと上昇します...