Baru-baru ini termasuk startup SQL Server Trace Flag 8048 untuk menyelesaikan masalah pertikaian spinlock serius dalam sistem SQL Server 2008 R2.
Tertarik untuk mendengar dari orang lain yang telah menemukan kasus penggunaan di mana nilai kinerja dikirimkan oleh jejak flag 8048 (mempromosikan strategi hibah memori permintaan dari node per-NUMA ke per-core), jejak flag 8015 (SQL Server mengabaikan NUMA fisik), atau SUMA ( interleaved akses memori yang cukup seragam, opsi BIOS pada beberapa mesin NUMA).
Trace flag 8015 http://blogs.msdn.com/b/psssql/archive/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory -nodes.aspx
Detail berdarah tentang beban kerja sistem, metrik yang dikumpulkan dari sistem yang bermasalah, dan metrik yang dikumpulkan dari sistem setelah intervensi diikuti.
Bendera jejak 8048 adalah 'perbaikan', tetapi apakah itu perbaikan terbaik? Apakah SQL Server mengabaikan NUMA fisik karena jejak flag 8015 telah melakukan hal yang sama? Bagaimana dengan mengatur BIOS untuk menyisipkan memori, meninggalkan server dengan perilaku SUMA yang meniru SMP alih-alih perilaku NUMA?
Perdamaian! tw: @sql_handle
Tentang sistem: - 4 hex core Xeon E7540 @ 2.00GHz, hyperthreaded - 128 GB RAM - WS2008R2 - MSSQL 2008 R2 SP2 - maxdop 6
Tentang beban kerja: - 1000s dari laporan terjadwal / antrian Batch didorong dari 2 server aplikasi laporan. - 3 varian rasa: harian, mingguan, bulanan - Semua koneksi server aplikasi laporan ke SQL Server dibuat sebagai akun layanan tunggal - Konkurensi laporan maksimum = 90
Temuan utama pada sistem yang bermasalah: - Dari Perfmon, interval 15 detik - - Sistem tetap sibuk pada 95% -100% CPU - - Halaman penyangga SQL Server pencarian <10.000 per / detik
- Dari DMV tunggu dan putar, interval 5 menit
- Pelayan CMEMTHREAD tinggi dan waktu tunggu
- SOS_SUSPEND_QUEUE tinggi berputar dan mundur
Postingan Blog Engineer Bob Dorr di flag flag 8048 menunjukkan bahwa sistem dengan lebih dari 8 core per NUMA node dapat mengalami gejala yang sama karena hambatan dalam permintaan memory grant. Bendera jejak 8048 akan mengubah strategi untuk per-inti, bukan per-NUMA node.
Intervensi
MSSQL telah dimulai kembali dengan -T8048 di tempatnya. Perbedaannya langsung terlihat: tingkat pencarian halaman buffer naik lebih dari 1 juta dan melonjak menjadi 8 juta per detik. Beban kerja batch bermasalah, yang sebelumnya tidak dapat diselesaikan dalam 24 jam, selesai dalam waktu kurang dari 4 jam. Beban kerja batch lain yang bukan fokus investigasi atau intervensi diajukan sebagai bagian dari memvalidasi nilai korektif bendera penelusuran 8048 (dan memastikan bahwa efek sampingnya yang tidak diinginkan minimal). Kumpulan laporan ini sebelumnya selesai dalam 2 jam; dengan tanda bendera 8048 di tempat kumpulan laporan selesai dalam sekitar 20 menit.
ETL Nightly juga menemui manfaat. Waktu ETL turun dari sekitar 60 menit menjadi 40 menit.
Menyatukan informasi dari beberapa tempat, saya berspekulasi bahwa tingginya tingkat antrian laporan, jumlah laporan bersamaan lebih besar daripada jumlah utas perangkat keras, dan akun pengguna tunggal untuk semua laporan digabungkan untuk memberikan tekanan pada satu NUMA node sampai tekanan utas pekerja menyebabkannya tidak disukai untuk permintaan koneksi masuk berikutnya untuk akun pengguna yang sama, pada titik mana NUMA node berikutnya akan mendapatkan sejumlah koneksi dekat secara instan. Setiap NUMA node akan berakhir dengan probabilitas tinggi menekankan kemacetan hibah memori permintaan.
Membuka lebih banyak jalur untuk permintaan memori permintaan menghilangkan hambatan. Tapi, saya tidak yakin biayanya. Posting CSS Bob Dorr memperjelas bahwa ada overhead memori tambahan dengan jejak flag 8048. Apakah overhead itu dalam wilayah pengalokasi satu halaman yang diatur oleh memori server maks MSSQL 2008 R2? Jika demikian, saya kira sistem hanya akan memiliki beberapa halaman basis data dalam cache pool buffer. Jika tidak, haruskah memori server maks diturunkan untuk mengakomodasi?