Bộ nhớ cache cơ sở dữ liệu trong Trình theo dõi hiệu suất giảm đáng kể sau khi DBCC CheckDB


8

Chúng tôi đã theo dõi số SQLServer: Memory Managerliệu của một số người và nhận thấy rằng sau khi DBCC CheckDBlàm việc, số liệu

Database Cache Memory (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. Và sau đó, từ từ tăng trở lại trong tuần. (Số lượng " Free Memory KB", đã tăng từ 20 đến 100 GB ngay sau đó CheckDB)

DBCC CheckDB được chạy vào mỗi Chủ nhật, do đó, Bộ nhớ cache của Cơ sở dữ liệu phải tăng tốc trở lại mỗi tuần

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

Câu hỏi thứ hai là tại sao " buffer cache hit ratio" không thay đổi sau khi DBCC CheckDBhoàn thành?

Trung bình là 99,99% và sau khi DBCC CheckDBcông việc giảm xuống ~ 98,00% và trở lại 99% khá nhanh trong khi tôi dự đoán " buffer cache hit ratio" sẽ giảm đáng kể vì dữ liệu cơ sở dữ liệu phải được đọc lại từ bộ nhớ sang RAM?


Về BCHR, lý do tại sao nó không giảm thêm nữa có thể là do mã CHECKDB có thể được thực hiện bằng cách sử dụng đọc trước (RA) và I / O được thực hiện bởi RA không được bao gồm khi tính BCHR. Điều đó lần lượt làm cho BCHR trở thành một bộ đếm hoàn hảo khá vô dụng.
Tibor Karaszi

Câu trả lời:


9

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 CHECKDBlệnh ví dụ này hoàn thành tại21h45

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


Tại sao

Hành vi này là do lệnh được database snapshottạo bởi DBCClệ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 ...


cảm ơn bạn Randi! khi chúng ta nói về Ảnh chụp cơ sở dữ liệu nội bộ do DBCC CheckDB thực hiện, liệu nó có tạo ra nó trong bộ nhớ không? hoặc tại đĩa? hoặc cả hai
Aleksey Vitsko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.