Thông báo FlushCache xuất hiện trong nhật ký tại thời điểm cụ thể


22

Gần đây chúng tôi đã có rất nhiều vấn đề về hiệu suất cơ sở dữ liệu và tôi đã cố gắng xem liệu tôi có thể hiểu tại sao không. Chúng tôi không có DBA (Tôi là nhà phát triển phần mềm) vì vậy tôi chỉ là người ủng hộ nó, và phần lớn những gì tôi thấy trên mạng đọc giống như một ngôn ngữ nước ngoài đối với tôi.

Chúng tôi đã được khởi động lại SQL Server mỗi sáng vì đó là cách duy nhất nó hoạt động trong ngày làm việc. Tôi nhận thấy rằng mỗi sáng khoảng 5 giờ sáng, chúng tôi bắt đầu nhận được tin nhắn này cứ sau hai phút trong nhật ký:

FlushCache: dọn sạch 11848 bufs với 7432 ghi trong 97168 ms (tránh 8139 bufs bẩn mới) cho db 9: 0

mục tiêu cuối cùng nổi bật: 4, avgWriteLatency 32

thông lượng trung bình: 0,72 MB / giây, độ bão hòa I / O: 11635, chuyển đổi ngữ cảnh 18849

Các số khác nhau mỗi lần tất nhiên, nhưng đó là cùng một thông điệp lặp đi lặp lại trong mẫu đó cho đến khi tôi khởi động lại máy chủ. Tôi không chắc làm thế nào để diễn giải điều này, tôi đã cố gắng tìm hiểu về Google và tất cả những gì tôi đã thu thập được là điều đó có nghĩa là có thể có điều gì đó không ổn với I / O và điều gì đó mất nhiều thời gian hơn dự kiến. Gần đây chúng tôi đã chuyển sang sử dụng SSD nên tôi không nghĩ đó là vấn đề ghi.

Bất cứ ai có thể làm sáng tỏ về điều này?


Câu trả lời:


29

Thông báo FlushCache trong nhật ký lỗi được gây ra bởi ghi nhật ký điểm kiểm tra và trong trường hợp này là một điểm kiểm tra dài (được xác định là điểm kiểm tra mất nhiều thời gian hơn khoảng thời gian khôi phục). Cho dù đó là đăng nhập hay không, hành vi là khác nhau trong trước năm 2012 và 2012+. Trước SQL Server 2012, để ghi nhật ký điểm kiểm tra, bạn phải bật cờ theo dõi (T3504). Nhưng bắt đầu trong SQL Server 2012, thông báo đó được ghi theo mặc định khi gặp phải một điểm kiểm tra dài.

Bây giờ đối với câu hỏi "điều này thực sự xấu ?" , bạn thực sự cần phải bắt đầu nhìn vào những con số được đưa ra bối cảnh của họ. Bạn mất hơn 97 giây để xả chỉ khoảng 93 MB bộ đệm bẩn. Điều này có vẻ như có khả năng là một hỗn hợp của rất nhiều dữ liệu (trong chính điểm kiểm tra thực tế, bộ đệm trị giá khoảng 64 MB cũng bị bẩn) và có khả năng lưu trữ không theo kịp sự sửa đổi dữ liệu và / hoặc phần còn lại của khối lượng công việc I / O.

Những gì tôi sẽ làm là xác minh sức khỏe của hệ thống con lưu trữ của bạn , xem xét sự chờ đợi và chỉ cần có được một bức tranh hiệu suất tổng thể của ví dụ. Hãy xem các bộ đếm perfmon đĩa logic và xem tổng thể I / O là gì với thông lượng , độ trễIOps . Nó sẽ giúp bạn vẽ một bức tranh sống động hơn về cách các đĩa đang hoạt động. Nếu bạn có khả năng đo điểm chuẩn cho bộ nhớ của mình, nếu bạn chưa căn cứ vào nó, bạn sẽ thấy những khối lượng trong câu hỏi này có khả năng ( SQLIO là một tiện ích tuyệt vời cho điều đó) và những gì chúng đang làm ngay bây giờ (thật tuyệt khi có đường cơ sở chuẩn khi khối lượng được đứng lên để so sánh với điểm chuẩn hiện tại).

Đây là một bài viết tuyệt vời giải thích thông báo này - Cách thức hoạt động: Thông báo FlushCache được thêm vào Nhật ký lỗi máy chủ SQL khi nào?

EDIT : Đọc lại câu hỏi của bạn, tôi đã bỏ lỡ nhận xét này:

Tôi nhận thấy rằng mỗi sáng khoảng 5 giờ sáng, chúng tôi bắt đầu nhận được tin nhắn này

Xem những gì đang xảy ra trên bộ lưu trữ của bạn tại thời điểm này theo hướng dẫn ở trên. Nghe có vẻ như sách giáo khoa hoạt động theo lịch trình đang gây tổn hại cho bộ lưu trữ khiến hiệu suất của trạm kiểm soát bị ảnh hưởng và bị "kéo dài".


2
SQLIO đã được vượt qua bởi Diskspd.exe theo liên kết được cung cấp. Đây là liên kết đến Diskspd.exe: gallery.technet.microsoft.com/DiskSpd-a-robust-st
Tim Coker
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.