Saya memiliki server dengan 16 CPU yang dikonfigurasi dengan max degree of parallelism
8 dan max worker threads
pengaturan nol.
Selama satu jam tertentu, sinyal saya menunggu adalah 20% namun pemanfaatan CPU OS saya selama waktu itu tidak pernah melebihi 25%. Bisakah seseorang menjelaskan mengapa sinyal saya menunggu begitu tinggi?
Vendor saya memiliki sistem skoring terbaik di kelas yang mengharapkan kami menunggu sinyal 10% atau kurang, atau kami rusak. Bagaimana saya bisa memperbaiki ini (tanpa menambahkan CPU tambahan)?
- Kami tidak memiliki lebih dari 8 CPU per NUMA node, jadi Trace Flag 8048 tidak berlaku.
- Contoh menunggu terbesar adalah
CXPACKET
(70%), laluPREEMPTIVE_OS_PIPEOPS
(20%) cost threshold for parallelism
diatur ke 50. Haruskah saya menaikkannya? Untuk apa?- Ini adalah mesin fisik (bukan VM), yang didedikasikan untuk SQL Server.
- Saya menggunakan alat pemantauan untuk mengidentifikasi pertanyaan dan prosedur yang paling sering dijalankan. Apakah saya ingin melihat CPU tinggi, I / O tinggi, atau durasi tinggi? Biasanya aplikasi kami intensif I / O jadi saya menyetel I / O tinggi. Tetapi karena masalahnya menunggu sinyal, apakah saya perlu melihat CPU yang tinggi?
- Saya berharap untuk menghindari rekomendasi Max Vernon untuk menurunkan
MAXDOP
ke 4, karena aplikasi melakukan beberapa permintaan gaya gudang yang membutuhkan utas tambahan.
sql-server
performance
Chris Woods
sumber
sumber
Jawaban:
Jawaban komunitas Wiki dihasilkan dari komentar pada pertanyaan oleh Aaron .
Kecuali jika Anda mengalami masalah kinerja, persentase
CXPACKET
tunggu yang tinggi mungkin hanya merupakan indikator bahwa sebagian besar kueri berjalan paralel dan sebenarnya bukan masalah.CPU tinggi bisa menjadi indikator, tetapi dari apa yang telah Anda jelaskan saya akan mengatakan melihat pertanyaan dengan durasi lama tetapi CPU rendah untuk memulai. The
CXPACKET
menunggu kadang-kadang dikaitkan dengan query menunggu semua benang sampai akhir sebelum dapat menggabungkan hasil (data condong).Jika Anda dapat memodifikasi kueri dan prosedur, Anda bisa menetapkan lebih tinggi
MAXDOP
untuk tugas-tugas gudang yang membutuhkannya, dan mengatur globalMAXDOP
lebih rendah. Namun, saya hanya akan melakukan itu sebagai pilihan terakhir. Anda hanya benar-benar ingin membuat jenis-jenis petunjuk eksplisit ketika Anda telah kehabisan semua kemungkinan atau Anda tidak dapat membuat perubahan pada kode, kueri atau skema basis data.sumber