Konularım mevcut olmasına rağmen neden THREADPOOL beklemem var?
Başvuru zaman aşımlarını görüyoruz ve İlk Müdahale Kiti'nin yardımıyla ayrıntıları yakaladım. Dikkatimi çeken şeylerden biri şuydu:
Zehir bekleme algılandı: İş Parçacığı Havuzu
Bu yüzden aşağıdaki sorguları çalıştırdım:
---get thread pool waits---thread pool wait query
SELECT count(*) FROM sys.dm_os_waiting_tasks
where wait_type ='threadpool'
-- get threads available--Threads available query
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',
Getdate() as 'DateLogged'
from
sys.dm_os_Schedulers where status='VISIBLE ONLINE'
"İş parçacığı havuzu bekle" sorgusunu çalıştırdığımda, iş parçacığı havuzu beklemeleri yukarıdaki sonuçta (bazen, 20'den fazla sonuç) saniyenin kesri olarak görünüyor ve sonra tekrar çalıştırdığımda kayboluyor. Ancak "iş parçacığı mevcut" sorgusu aracılığıyla ikinci sonuç kümesinde 400'den fazla iş parçacığı görebiliyordum.
THREADPOOL
İlk sorguyu çalıştırdığımda neden beklemeler gördüğümü anlayamıyorum , ancak ikinci sorgu iş parçacıklarının hala kullanılabilir olduğunu gösteriyor. Herhangi biri açıklayabilir mi?
- Maxdop: 8
- Maksimum paralellik derecesi: 50
İş parçacığı havuzu bekler:
Yanıtlar
İlk sorguyu çalıştırdığımda THREADPOOL'un neden beklediğini görüyorum anlayamıyorum, ancak ikinci sorgu iş parçacıklarının hala kullanılabilir olduğunu gösteriyor. Herhangi biri açıklayabilir mi?
THREADPOOL
SQL Server işletim sisteminden iş parçacıkları alırken çok sayıda gerçekten kısa bekleme süresi (her biri bir avuç milisaniye) görebildiğinizi gözlemledim .
Bu, örneğin, SQL Server bir süre boşta kaldığında ve ardından aynı anda birkaç paralel sorgu yürütüldüğünde meydana gelebilir. İşletim sistemi sqlservr.exe işlemine iş parçacığı sağlarken bu sorguların beklemesi gerekecek ve THREADPOOL
bu süre boyunca beklemeler birikecektir .
"İşlem" -> "İş Parçacığı Sayısı" PerfMon sayacını izleyerek bunun olduğunu doğrulayabilirsiniz. Genelde bu değer ne zaman hızla yükselirse bu THREADPOOL
bekleyişleri görebilirsiniz .
Blogumda bu davranışın tam bir demosu var ( Olağandışı THREADPOOL Bekler ), işte özet:
Bu dokümanlar bağlantısına geri dönersek:
Bir görev, çalışanın çalışmasını beklediğinde oluşur.
Tipik durumda, bunun nedeni, bir seferde kaç tane çalışan iş parçacığına sahip olabileceğinize ilişkin SQL Server'ın belirlediği mantıksal sınıra ulaşmış olmamızdır.
Olağandışı bir durumda, görev bir çalışanı beklemektedir çünkü SQL Server o çalışanı desteklemek için gerekli olan iş parçacığı ayırmaktadır (işletim sisteminden talep etmektedir).
Açık olmak gerekirse, bu bekleme süreleri başvurunuzun zaman aşımına uğramasının nedeni olsaydı şaşırırdım.