Pemanfaatan CPU Rendah tetapi Sinyal Tinggi Menunggu

8

Saya memiliki server dengan 16 CPU yang dikonfigurasi dengan max degree of parallelism8 dan max worker threadspengaturan 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%), lalu PREEMPTIVE_OS_PIPEOPS(20%)
  • cost threshold for parallelismdiatur 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 MAXDOPke 4, karena aplikasi melakukan beberapa permintaan gaya gudang yang membutuhkan utas tambahan.
Chris Woods
sumber
Aaron terima kasih! Saya akan mencari pertanyaan dengan durasi tinggi dan CPU rendah.
Chris Woods

Jawaban:

2

Jawaban komunitas Wiki dihasilkan dari komentar pada pertanyaan oleh Aaron .

Kecuali jika Anda mengalami masalah kinerja, persentase CXPACKETtunggu 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 CXPACKETmenunggu 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 MAXDOPuntuk tugas-tugas gudang yang membutuhkannya, dan mengatur global MAXDOPlebih 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.

Paul White
sumber