Saya mengalami beberapa masalah kinerja dengan sistem pemrosesan data yang sedang saya kerjakan. Saya telah mengumpulkan statistik tunggu dari peroid satu jam yang menunjukkan sejumlah besar acara menunggu CXPACKET dan LATCH_EX.
Sistem ini terdiri dari 3 pemrosesan SQL Server yang melakukan banyak perhitungan angka dan perhitungan dan kemudian memasukkan data ke server cluster pusat. Server pemrosesan dapat memiliki hingga 6 pekerjaan yang menjalankan masing-masing sekaligus. Statistik penantian ini untuk cluster pusat yang saya pikir menyebabkan bottlneck. Server pusat cluster memiliki 16 core dan 64GB RAM. MAXDOP diatur ke 0.
Saya kira CXPACKET berasal dari beberapa kueri paralel yang berjalan namun saya tidak yakin apa yang ditunjukkan oleh acara menunggu LATCH_EX. Dari apa yang saya baca ini bisa menunggu non-buffer?
Adakah yang bisa menyarankan apa yang menyebabkan statistik menunggu semacam ini dan tindakan apa yang harus saya ambil untuk menyelidiki akar penyebab masalah kinerja ini?
Hasil kueri teratas adalah statistik total tunggu dan hasil kueri bawah adalah statistik selama periode 1 jam
Jawaban:
CXPACKET dapat disertai dengan LATCH_XX (mungkin juga dengan PAGEIOLATCH_XX atau SOS_SCHEDULER_YIELD juga). Jika ini masalahnya (dan saya percaya itu, berdasarkan pertanyaan) maka nilai MAXDOP harus diturunkan agar sesuai dengan perangkat keras Anda.
Selain itu, berikut adalah beberapa langkah yang lebih direkomendasikan dalam mendiagnosis penyebab nilai statistik tunggu CXPACKET yang tinggi (sebelum mengubah sesuatu di SQL Server):
Jangan atur MAXDOP ke 1, karena ini bukan solusi
Selidiki kueri dan riwayat CXPACKET untuk memahami dan menentukan apakah itu adalah sesuatu yang terjadi hanya sekali atau dua kali, karena itu bisa menjadi pengecualian dalam sistem yang biasanya bekerja dengan benar
Periksa indeks dan statistik pada tabel yang digunakan oleh kueri dan pastikan mereka mutakhir
Periksa Ambang Biaya untuk Paralelisme (CTFP) dan pastikan bahwa nilai yang digunakan sesuai untuk sistem Anda
Periksa apakah CXPACKET disertai dengan LCK_M_XX (biasanya disertai dengan IO_COMPLETION dan ASYNC_IO_COMPLETION). Jika ini masalahnya, maka paralelisme bukanlah hambatannya. Pecahkan masalah statistik tunggu tersebut untuk menemukan akar penyebab masalah dan solusi
Jika Anda benar-benar perlu memahami jenis tunggu CXPACKET secara mendalam, saya akan menyarankan membaca Pemecahan masalah jenis menunggu CXPACKET dalam artikel SQL Server
sumber
Baca Diagnosis dan Menyelesaikan Latch Contention pada SQL Server , adalah makalah paling komprehensif tentang topik ini. Anda harus menggali
sys.dm_os_latch_stats
dan melihat jenis kait apa yang digunakan.Lihat apakah membaca Bagaimana menganalisis kinerja SQL Server membantu Anda dengan cara apa pun.
sumber
Selain membaca tautan yang disediakan di atas dan kemungkinan besar mengubah pengaturan "Derajat Paralelisme" Anda dari 0 menjadi sekitar 8, Anda perlu mempersempit pertanyaan mana yang paralel dan berapa biayanya.
Setelah melihat dampak dari perubahan ini, Anda juga dapat mempertimbangkan memodifikasi "Ambang Batas Biaya untuk Paralelisme" untuk menyempurnakan apa yang akan berjalan paralel.
Berikut adalah video hebat dari Brent Ozar yang akan membantu Anda: Menguasai Seni CXPACKET dan MAXDOP
Tujuan Anda adalah untuk <= 50% waktu tunggu untuk CXPACKET. Semoga berhasil!!
sumber