Kami telah memantau beberapa SQLServer: metrik Memory Manager, dan memperhatikan bahwa setelah pekerjaan DBCC CheckDB, metrik
Database Cache Memory (KB) turun secara signifikan. Jika lebih tepatnya, itu turun dari 140 GB memori DB cache ke 60 GB
Ini benar, Anda dapat dengan jelas melihat perilaku ini ketika DBCC CHECKDB
perintah contoh ini selesai di21h45
Mengapa
Perilaku ini disebabkan database snapshot
oleh DBCC
perintah yang dibuat, yang menghapus semua objek di memori.
Anda dapat mereplikasi perilaku dengan membuat snapshot dari database, memuat beberapa data dalam memori, dan kemudian menjatuhkan snapshot itu
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 sebelum menjatuhkan snapshot
BufferSizeInMB
1061.70312 --before
Menjatuhkan foto itu
USE master
GO
DROP DATABASE MY_DATABASE_SNAPSHOT ;
BufferSize setelah menjatuhkan snapshot
BufferSizeInMB
824.179687 --after
Pertanyaan kedua adalah mengapa "rasio hit cache cache" tidak berubah setelah DBCC CheckDB selesai?
Ini tergantung pada seberapa cepat data dimuat kembali dalam cache buffer Anda.
Jika kolam penyangga Anda terisi lebih lama, rasio ini seharusnya setara dengan rata-rata yang lebih tinggi.
Ini sesuai dengan bagian dari pertanyaan Anda:
... Ini ( Buffer pool datasize ) turun dari 140 GB memori DB cache ke 60 GB. dan setelah itu, perlahan-lahan tingkatkan lagi selama seminggu ...