การแจ้งเตือนเกี่ยวกับการสอบถามที่ยาวนานหรือการหยุดชะงักใน SQL Server 2008 R2


15

ฉันต้องการทราบว่ามีวิธีส่งการแจ้งเตือนเรื่องการหยุดชะงักหรือไม่ ถ้าเป็นเช่นนั้นจะต้องมีแบบสอบถามใด ฉันเข้าใจว่า SQL Server ดูแลการหยุดชะงักฉันเพียงต้องการข้อมูลเกี่ยวกับแบบสอบถามที่เกี่ยวข้อง

ฉันพบสิ่งต่อไปนี้เพื่อกำหนดแบบสอบถามที่ใช้เวลานาน:

SELECT 
    creation_time
    ,last_execution_time
    ,total_physical_reads
    ,total_logical_reads
    ,total_logical_writes
    , execution_count
    , total_worker_time
    , total_elapsed_time
    , total_elapsed_time / execution_count avg_elapsed_time
    ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
        WHEN -1 THEN DATALENGTH(st.text)
        ELSE qs.statement_end_offset END
    - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st  
where total_elapsed_time >= 300000000 --5 min
ORDER BY total_elapsed_time / execution_count DESC; 

ฉันต้องการทราบว่าข้างต้นเป็นวิธีที่ถูกต้องหรือไม่หรือมีวิธีที่ดีกว่าในการพิจารณาว่าแบบสอบถามใดใช้เวลานานกว่าช่วงเวลาที่ระบุว่า 5 นาทีตามที่แสดงหรือไม่

ขอบคุณ

คำตอบ:


8

ด้วย SQL 2008 จะมีคุณสมบัติใหม่ที่คุณสามารถใช้สำหรับ deadlocks และคิวที่รันนาน: เหตุการณ์เพิ่มเติม เหตุการณ์ที่ขยายเป็นวัตถุระดับต่ำและใช้ทรัพยากรน้อยกว่าวิธีอื่นเช่นการทำโปรไฟล์ / การติดตามการแจ้งเตือน ฯลฯ ...

สำหรับการใช้อีเวนต์แบบขยายพร้อมกับdeadlocksตรวจสอบการโพสต์นี้โดย Jonathan Kehayias , MVP เซิร์ฟเวอร์ SQL

สำหรับการใช้เหตุการณ์เพิ่มเติมเพื่อค้นหาlong running queriesลองดูโพสต์โดยละเอียดนี้โดย Pinal Daveซึ่งเป็นเซิร์ฟเวอร์ SQL MVP ตัวอื่น


10

คุณสามารถกำหนดค่าการแจ้งเตือนสำหรับทั้งสองสิ่งด้วย SQL Agent สร้างการแจ้งเตือนใหม่และเลือกประเภท "การแจ้งเตือนสภาพประสิทธิภาพของเซิร์ฟเวอร์ SQL"

สำหรับเคียวรีที่รันนานเลือกอ็อบเจ็กต์ "MSSQL $ InstanceName: ธุรกรรม" และตัวนับ: เวลารันธุรกรรมที่ยาวที่สุด กำหนดค่าและตัวเลือกการแจ้งเตือนและคุณก็พร้อมใช้งาน

สำหรับ deadlocks วัตถุคือ "MSSQL $ InstanceName: Locks" และตัวนับคือ "Number of Deadlocks / sec"

หากคุณต้องการการควบคุมการแจ้งเตือนการหยุดชะงักอย่างละเอียดยิ่งขึ้นโปรดตรวจสอบที่นี่: http://www.sqlservercentral.com/articles/Administrator/3243/


ฉันพยายามตั้งค่าการแจ้งเตือนตามที่คุณแนะนำ แต่งานจะทำงานก็ต่อเมื่อฉันได้กำหนดขั้นตอนไว้แล้ว มีวิธีการตั้งค่าการแจ้งเตือนโดยไม่กำหนดขั้นตอนงานหรือไม่?
Hasanain

4

ฉันชอบคำแนะนำ @StanleyJohns หากคุณมี SQL2008 เหตุการณ์ที่เพิ่มขึ้นนั้นคุ้มค่าที่จะทำความคุ้นเคยกับการใช้เป็นเครื่องมือในการวินิจฉัยและชุดAn XEvent a Dayของ Jonathon นั้นเป็นจุดเริ่มต้นที่ยอดเยี่ยม

อีกทางเลือกหนึ่งสำหรับ deadlocks คือการเปิดใช้งานค่าสถานะการติดตาม 1204 และ 1222ซึ่งถ่ายโอนข้อมูล deadlock ไปยังบันทึกข้อผิดพลาด SQL เปิดใช้งานทั้งคู่ดังนั้นคุณจะได้รับข้อมูลในรูปแบบที่แตกต่างกันสองรูปแบบซึ่งจะทำให้ง่ายขึ้นในการทำความเข้าใจกับการหยุดชะงักที่ซับซ้อน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.