Chúng tôi đã theo dõi một số số liệu của SQLServer: Memory Manager và nhận thấy rằng sau công việc DBCC CheckDB, số liệu
Bộ nhớ cache cơ sở dữ liệu (KB) giảm đáng kể. Nếu chính xác, nó đã giảm từ bộ nhớ DB được lưu trong bộ nhớ cache 140 GB xuống còn 60 GB
Điều này là chính xác, bạn có thể thấy rõ hành vi này khi DBCC CHECKDB
lệnh ví dụ này hoàn thành tại21h45
Tại sao
Hành vi này là do lệnh được database snapshot
tạo bởi DBCC
lệnh bị loại bỏ, loại bỏ tất cả các đối tượng của nó trong bộ nhớ.
Bạn có thể sao chép hành vi bằng cách tạo ảnh chụp nhanh của cơ sở dữ liệu, tải một số dữ liệu trong bộ nhớ và sau đó thả ảnh chụp nhanh đó
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 trước khi thả ảnh chụp nhanh
BufferSizeInMB
1061.70312 --before
Thả ảnh chụp nhanh
USE master
GO
DROP DATABASE MY_DATABASE_SNAPSHOT ;
BufferSize sau khi thả ảnh chụp nhanh
BufferSizeInMB
824.179687 --after
Câu hỏi thứ hai là tại sao "tỷ lệ nhấn bộ đệm bộ đệm" không thay đổi sau khi DBCC CheckDB hoàn thành?
Điều này phụ thuộc vào tốc độ dữ liệu được tải trở lại trong bộ đệm bộ đệm của bạn.
Nếu vùng đệm của bạn lấp đầy trong một thời gian dài hơn, thì tỷ lệ này sẽ ở mức trung bình cao hơn.
Điều này tương ứng với phần câu hỏi này của bạn:
... Nó (dữ liệu nhóm bộ đệm ) giảm từ bộ nhớ DB được lưu trong bộ nhớ cache 140 GB xuống còn 60 GB. và sau đó, từ từ tăng trở lại trong tuần ...