CXPACKET dan LATCH_EX tinggi menunggu

13

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 Sampel SQL Tunggu

gagap
sumber
4
Pernahkah Anda melihat blog Paul Randal di Latch? sqlskills.com/blogs/paul/... Ada sedikit informasi berguna dalam menentukan apa yang dimaksud dengan Tunggu Tunggu dengan memilih dari sys.dm_os_latch_stats
Mark Sinkinson
CXPacket adalah saat utas utama kueri menunggu utas paralel untuk kembali. Untuk penjelasan yang baik dan beberapa cara untuk mengurangi lihat entri blog Brent Ozar pada subjek brentozar.com/archive/2013/08/...
RubberChickenLeader

Jawaban:

8

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

Gustav
sumber
3

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!!

drumatix
sumber