Мы отслеживали некоторые показатели SQLServer: Memory Manager и заметили, что после задания DBCC CheckDB метрика
Кэш-память базы данных (КБ) значительно уменьшается. Если быть точным, то он упал с 140 ГБ кеш-памяти до 60 ГБ
Это правильно, вы можете ясно увидеть это поведение, когда эта 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 ГБ кэшированной памяти БД до 60 ГБ. и после этого медленно наращивать снова в течение недели ...