Siapa yang menggunakan utas pekerja saya? SQL Server 2014 - HADR


10

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.

Pesan kesalahan saat dimulai

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.

-119 utas yang tersedia

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

Jawaban:


1

Jawaban wiki komunitas :

Anda memiliki sejumlah besar basis data dalam grup ketersediaan, itu akan menjadi tujuan utas Anda. Ada banyak yang terlibat dalam kompresi, enkripsi, dan biaya transportasi. Coba nonaktifkan kompresi, ini akan mengurangi penggunaan utas Anda sekitar sepertiga (tergantung pada jumlah replika).

Pertanyaan ini ditandai dengan SQL Server 2014, yang secara default akan menggunakan kompresi. SQL Server 2016, secara default, tidak akan menggunakan kompresi untuk sinkronisasi.

Anda mungkin perlu menambah utas pekerja saat ini, atau lebih baik: menyeimbangkan yang paling aktif dan yang tidak aktif di beberapa server. Lihat kueri terkait Q & A AlwaysON Ketersediaan sangat lambat .

Anda juga mungkin menemukan itu adalah aplikasi yang tidak dapat menutup permintaan dengan benar. Hal ini dapat mengakibatkan banyak sesi tidur berbaring (yang memakan pekerja).

Jumlah utas yang sebenarnya digunakan tergantung pada seberapa aktif basis data. Anda dapat memiliki 1.000 basis data dan, jika sebagian besar hanya menganggur 95% dari waktu, Anda tidak akan memiliki masalah. Tampaknya database Anda menjadi lebih sering aktif dan memakan lebih banyak utas Anda. Itu panjang dan pendeknya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.