มันอาจเป็นประโยชน์ในการทำงานผ่านตัวอย่าง พิจารณาสามรัฐที่พบมากที่สุดสำหรับคนงาน :
RUNNING = ผู้ปฏิบัติงานกำลังทำงานอย่างไม่ถูกต้อง
RUNNABLE = ผู้ปฏิบัติงานพร้อมที่จะทำงานบนตัวกำหนดตารางเวลา
SUSPENDED = ผู้ปฏิบัติงานถูกระงับในขณะนี้รอเหตุการณ์ที่จะส่งสัญญาณ
คนงานที่มีสถานะRUNNING
สามารถสร้างเวลารอได้ ตัวอย่างเช่นหากผู้ปฏิบัติงานจำเป็นต้องเรียกใช้รหัสในระบบปฏิบัติการแทนที่จะเป็นใน SQLOS มันอาจเข้าสู่การรอก่อนหรือภายนอก ในช่วงเวลานั้นมันจะเรียกใช้รหัสบน CPU ที่เกี่ยวข้อง แต่มันจะยังคงสร้างเวลารอ
คนงานที่มีสถานะRUNNABLE
สามารถสร้างเวลารอ (เท่าที่ฉันรู้ว่าพวกเขาทำเสมอ) หากผู้ปฏิบัติงานส่งสัญญาณว่าทรัพยากรพร้อมใช้งานก็อาจสะสมเวลารอสัญญาณตามการรอครั้งล่าสุด หากผู้ปฏิบัติงานใช้ควอนตัม 4 มิลลิวินาทีก่อนหน้าของมันแล้วมันอาจสะสมSOS_SCHEDULER_YIELD
เวลารอ
คนงานที่มีสถานะSUSPENDED
สามารถสร้างเวลารอได้ พิจารณาคนงานที่กำลังรอการล็อค มันจะสร้างเวลารอจนกว่าจะมีการส่งสัญญาณว่าทรัพยากรล็อคที่จำเป็นต้องมีอยู่ คนงานที่ถูกระงับบางคนไม่ได้สร้างเวลารอคอยรวมถึงผู้ที่ไม่เกี่ยวข้องกับงาน
สก์ท็อปของฉันมีสี่แกนตรรกะเพื่อให้เริ่มต้นนับคนงานสูงสุดคือ512 มันเกือบจะเป็นไปไม่ได้จริง ๆ แต่ในเครื่องนี้ฉันสามารถสร้างเวลารอ 512 วินาทีต่อวินาทีในทางทฤษฎีถ้าฉันจัดการให้คนงานทุกคนรออะไรซักอย่างในเวลาเดียวกัน ในขณะที่จำนวนคอร์ / ผู้ทำงานเพิ่มจำนวนนั้นจะสูงขึ้น
คุณสามารถรอได้มากกว่าหนึ่งวินาทีต่อวินาทีแม้ว่าคุณจะไม่ได้เรียกใช้คิวรีกับ SQL Server ก็ตาม บนเครื่องของฉันแบบสอบถามต่อไปนี้ดูเหมือนจะสร้างระหว่าง 9-14 แถว:
SELECT [state], last_wait_type, wait_started_ms_ticks
FROM sys.dm_os_workers
WHERE [state] IN ('SUSPENDED', 'RUNNABLE')
AND task_address IS NOT NULL
AND wait_started_ms_ticks <> 0
AND wait_started_ms_ticks >= start_quantum;
ฉันสามารถถ่ายภาพรวมของเวลารอทั้งหมดตั้งแต่ฉันรีสตาร์ทเซิร์ฟเวอร์ครั้งล่าสุดและเปรียบเทียบกับผลรวมใหม่หลังจากรอสิบวินาที:
DECLARE @start_wait_time_ms BIGINT;
SELECT @start_wait_time_ms = SUM(wait_time_ms)
FROM sys.dm_os_wait_stats
WHERE wait_type <> 'WAITFOR';
WAITFOR DELAY '00:00:10';
SELECT SUM(wait_time_ms) - @start_wait_time_ms
FROM sys.dm_os_wait_stats
WHERE wait_type <> 'WAITFOR';
บางครั้งคณิตศาสตร์ก็ใช้งานได้ ครั้งสุดท้ายที่ฉันวิ่งเดลต้าคือ 101339 มิลลิวินาที กล่าวอีกนัยหนึ่งฉันรอมากกว่า 10 วินาทีต่อวินาทีเพียงจากงานระบบ