web-dev-qa-db-fra.com

La mémoire de cache de base de données dans le moniteur de performance diminue de manière significative après DBCC CheckdB

Nous avons surveillé certains métriques de SQLServer: Memory Manager Et ont remarqué qu'après le travail DBCC CheckDB

Database Cache Memory (KB)

tombe de manière significative. Si pour être exact, il est tombé de la mémoire DB mise en cache de 140 Go à 60 Go. Et après cela, descendez lentement pendant la semaine. (Montant de "Free Memory KB", Est passé de 20 à 100 Go juste après CheckDB)

DBCC CheckDB Est exécuté tous les dimanches, la mémoire de cache de base de données doit donc ramasser à nouveau chaque semaine

What is the behavior of this ? Why CheckDB pushes database pages out of memory ?

Deuxième question est pourquoi "buffer cache hit ratio" N'a pas changé après DBCC CheckDB Complète?

Il était 99,99% en moyenne et après DBCC CheckDB Job ~ ~ 98.00% et retourne à 99% assez vite tandis que je m'attendais à supprimer "buffer cache hit ratio" Pour supprimer de manière significative, car les données de base de données doivent être Lire du stockage à RAM= à nouveau?

8
Aleksey Vitsko

Nous surveillons certains SQLSERVER: les métriques de Memory Manager et ont remarqué qu'après le travail de DBCC CheckDB, métrique

La mémoire de cache de base de données (KB) tombe considérablement. Si être exact, il est tombé de la mémoire DB mises en cache de 140 Go à 60 Go.

Ceci est correct, vous pouvez clairement voir ce comportement lorsque cet exemple DBCC CHECKDB la commande se termine à 21h45

enter image description hereenter image description here


pourquoi

Ce comportement est dû au database snapshot Créé par la commande DBCC étant supprimée, en supprimant tous ses objets en mémoire.

Vous pouvez reproduire le comportement en créant un instantané d'une base de données, chargement de certaines données en mémoire, puis supprimant cet instantané

  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;

Tampersize avant de laisser tomber l'instantané

BufferSizeInMB
1061.70312  --before

Drapper l'instantané

USE master
GO
DROP DATABASE MY_DATABASE_SNAPSHOT ; 

Tampersize après avoir laissé tomber l'instantané

BufferSizeInMB
824.179687 --after

Deuxième question est la raison pour laquelle "le taux de frappe de cache tampon" n'a pas changé après la fin de DBCC CheckDB?

Cela dépend de la rapidité avec laquelle les données sont chargées dans votre cache tampon.

Si votre piscine tampon se remplit sur une plus longue période, cela devrait atteindre ce ratio rester plus élevé en moyenne.

Cela correspond à cette partie de votre question:

... IT ( Datasize de la piscine tampon) est tombé de la mémoire DB cache de 140 Go à 60 Go. Et après cela, lentement augmente à nouveau pendant la semaine ...

9
Randi Vertongen