我们一直在监视一些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
第二个问题是,为什么DBCC CheckDB完成后“缓冲区高速缓存命中率”没有变化?
这取决于将数据加载回缓冲区高速缓存的速度。
如果您的缓冲池充满了更长的时间,则该比率应保持平均水平更高。
这与您问题的这一部分相对应:
...(缓冲池数据大小)从140 GB缓存的DB内存降至60 GB。之后,在一周中慢慢增加速度...