Pesan FlushCache muncul di log pada waktu tertentu

22

Kami telah mengalami banyak masalah kinerja database akhir-akhir ini, dan saya telah mencoba untuk melihat apakah saya bisa mencari tahu mengapa. Kami tidak memiliki DBA (saya adalah pengembang perangkat lunak), jadi saya agak memiringkannya, dan banyak dari apa yang saya temukan online terbaca seperti bahasa asing bagi saya.

Kami telah memulai ulang SQL Server setiap pagi karena itulah satu-satunya cara operasional selama hari kerja. Saya perhatikan bahwa setiap pagi sekitar jam 5 pagi kami mulai menerima pesan ini setiap dua menit di log:

FlushCache: membersihkan 11848 bufs dengan 7432 menulis dalam 97168 ms (dihindari 8139 bufs baru yang kotor) untuk db 9: 0

target terakhir beredar: 4, avgWriteLatency 32

throughput rata-rata: 0,72 MB / detik, kejenuhan I / O: 11635, sakelar konteks 18849

Angka-angka berbeda setiap kali tentu saja, tetapi itu adalah pesan yang sama berulang-ulang dalam pola itu sampai saya me-restart server. Saya tidak yakin bagaimana menafsirkan ini, saya sudah mencoba ke Google tentang hal itu dan semua yang saya kumpulkan adalah bahwa itu berarti ada sesuatu yang salah dengan I / O dan bahwa ada sesuatu yang lebih lama dari yang seharusnya. Kami baru-baru ini beralih menggunakan SSD jadi saya tidak berpikir itu harus menjadi masalah penulisan.

Adakah yang bisa menjelaskan hal ini?

eddie_cat
sumber
Mari kita lanjutkan diskusi ini dalam obrolan .
eddie_cat

Jawaban:

29

Pesan FlushCache di log kesalahan disebabkan oleh pencatatan pos pemeriksaan, dan dalam kasus ini oleh pos pemeriksaan panjang (yang didefinisikan sebagai pos pemeriksaan yang membutuhkan waktu lebih lama daripada interval pemulihan). Baik itu masuk atau tidak, perilaku ini berbeda di pra-2012 dan 2012+. Sebelum SQL Server 2012, untuk mendapatkan logging pos pemeriksaan Anda harus mengaktifkan tanda jejak (T3504). Tetapi mulai di SQL Server 2012 pesan itu dicatat secara default ketika sebuah pos pemeriksaan panjang ditemui.

Sekarang untuk pertanyaan "apakah ini benar-benar buruk ?" , Anda benar-benar harus mulai melihat angka-angka ini sesuai konteksnya. Anda memerlukan waktu 97+ detik untuk membersihkan hanya sekitar 93 MB buffer kotor. Sepertinya ini berpotensi campuran dari banyak data churn (selama pos pemeriksaan aktual itu sendiri, buffer sekitar 64 MB juga kotor) dan penyimpanan potensial yang tidak mengikuti modifikasi data dan / atau sisanya dari beban kerja I / O.

Apa yang akan saya lakukan adalah memverifikasi kesehatan subsistem penyimpanan Anda , lihat menunggu, dan hanya mendapatkan gambaran kinerja keseluruhan contoh. Lihatlah counter disk perfmon logis dan lihat apa keseluruhan I / O churn dengan throughput , latency , dan IOps . Ini akan membantu Anda melukis gambaran yang lebih jelas tentang kinerja disk. Jika Anda memiliki kemampuan untuk membandingkan penyimpanan Anda, jika Anda belum mendasarkannya , Anda harus melihat apa yang mampu dilakukan oleh volume-volume ini ( SQLIO adalah utilitas yang hebat untuk itu) dan apa yang sedang mereka lakukan sekarang (senang juga untuk memiliki patokan baseline ketika volume berdiri untuk membandingkan dengan patokan saat ini).

Berikut ini adalah artikel yang bagus menjelaskan pesan ini - Cara Kerja: Kapan pesan FlushCache ditambahkan ke SQL Server Error Log?

EDIT : Membaca kembali pertanyaan Anda, saya pasti melewatkan komentar ini:

Saya perhatikan bahwa setiap pagi sekitar jam 5 pagi kami mulai menerima pesan ini

Lihat apa yang terjadi pada penyimpanan Anda saat ini sesuai panduan di atas. Kedengarannya seperti operasi dijadwalkan buku teks yang mengambil korban di penyimpanan menyebabkan kinerja pos pemeriksaan menderita dan menjadi "panjang".

Thomas Stringer
sumber
2
SQLIO telah digantikan oleh Diskspd.exe sesuai dengan tautan yang diberikan. Berikut tautan ke Diskspd.exe: gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
Tim Coker