วิธีการโพรไฟล์ขั้นตอนการจัดเก็บ


26

ฉันใช้ SQL Server 2012 และสงสัยว่าจะทำโพรซีเดอร์ที่เก็บไว้ได้อย่างไร

ตัวอย่างเช่น profiler สามารถดักจับคำสั่ง SQL แต่ละคำสั่งในโพรซีเดอร์ที่เก็บไว้มันคืออะไรและใช้เวลานานแค่ไหนในการรัน etc?

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

คำตอบ:


27

คำตอบของ Kevin อธิบายถึงเหตุการณ์ที่จะบันทึกใน SQL Trace / SQL Profiler หากต้องการขยายคำตอบนั้นสักหน่อย - SP:StmtCompletedจะแสดงคำสั่งแต่ละคำสั่งภายในกระบวนงานที่เก็บไว้ซึ่งจะแล้วเสร็จ

นอกจากนี้หากคุณอยู่ในระบบไม่ว่างและพยายามวิเคราะห์ปัญหาด้านประสิทธิภาพคุณควรระมัดระวัง SQL Profiler SQL Profiler ช้ากว่าการสืบค้นไปยังไฟล์หรือใช้ Extended Events โพสต์บล็อกนี้โดย Jonathan Kehayias แสดงค่าใช้จ่าย 90% ในประสิทธิภาพของระบบจากการใช้ SQL Profiler และค่าใช้จ่าย 10% จากการติดตามไปยังไฟล์ น้อยกว่าสำหรับเหตุการณ์ขยาย ด้วยเหตุนี้จึงแนะนำให้ไม่เรียกใช้ตัวสร้างโปรไฟล์ SQL ขณะที่

ในขณะที่ข้อมูลนี้มีให้ผ่านทาง Extended Events ฉันขอแนะนำให้ใช้ SQL Trace (เทคโนโลยีที่อยู่เบื้องหลัง SQL Profiler) แต่ติดตามไปที่ไฟล์แทน(ถ้าคุณต้องการลงทุนในการเรียนรู้และใช้ Extended Events สิ่งนี้จะเป็นหนทางไปใน SQL Server เวอร์ชั่นในอนาคตของ SQL Trace จะหายไปและสิ่งที่เราจะได้คือขยายเหตุการณ์) ฉันยังขอแนะนำให้คุณกรองผ่านปุ่มตัวกรองคอลัมน์ออกเป็นเสียงรบกวนพื้นหลังมากที่สุดเท่าที่จะทำได้เพื่อให้แน่ใจว่าคุณจับภาพสิ่งที่จำเป็นเท่านั้น คุณสามารถตั้งค่าการติดตามของคุณด้วยเครื่องมือตัวสร้างโปรไฟล์โดยใช้ขั้นตอนที่เควินอธิบายไว้ในคำตอบที่ดีของเขาแล้วเพิ่มตัวกรองจาก GUI เดียวกันนั้น จากนั้นคุณสามารถส่งออกการติดตามเป็นสคริปต์และเรียกใช้สคริปต์นั้นใน SQL Server สืบค้นกลับไปยังไฟล์ในโฟลเดอร์ที่ไม่มีไฟล์บันทึกฐานข้อมูลหรือธุรกรรม ในการส่งออกคุณเพียงแค่ตั้งค่าการติดตามใช้เวลาสองสามวินาทีเพื่อให้แน่ใจว่าคุณจับภาพสิ่งที่คุณต้องการหยุดมันแล้วไปที่แถบเมนูและFile->Export-> Script Trace Definitionและบันทึกไฟล์ จากนั้นเปิดไฟล์นั้นในหน้าต่างแบบสอบถามใหม่บนเซิร์ฟเวอร์ที่คุณต้องการติดตาม ท่านสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกและคำจำกัดความของสคริปต์นี้คุณสร้างขึ้นโดยดูที่บทความความช่วยเหลือสำหรับขั้นตอนการจัดเก็บต่างๆที่ใช้ในสคริปต์ที่คุณเพิ่งสร้างโดยเริ่มต้นที่นี่

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


2
สิ่งที่เกี่ยวกับเมื่อ SP: StmtCompleted เพียงแสดง "- ข้อความที่เข้ารหัส" ในข้อความแบบสอบถาม? เราจะทราบได้อย่างไรว่ามีการเข้าถึงตารางใดบ้าง
Brain2000

มีปัญหาเช่นเดียวกับคุณ @ Brain2000 ....
wenzzzel

21

คุณสามารถดักจับแต่ละข้อความสั่งในกระบวนงานที่เก็บไว้ผ่าน SQL Server Profiler ในการทำเช่นนี้ในแท็บการเลือกกิจกรรมของคุณให้คลิกช่องทำเครื่องหมาย "แสดงกิจกรรมทั้งหมด" จากนั้นเลื่อนลงไปที่หมวดหมู่วิธีการจัดเก็บและตรวจสอบช่องถัดจากSP: StmtCompleted ถ้าคุณมีSQL: BatchStartedและSQL: BatchCompletedเหตุการณ์ที่เลือกคุณสามารถรับรูปภาพเริ่มต้น - สิ้นสุดของกระบวนงานที่เก็บไว้ที่รันโดยผูกทั้งหมดเข้าด้วยกันโดย SPID

นอกจากนี้ยังอาจช่วยในการดูแคชแผนเพื่อดูว่าคุณสามารถรับแผนแบบสอบถามสำหรับกระบวนการที่ทำงานช้าของคุณได้หรือไม่ คุณสามารถเริ่มต้นด้วยสิ่งนี้:

SELECT 
    OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
    cp.usecounts AS ExecutionCount,
    st.TEXT AS QueryText,
    qp.query_plan AS QueryPlan
FROM 
    sys.dm_exec_cached_plans AS cp
    CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
    CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
WHERE 
    cp.objtype = 'Proc'
    AND OBJECT_NAME(st.objectid,st.dbid) = 'YourStoredProcedure';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.