เหตุใดฉันจึงมี THREADPOOL รออยู่แม้ว่าฉันจะมีเธรดอยู่ก็ตาม
เรากำลังเห็นการหมดเวลาสมัครและด้วยความช่วยเหลือของ First Responder Kit ฉันได้บันทึกรายละเอียดแล้ว สิ่งหนึ่งที่ดึงดูดความสนใจของฉันคือ:
ตรวจพบการรอพิษ: เธรดพูล
ดังนั้นฉันจึงตอบคำถามด้านล่าง:
---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'
เมื่อฉันเรียกใช้แบบสอบถาม "thread pool wait" เธรดพูลรอจะปรากฏในผลลัพธ์ด้านบน (บางครั้งมากกว่า 20 ผลลัพธ์) เป็นเสี้ยววินาทีจากนั้นจะหายไปเมื่อฉันเรียกใช้อีกครั้ง แต่ฉันสามารถเห็นมากกว่า 400 เธรดที่มีอยู่ในผลลัพธ์ที่สองที่ตั้งค่าผ่านการสืบค้น "เธรดที่มีอยู่"
ฉันไม่เข้าใจว่าเหตุใดฉันจึงเห็นว่ากำลังTHREADPOOL
รอเมื่อฉันเรียกใช้แบบสอบถามแรก แต่แบบสอบถามที่สองแสดงว่ายังมีเธรดอยู่ ใครช่วยอธิบายหน่อยได้ไหม
- Maxdop: 8
- ระดับความขนานสูงสุด: 50
เธรดพูลรอ:
คำตอบ
ฉันไม่เข้าใจว่าทำไมฉันจึงเห็นว่า THREADPOOL รออยู่เมื่อฉันเรียกใช้แบบสอบถามแรก แต่แบบสอบถามที่สองแสดงว่ายังมีเธรดอยู่ ใครช่วยอธิบายหน่อยได้ไหม
ฉันสังเกตเห็นว่าคุณสามารถเห็นการTHREADPOOL
รอสั้น ๆ มากมาย(ไม่กี่วินาทีต่อวินาที) ในขณะที่ SQL Server กำลังรับเธรดจากระบบปฏิบัติการ
สิ่งนี้อาจเกิดขึ้นได้เช่นหาก SQL Server ไม่ได้ใช้งานชั่วขณะจากนั้นเคียวรีคู่ขนานหลายรายการจะถูกดำเนินการพร้อมกัน คำค้นหาเหล่านี้จะต้องรอในขณะที่ระบบปฏิบัติการจัดเตรียมเธรดให้กับกระบวนการ sqlservr.exe โดยTHREADPOOL
จะรอในช่วงเวลานั้น
คุณสามารถยืนยันได้โดยดูที่เคาน์เตอร์ "กระบวนการ" -> "จำนวนเธรด" PerfMon โดยทั่วไปเมื่อใดก็ตามที่ค่านี้เพิ่มขึ้นอย่างรวดเร็วคุณอาจเห็นสิ่งเหล่านี้THREADPOOL
รออยู่
มีการสาธิตพฤติกรรมนี้ทั้งหมดในบล็อกของฉัน ( Unusual THREADPOOL รอ ) นี่คือบทสรุป:
กลับไปที่ลิงก์เอกสารนั้น:
เกิดขึ้นเมื่องานกำลังรอให้ผู้ปฏิบัติงานทำงาน
ในกรณีทั่วไปนี่เป็นเพราะเราใช้งานถึงขีด จำกัด ทางตรรกะที่ SQL Server กำหนดไว้สำหรับจำนวนเธรดของผู้ปฏิบัติงานที่คุณสามารถมีได้ในแต่ละครั้ง
ในกรณีที่ผิดปกติงานกำลังรอผู้ปฏิบัติงานเนื่องจาก SQL Server กำลังจัดสรรเธรด (ร้องขอจากระบบปฏิบัติการ) ที่จำเป็นเพื่อสำรองผู้ปฏิบัติงานนั้น
เพื่อความชัดเจนฉันจะแปลกใจถ้าการรอเหล่านี้เป็นสาเหตุของการหมดเวลาการสมัครของคุณ