Beberapa bulan yang lalu, saya menghadapi situasi yang sama di mana pengaturan MAXDOP adalah default dan permintaan lari menghabiskan semua utas pekerja.
Seperti yang ditunjukkan Remus, ini disebut kelaparan pekerja .
Akan ada dump memori yang dibuat di server Anda ketika kondisi ini terjadi.
Jika Anda menggunakan 2008R2 + SP1 dan yang lebih tinggi maka sys.dm_server_memory_dumps
akan memberi Anda lokasi file dump juga.
Sekarang kembali ke masalah:
Ada 1 utas monitor penjadwal per simpul NUMA dan karena Anda memiliki 2 simpul NUMA akan ada 2 utas monitor penjadwal yang bertanggung jawab untuk pemeriksaan kesehatan semua penjadwal setiap 60 detik untuk simpul NUMA tertentu sambil memastikan bahwa penjadwal macet atau tidak.
Setiap kali permintaan kerja baru ditarik dari antrian pekerja penjadwal, penghitung proses kerja bertambah. Jadi, jika scheduler memiliki permintaan kerja yang antri dan belum memproses salah satu permintaan pekerjaan dalam 60 detik, scheduler dianggap macet.
Karena kueri run-away atau paralelisme yang luas, timbullah kondisi utas pekerja mulai habis karena semua utas ditempati oleh kueri pelarian tunggal atau pemblokiran berkepanjangan yang berlebihan dan tidak ada pekerjaan yang dapat dilakukan kecuali proses menyinggung itu terbunuh.
Taruhan terbaik Anda adalah menyetel terlebih dahulu pengaturan Max Degree of Parallelism Anda . Default 0
berarti SQL Server dapat menggunakan semua CPU yang tersedia untuk pemrosesan paralel dan di sana dengan melelahkan semua utas pekerja.
Ada banyak alasan yang dapat menyebabkan kelelahan pekerja:
- Rantai pemblokiran panjang yang luas menyebabkan SQL Server kehabisan utas pekerja
- Paralelisme yang luas juga menyebabkan kelelahan pada benang pekerja
- Penantian luas untuk semua jenis "kunci" - spinlocks, kait. Spinlock yatim adalah contohnya.
Lihat jawaban saya di sini yang akan menunjukkan kepada Anda bagaimana Anda bisa menghitung nilai MAXDOP untuk contoh server Anda.
Juga, sangat menyarankan Anda untuk mulai mengumpulkan informasi Tunggu statistik tentang contoh server database Anda.
max degree of parallelism
konfigurasi dan berapa banyak prosesor yang Anda miliki saat ini di server bersama dengan konfigurasi NUMA? Anda dapat menggunakancoreinfo.exe
dari Sysinternals untuk mengetahui jumlah prosesor dan konfigurasi NUMA.