Tunggu sebentar, tunggu sebentar
Sementara aspek kinerja dan perizinan menarik, mereka bukan satu-satunya aspek dari beban kerja yang perlu dipertimbangkan.
Satu hal yang dapat berdampak pada pilihan prosesor adalah thread pekerja.
Utusan Pekerja?
Ya sobat! Itu adalah hal-hal yang SQL Server Anda akan gunakan untuk menjalankan kueri Anda dan melakukan semua hal-hal latar belakang yang perlu dilakukan untuk menjaga keadaan.
Saat Anda kehabisan utas pekerja, Anda menekan THREADPOOL menunggu
THREADPOOL?
THREADPOOL. Ini adalah salah satu dari menunggu paling buruk yang dapat Anda miliki di server Anda, bersama dengan RESOURCE_SEMAPHORE dan RESOURCE_SEMAPHORE_QUERY_COMPILE . Tapi itu adalah memori yang menunggu, dan ini adalah pertanyaan CPU.
Jadi kembali ke mengapa ini adalah kegigihan.
Ini adalah bagaimana SQL Server menghitung utas pekerja :
Perhatikan bagaimana menggandakan jumlah inti tidak menggandakan Max Worker Threads, dan Anda mendapatkan nomor yang sama dengan 1 inti seperti yang Anda lakukan dengan 4 core? Persamaannya adalah:512 + ((logical CPUs - 4) * 16)
Itu memalukan, karena ketika jumlah inti naik, kecepatan clock biasanya menukik ke satu atau dua generasi ke belakang.
Melihat garis chip Intel baru - baru ini akan menunjukkan tren yang sama.
Bagaimana saya tahu berapa banyak utas yang saya butuhkan?
Ini akan sangat tergantung pada:
- Jumlah Pengguna
- Jumlah kueri paralel
- Jumlah kueri seri
- Jumlah basis data dan sinkronisasi data (Mirroring, AGs, backup untuk Pengiriman Log)
- Jika Anda membiarkan MAXDOP dan CTFP pada pengaturan default
Jika Anda tidak kehabisan mereka hari ini, Anda mungkin baik-baik saja.
Tapi bagaimana kamu tahu kalau kamu?
Ada pertanyaan bagus, dan ada pertanyaan besar, dan saya akan memberi tahu Anda sesuatu, itu adalah PERTANYAAN BESAR .
THREADPOOL dapat bermanifestasi sebagai masalah koneksi , dan Anda mungkin melihat pesan di log kesalahan tentang tidak dapat menelurkan utas .
Anda juga dapat melihat statistik tunggu server Anda menggunakan alat gratis seperti sp_Blitz atau sp_BlitzFirst (pengungkapan penuh, saya berkontribusi pada proyek ini).
EXEC sp_Blitz
EXEC sp_BlitzFirst @SinceStartup = 1
Bisakah saya meningkatkan Thread Pekerja Max?
Meningkatkan MWT dapat menyebabkan peningkatan SOS_SCHEDULER_YIELD
menunggu.
Itu bukan akhir dari dunia, tetapi pikirkan itu seperti menambahkan sekelompok menjerit anak-anak ke kelas guru.
Tiba-tiba, akan lebih sulit bagi setiap anak untuk mendapatkan perhatian.
Ketika sebuah proses menghabiskan 4ms quantum-nya , akan ada lebih banyak thread di depannya yang menunggu untuk masuk ke CPU.
Kinerja mungkin terasa hampir sama.
Bagaimana saya bisa menggunakan Thread Pekerja lebih sedikit?
Anda kejam [kata benda] dari [kata benda], mereka adalah pekerja dengan keluarga yang harus didukung! Hipotek! Mimpi!
Tapi baiklah, harus menghormati intinya. Kamu bosnya.
Tempat termudah untuk memulai adalah mengubah pengaturan seperti MAXDOP dan Cost Threshold For Parallelism dari default.
Jika Anda memiliki pertanyaan tentang cara mengaturnya, silakan kunjungi di sini:
Setelah itu, pekerjaan Anda menjadi lebih sulit. Anda harus mencari tahu apa yang menggunakan semua utas itu. Anda kadang-kadang dapat melakukannya dengan melihat statistik menunggu Anda.
Lebih khusus lagi, jika Anda sudah menunggu tinggi pada paralelisme ( CXPACKET
) DAN menunggu tinggi pada kunci ( LCK_
), maka Anda mungkin berlari ke rantai pemblokiran panjang yang melibatkan pertanyaan paralel.
Anda tahu apa yang busuk? Sementara semua kueri paralel menunggu untuk mendapatkan kunci mereka, mereka tidak memberikan utas yang dialokasikan kembali.
Anda hampir dapat mendengar bahwa empat VM inti yang admin Anda yakini lebih dari cukup untuk setiap beban kerja yang terengah-engah, ya?
Sayangnya, jenis pencarian dan penyetelan indeks yang harus Anda lakukan untuk menyelesaikan hal-hal tersebut berada di luar cakupan pertanyaan.
Semoga ini membantu!