ค้นหาแบบสอบถามทั้งหมดที่ดำเนินการเมื่อเร็ว ๆ นี้ในฐานข้อมูล


21

[ฉันเป็นโปรแกรมเมอร์ T-SQL ระดับเริ่มต้น]
[.. และหวังว่าฉันจะอยู่ในไซต์แลกเปลี่ยนสแต็คที่เหมาะสม]

ฉันต้องการรับรายการคำถามทั้งหมดที่ฉันดำเนินการ (อย่างน้อยที่สุดคำถามที่ฉันดำเนินการตั้งแต่เช้า) ฉันต้องการรายงานเกี่ยวกับเวลาดำเนินการของแบบสอบถาม

การค้นหาออนไลน์ไม่ได้ให้ข้อมูลที่มีประโยชน์กับฉันมากนัก ข้อความค้นหาเดียวที่ฉันพบทางออนไลน์ซึ่งดูเหมือนว่าใกล้เคียงกันมาก

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

ข้อความค้นหานี้ส่งกลับผลลัพธ์แปลก ๆ (ส่วนใหญ่เป็นกลุ่มของ sprocs) ยิ่งกว่านั้นผลลัพธ์ทั้งหมดเหล่านี้แสดงข้อความค้นหาที่ดำเนินการตั้งแต่บ่ายวันนี้ (ฉันต้องการข้อความค้นหาตั้งแต่เช้า)

ฉันไม่พบสิ่งใดในคำถามก่อนหน้า (หากคำถามที่คล้ายกันได้ถูกถามไปแล้วโปรดชี้ให้ฉันเห็น)

ฉันเห็นคำแนะนำบางอย่างเกี่ยวกับ SQL Profiler แต่ฉันเดาว่า Profiler จะช่วยฉันเฉพาะเมื่อฉันเริ่มต้นการติดตามแล้ว (แก้ไขฉันถ้าฉันผิด)

ใครช่วยแนะนำฉันว่าฉันควรจะได้รับรายการของแบบสอบถามทั้งหมดที่มีการดำเนินการในฐานข้อมูลตั้งแต่เช้า (รวมถึงเวลาดำเนินการแบบสอบถาม) ..

[มันจะมีประโยชน์ (ไม่ใช่ข้อกำหนด) ถ้าฉันสามารถหาชื่อผู้ใช้ของผู้ใช้ที่ทำการสืบค้นได้)

คำตอบ:


12

ข้อความค้นหานี้ส่งคืนผลลัพธ์แปลก ๆ (ส่วนใหญ่เป็นกลุ่มของ sprocs) ยิ่งกว่านั้นผลลัพธ์ทั้งหมดเหล่านี้แสดงข้อความค้นหาที่ดำเนินการตั้งแต่บ่ายวันนี้ (ฉันต้องการข้อความค้นหาตั้งแต่เช้า)

นั่นเป็นเพราะคุณกำลังมองหาโพรซีเดอร์แคชและแผนการที่ใช้สำหรับตอนเช้าอาจไม่อยู่ที่นั่นอีกต่อไป (เนื่องจากความดันหน่วยความจำการรีสตาร์ทเซิร์ฟเวอร์ / อินสแตนซ์การล้างแคช proc ด้วยตนเอง ฯลฯ )

วิธีที่แท้จริงในการเรียกใช้คิวรีที่ดำเนินการกับอินสแตนซ์ (หรือมากกว่านั้นโดยเฉพาะฐานข้อมูล) คือการสร้าง SQL Trace หรือเซสชันที่ขยายเพิ่มเติม สร้างอย่างเหมาะสมสิ่งเหล่านี้จะให้ข้อมูลที่คุณต้องการ

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

สำหรับการอ้างอิงในอนาคตเริ่มต้นด้วยการติดตามของ SQL ที่รวบรวมSQL: StmtCompletedเหตุการณ์ ใน XE มันจะเป็นsql_statement_completedเหตุการณ์

ในความคิดของฉันแทนที่จะค้นหาเศษซากของสถิติการดำเนินการค้นหาของฉันต่อไปฉันจะเริ่มใช้เวลาในการหาวิธีดำเนินการปริมาณงานที่คุณพยายามวัดอีกครั้ง แต่คราวนี้ก่อนหน้านั้นให้ตั้งค่าการติดตาม / การติดตามที่เหมาะสม


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