Kami sibuk memuat pengujian sistem OLTP yang kami kembangkan di .NET 4.0 dan menjalankan SQL Server 2008 R2 di belakang. Sistem ini menggunakan antrian SQL Server Broker Layanan, yang sangat performan, tetapi kami mengalami tren aneh saat memproses.
Permintaan proses SQL Server pada kecepatan terik selama 1 menit, diikuti oleh ~ 20 detik peningkatan aktivitas penulisan disk. Grafik berikut menggambarkan masalah.
Yellow = Transactions per second
Blue = Total CPU usage
Red = Sqlsrv Disk Write Bytes/s
Green = Sqlsrv Disk Read Bytes/s
Selama pemecahan masalah, kami mencoba yang berikut ini tanpa perubahan signifikan pada polanya:
- Berhenti SQL Server Agent.
- Membunuh hampir semua proses yang sedang berjalan lainnya (No A / V, SSMS, VS, Windows Explorer, dll.)
- Menghapus semua basis data lainnya.
- Nonaktifkan semua penghitung waktu percakapan (kami tidak menggunakan pemicu apa pun).
- Pindah jauh dari pendekatan antrian pesan ke desain pemantauan tabel sederhana / kasar.
- Digunakan beban berbeda dari ringan ke berat.
- Memperbaiki semua deadlock.
Tampaknya seolah-olah SQL Server mungkin membangun cache dan menulisnya ke disk pada interval waktu tertentu, tapi saya tidak dapat menemukan apa pun online untuk mendukung teori ini.
Selanjutnya, saya berencana untuk memindahkan solusi ke lingkungan pengujian khusus kami untuk melihat apakah saya dapat mereplikasi masalah. Bantuan apa pun untuk sementara akan sangat dihargai.
Pembaruan 1 Seperti yang diminta, dengan ini grafik yang mencakup Halaman / Sec Checkpoint , Page Life Expectancy , dan beberapa penghitung latensi disk.
Tampaknya seolah-olah Titik Pemeriksaan (garis biru muda) adalah penyebab berkurangnya kinerja (garis kuning) yang kami amati. ^
Latensi disk tetap relatif konsisten selama pemrosesan dan harapan masa pakai halaman tampaknya tidak memiliki efek yang terlihat. Kami juga menyesuaikan jumlah ram yang tersedia untuk SQL Server, yang juga tidak memiliki efek besar. Mengubah model pemulihan dari SIMPLE
menjadi FULL
juga membuat sedikit perbedaan.
Perbarui 2 Dengan mengubah "Interval Pemulihan" sebagai berikut, kami telah berhasil mengurangi interval di mana pos-pos pemeriksaan terjadi:
EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
EXEC sp_configure 'recovery interval', '30'
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options',0
GO
RECONFIGURE
Saya tidak yakin apakah ini praktik yang buruk?
FULL
atau BULK_LOGGED
, itu tetap berlaku seolah-olah itu masuk SIMPLE
sampai Anda mengambil cadangan penuh.