Hemos estado monitoreando algunos SQLServer: métricas del Administrador de memoria, y notamos que después del trabajo DBCC CheckDB, la métrica
La memoria caché de la base de datos (KB) cae significativamente. Para ser exactos, se redujo de 140 GB de memoria DB en caché a 60 GB
Esto es correcto, puede ver claramente este comportamiento cuando este DBCC CHECKDB
comando de ejemplo se completa en21h45
Por qué
Este comportamiento se debe al hecho database snapshot
de que el DBCC
comando se descarta y elimina todos sus objetos en la memoria.
Puede replicar el comportamiento creando una instantánea de una base de datos, cargando algunos datos en la memoria y luego soltando esa instantánea
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 antes de soltar la instantánea
BufferSizeInMB
1061.70312 --before
Soltando la instantánea
USE master
GO
DROP DATABASE MY_DATABASE_SNAPSHOT ;
BufferSize después de soltar la instantánea
BufferSizeInMB
824.179687 --after
La segunda pregunta es ¿por qué la "proporción de aciertos de la memoria caché del búfer" no cambió después de que se completa DBCC CheckDB?
Esto depende de qué tan rápido se carguen los datos en su caché de búfer.
Si su grupo de búferes se llena durante un tiempo más largo, debería equivaler a que esta proporción se mantenga más alta en promedio.
Esto corresponde con esta parte de su pregunta:
... ( Tamaño de datos del grupo de búferes ) se redujo de 140 GB de memoria DB en caché a 60 GB. y después de eso, aumenta lentamente de nuevo durante la semana ...