Kami baru-baru ini mengalami masalah pada lingkungan HADR SQL Server 2014 kami, di mana salah satu server kehabisan utas pekerja.
Kami mendapat pesan:
Kumpulan utas untuk Grup Ketersediaan AlwaysOn tidak dapat memulai utas pekerja baru karena tidak ada utas pekerja yang tersedia.
Saya sudah membuka pertanyaan lain, untuk mendapatkan pernyataan yang (saya pikir) harus membantu saya menganalisis masalah ( Apakah mungkin untuk melihat SPID mana yang menggunakan scheduler (thread pekerja)? ). Meskipun sekarang saya memiliki permintaan untuk menemukan utas yang menggunakan sistem, saya tidak mengerti mengapa server kehabisan utas pekerja.
Lingkungan kita adalah sebagai berikut:
- 4 Windows Server 2012 R2
- SQL Server 2014 Enterprise
- 24 Prosesor -> 832 utas Pekerja
- Ram 256 GB
- 12 Grup Ketersediaan (keseluruhan)
- 642 Database (keseluruhan)
Jadi, server yang mengalami masalah memiliki konfigurasi berikut:
- 5 Grup Ketersediaan (3 Primer / 2 Sekunder)
- 325 Database (127 Primer / 198 Sekunder)
MAXDOP = 8
Cost Threshold for Parallelism = 50
- Paket daya diatur ke "Performa tinggi"
Untuk "menyelesaikan" masalah, kami gagal secara manual satu Kelompok Ketersediaan ke server sekunder. Konfigurasi server itu sekarang:
- 5 Grup Ketersediaan (2 Primer / 3 Sekunder)
- 325 Database (77 Primer / 248 Sekunder)
Saya memantau utas yang tersedia dengan pernyataan ini:
declare @max int
select @max = max_workers_count from sys.dm_os_sys_info
select
@max as 'TotalThreads',
sum(active_Workers_count) as 'CurrentThreads',
@max - sum(active_Workers_count) as 'AvailableThreads',
sum(runnable_tasks_count) as 'WorkersWaitingForCpu',
sum(work_queue_count) as 'RequestWaitingForThreads' ,
sum(current_workers_count) as 'AssociatedWorkers'
from
sys.dm_os_Schedulers where status='VISIBLE ONLINE'
Biasanya server memiliki sekitar 250 - 430 utas pekerja tersedia, tetapi ketika masalah dimulai tidak ada pekerja yang tersisa.
Hari ini, entah dari mana, pekerja yang tersedia turun dari 327 menjadi 50, tetapi hanya sebentar dan kemudian naik kembali menjadi sekitar 400.
Saya sudah melihat pertanyaan lain ( HADR penggunaan pekerja yang tinggi ) tetapi tidak membantu saya.
Sistem kami berjalan stabil selama lebih dari setahun tanpa masalah. Kami belum memiliki failover atau perubahan besar lainnya dalam distribusi database.
Kami menggunakan "Sinkron komit" antara replika. Dari pemahaman saya tidak ada kompresi yang terlibat, lihat kompresi Tune untuk grup ketersediaan dalam dokumentasi.
Apakah ada yang tahu apa yang menggunakan semua utas pekerja?
EDIT: Temukan halaman ini di mana ada banyak informasi tentang masalah-masalah itu dengan tepat http://www.techdevops.com/Article.aspx?CID=24