การใช้ตัวสร้างโปรไฟล์ SQL SQL Profiler แก้ปัญหาได้ SQL Profiler - วัตถุประสงค์

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

ในการติดตามการกระทำที่กำลังดำเนินการอยู่ คุณต้องเปิด MS SQL Profiler สร้างการติดตามใหม่และกำหนดค่าการวิเคราะห์ตัวบ่งชี้:

บนแท็บ ทั่วไป คุณต้องระบุชื่อของการติดตาม ระบุตำแหน่งที่จะบันทึกข้อมูลการติดตามที่บันทึกไว้ - ลงในไฟล์และ/หรือตารางฐานข้อมูล

สิ่งที่น่าสนใจอย่างยิ่งคือแท็บ "การเลือกกิจกรรม":

หน้านี้ระบุเหตุการณ์ที่ต้องติดตาม ในตัวอย่างนี้ เราจะระบุข้อมูลที่จำเป็นในการติดตามแผนการสืบค้น

รับบทเรียนวิดีโอ 267 บทเรียนบน 1C ฟรี:

ตามค่าเริ่มต้น การติดตามจะรันกับเหตุการณ์ที่ระบุทั้งหมดในฐานข้อมูลทั้งหมด หากต้องการใช้การเลือกกับข้อมูลที่ได้รับ คุณต้องคลิกปุ่ม "ตัวกรองคอลัมน์ ... ":

ตัวอย่างเช่น เรามาตั้งค่าการเลือกตามตัวระบุฐานข้อมูล (คุณสามารถค้นหา ID ฐานข้อมูลได้โดยใช้แบบสอบถาม SELECT DB_ID(N’BaseName’))

เรียกใช้การติดตามใน Profiler สำหรับ 1C

หลังจากทำการตั้งค่าทั้งหมดแล้ว สิ่งที่เหลืออยู่คือเริ่มการติดตาม โดยคลิก "เรียกใช้" นับจากนี้เป็นต้นไป การดำเนินการทั้งหมดที่ระบุในตัวกรองจะรวมอยู่ในการติดตาม:

ตัวอย่างเช่น ฉันดำเนินการติดตามตามระยะเวลาของเอกสาร "ใบเสร็จรับเงินของสินค้าและบริการ" เพื่อติดตามการดำเนินงานที่ใช้แรงงานเข้มข้นที่สุด

เมื่อได้รับการติดตามแล้ว จะต้องวิเคราะห์

การวิเคราะห์ข้อมูลจาก Profiler

สำหรับการวิเคราะห์ สามารถบันทึกการติดตามผลลัพธ์ลงในไฟล์หรือตารางได้ เราจะบันทึกลงในตารางฐานข้อมูล:

16/05/2000 อิทซิก เบน-กัน

เช่นเดียวกับการสร้างอาชญากรรมขึ้นใหม่ช่วยในการค้นหาอาชญากร การติดตามฐานข้อมูลก็ช่วยระบุปัญหาคอขวดและกำจัดปัญหาเหล่านั้นได้

บทความ “Catch an Event” ที่ตีพิมพ์ในนิตยสารฉบับที่แล้ว อธิบายสถาปัตยกรรมของระบบการติดตาม SQL Server 7.0 และแสดงวิธีกำหนดการติดตามใน SQL Profiler แบบกราฟิก คราวนี้เราจะพูดถึงวิธีสร้างการติดตามใหม่โดยใช้ SQL Profiler และวิธีการกำหนดการเริ่มอัตโนมัติโดยใช้ขั้นตอนการจัดเก็บการติดตามแบบขยาย ด้วยพื้นฐานอันทรงพลังนี้ คุณสามารถใช้ SQL Profiler และกระบวนงานที่เก็บไว้เพื่อตรวจสอบทุกอย่างตั้งแต่การสืบค้นที่ใช้เวลานานไปจนถึงการหยุดชะงักที่ซับซ้อน

การเตรียมการเบื้องต้นสำหรับการจำลองเส้นทาง

เมื่อใช้ SQL Profiler คุณสามารถทำซ้ำการติดตามที่บันทึกไว้เพื่อแก้ไขจุดบกพร่องแอปพลิเคชันที่มีปัญหา สร้างสถานการณ์การทดสอบกับสถานการณ์ในชีวิตจริงต่างๆ กำหนดค่าฐานข้อมูล และอื่นๆ อีกมากมาย หากคุณต้องการติดตามเส้นทางอีกครั้ง คุณจะต้องเตรียมการบางอย่าง ขั้นแรก คุณต้องกำหนดการติดตามเพื่อติดตามเหตุการณ์และคอลัมน์ข้อมูลเฉพาะที่ไม่ใช่เหตุการณ์ที่คุณสนใจ การบันทึกเหตุการณ์และคอลัมน์เพิ่มเติมเหล่านี้ช่วยให้มั่นใจได้ว่าการกระทำทั้งหมดจะถูกทำซ้ำเหมือนที่เคยเกิดขึ้นก่อนหน้านี้ ประการที่สอง คุณควรบันทึกผลลัพธ์การติดตามลงในไฟล์ ตาราง หรือสคริปต์ SQL

การรันซ้ำใดๆ จำเป็นต้องบันทึกเหตุการณ์ Connect, Disconnect, ExistingConnection รวมถึง RPC:Starting และ SQL:BatchStarting นอกจากนี้ เมื่อเล่นเคอร์เซอร์ API แบ็กเอนด์ (นั่นคือ เคอร์เซอร์เซิร์ฟเวอร์ที่ควบคุมโดยฟังก์ชันเคอร์เซอร์ API) คุณต้องบันทึกเหตุการณ์ CursorExecute, CursorOpen และ CursorPrepare เมื่อต้องการทำซ้ำคำสั่ง SQL ฝั่งเซิร์ฟเวอร์ที่เตรียมไว้ คุณต้องเพิ่มเหตุการณ์ Exec ที่เตรียมไว้ SQL และ เตรียม SQL ด้วย การทำซ้ำจะต้องมีคอลัมน์ที่จะมีข้อมูลต่อไปนี้: ชื่อแอปพลิเคชัน, ข้อมูลไบนารี, ID การเชื่อมต่อหรือ ID กระบวนการเซิร์ฟเวอร์ (SPID), ID ฐานข้อมูล, คลาสเหตุการณ์, คลาสย่อยของเหตุการณ์, ชื่อโฮสต์, ข้อมูลดิจิทัล, ชื่อเซิร์ฟเวอร์, ชื่อผู้ใช้ SQL, เรียกใช้ เวลาเริ่มต้นและข้อมูลข้อความ

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

หากคุณกำลังรันการรันซ้ำบนเซิร์ฟเวอร์อื่น สิ่งสำคัญคือต้องแน่ใจว่าฐานข้อมูลบนเซิร์ฟเวอร์นั้นอยู่ในสถานะเดียวกับฐานข้อมูลบนเซิร์ฟเวอร์เดิม ในกรณีนี้ คุณต้องใช้ชื่อผู้ใช้ อำนาจ และตัวระบุฐานข้อมูลเดียวกันกับที่ใช้บนเซิร์ฟเวอร์ต้นทาง

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

คุณยังสามารถควบคุมระดับการซิงโครไนซ์สคริปต์และความเร็วในการเล่นได้ เลือกการตั้งค่าจากเมนูเล่นซ้ำเพื่อเข้าสู่กล่องโต้ตอบเล่นซ้ำเซิร์ฟเวอร์ SQL พารามิเตอร์ระดับการซิงโครไนซ์ ซึ่งควบคุมการซิงโครไนซ์ภายในการเชื่อมต่อ สามารถใช้ค่าต่อไปนี้:

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

พารามิเตอร์ความเร็วในการเล่นซ้ำ อัตราการเล่นซ้ำ สามารถตั้งค่าเป็นค่าใดค่าหนึ่งต่อไปนี้:

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

องค์กรของการเล่นเส้นทาง

สมมติว่าคุณต้องการสร้างการติดตามการดำเนินการของคำสั่ง SQL ฝั่งเซิร์ฟเวอร์ที่เตรียมไว้ ซึ่งเป็นคำสั่ง Transact-SQL (T-SQL) ที่ผู้ใช้ส่งไปยังเซิร์ฟเวอร์ผ่าน ADO, OLE DB หรือ ODBC SQL Server 7.0 ดำเนินการคำสั่ง SQL ที่จัดเตรียมฝั่งเซิร์ฟเวอร์โดยใช้ขั้นตอนที่เก็บไว้หลอก sp_prepare และ sp_execute ซึ่งถูกเรียกโดยแอปพลิเคชันไคลเอนต์

การเรียกsp_prepareทำให้ SQL Server เตรียมคำสั่ง T_SQL สำหรับการดำเนินการ โดยการคอมไพล์และแคชแผนการดำเนินการ เมื่อมีการเรียกsp_execute SQL Server จะดำเนินการแผนการแคชไว้ก่อนหน้านี้ ซึ่งอาจดำเนินการดังกล่าวซ้ำๆ การเรียกกระบวนงานเก็บไว้แต่ละครั้งจะสร้างเหตุการณ์ RPC:BatchStarting, เตรียม SQL และ Exec เตรียม SQL ด้วยเหตุนี้จึงต้องรวมเหตุการณ์เหล่านี้ไว้ในคำจำกัดความของเส้นทาง

SQL Profiler มีข้อกำหนดการติดตามตัวอย่างหลายตัวอย่างที่คุณสามารถใช้เป็นเทมเพลตได้ รวมถึงตัวอย่างหมายเลข 6 “T-SQL for Replay” ที่เกี่ยวข้องกับการเรียกใช้การติดตามอีกครั้ง ตัวอย่างนี้มีประโยชน์สำหรับการระบุเอาต์พุตการติดตามที่สร้างขึ้นระหว่างการเล่นซ้ำ หากต้องการเปิดเอาต์พุตการติดตามที่บันทึกไว้สำหรับการเล่น ให้เลือก เปิด จากเมนูไฟล์ และเลือกไฟล์ ตาราง หรือสคริปต์ SQL เพื่อจัดเก็บข้อมูลที่รวบรวมระหว่างการติดตาม คุณสามารถควบคุมการเล่นโดยใช้ตัวเลือกที่แสดงในตารางที่ 1 โดยสามารถแสดงด้วยรายการเมนูเล่นซ้ำหรือด้วยปุ่มบนแถบเครื่องมือ

การใช้ขั้นตอนการจัดเก็บเพิ่มเติม

คุณลักษณะการติดตามบางอย่างจาก SQL Profiler ไม่พร้อมใช้งาน ซึ่งรวมถึงการเรียกใช้การติดตามตามกำหนดเวลา การรันเมื่อมีเหตุการณ์เฉพาะเกิดขึ้น หรือเมื่อ SQL Server เริ่มทำงาน นอกจากนี้ ไม่สามารถกำหนดค่า SQL Profiler ให้ส่งผลลัพธ์การติดตามไปยังบันทึกของแอปพลิเคชัน Windows NT หรือ Windows 2000 เมื่อต้องการดำเนินการฟังก์ชันเหล่านี้ และเพื่อให้มีอิสระมากขึ้นในการจัดการการติดตามโดยทางโปรแกรม คุณสามารถใช้ชุดของกระบวนงานที่เก็บไว้แบบขยายเรียกรวมกันว่า xp_trace*

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

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

ขั้นตอนการจัดเก็บเพื่อดำเนินการติดตาม

มาดูขั้นตอนการจัดเก็บทั้งสองนี้เพื่อดูว่าการติดตามเริ่มต้นและหยุดอย่างไร ขั้นตอนการจัดเก็บที่เริ่มต้นการติดตามมีพารามิเตอร์อินพุตทางเลือกสี่ตัว สองรายการแรก @spid_filter และ @dbid_filter ช่วยให้คุณสามารถจำกัดข้อมูลที่รวบรวมระหว่างการติดตามเฉพาะข้อมูลที่เกี่ยวข้องกับกระบวนการเซิร์ฟเวอร์เฉพาะ (ระบุโดย SPID) และฐานข้อมูลที่กำหนด หากไม่ได้ระบุพารามิเตอร์เหล่านี้ การติดตามจะรวบรวมข้อมูลจากกระบวนการและฐานข้อมูลทั้งหมด พารามิเตอร์ @email_address ช่วยให้คุณสามารถกำหนดที่อยู่อีเมลที่จะส่งข้อมูลโดยละเอียดเกี่ยวกับความคืบหน้าของการติดตาม หากไม่ได้ระบุพารามิเตอร์นี้ sp_start_mytrace จะแสดงเฉพาะข้อมูลบนหน้าจอเท่านั้น หากมีการระบุ แต่ระบุที่อยู่ไม่ถูกต้อง ขั้นตอนที่เก็บไว้จะสร้างข้อความแสดงข้อผิดพลาดและออก พารามิเตอร์สุดท้าย @filename มีวัตถุประสงค์เพื่อระบุชื่อของไฟล์ที่จะส่งข้อมูลที่รวบรวมระหว่างการติดตามจะถูกส่งไป ในกรณีที่ไม่ได้กำหนดพารามิเตอร์นี้ ข้อมูลดีฟอลต์จะถูกวางไว้ในไฟล์ c:\mytraceN.trc โดยที่ N คือหมายเลขตัวอธิบายคิว แบบแผนนี้ ซึ่งกำหนดกฎสำหรับการตั้งชื่อไฟล์ข้อมูลการติดตาม อนุญาตให้มีการติดตามหลายรายการพร้อมกัน โดยไม่ต้องอนุญาตให้หนึ่งในนั้นล็อกไฟล์เพื่อบันทึกผลลัพธ์ด้วยตนเอง

หากต้องการทดสอบการดำเนินการทริกเกอร์ ให้เปลี่ยนคุณสมบัติไฟล์:

แก้ไขฐานข้อมูล testdb แก้ไขไฟล์ (NAME = `testdb_dat`, MAXSIZE = 30MB)

คุณจะได้รับข้อความแจ้งว่าคุณสมบัติไฟล์มีการเปลี่ยนแปลง:

คุณสมบัติไฟล์มีการเปลี่ยนแปลง:
คำสั่ง: ALTER DATABASE testdb MODIFY FILE (NAME = `testdb_dat`,
ขนาดสูงสุด = 30MB)
ชื่อผู้ใช้ NT: แกนดัล์ฟ
ชื่อแอปพลิเคชัน: ตัววิเคราะห์คำถาม MS SQL
ชื่อผู้ใช้ SQL: NA
เวลา: 22-11-2543 14:15:28 น

เป็นเรื่องยากมากเสมอที่จะทราบว่าเหตุการณ์ใดที่นำไปสู่การหยุดชะงักที่จะเกิดขึ้น อย่างไรก็ตาม SQL Profiler มีกิจกรรมพิเศษที่ทำให้ "การสืบสวน" ง่ายขึ้นมาก ตัวอย่างเช่น คุณสามารถติดตามการเกิดขึ้นของเหตุการณ์ Lock:Deadlock การเกิดขึ้นของเหตุการณ์นี้พูดได้

ว่าเกิดเหตุการณ์ชะงักงันขึ้น ซึ่งจะแจ้งให้ผู้ใช้ทราบถึง ID กระบวนการเซิร์ฟเวอร์ (SPID), ID ธุรกรรมที่ถูกบล็อก, เวลาที่บล็อกเกิดขึ้น, ชื่อแอปพลิเคชัน และ ID ผู้ใช้ เหตุการณ์ Lock: Deadlock Chain ซึ่งสร้างขึ้นทุกครั้งที่เกิดการบล็อกนั้นสะดวกอย่างยิ่ง: ช่วยให้คุณสามารถค้นหาตัวระบุกระบวนการ (SPID) และธุรกรรมได้

คุณสามารถบันทึก ID ของธุรกรรมที่เกี่ยวข้องกับการหยุดชะงัก จากนั้นจัดกลุ่มผลลัพธ์การติดตามตาม ID ธุรกรรม และวิเคราะห์เฉพาะธุรกรรมเหล่านั้น อีกวิธีหนึ่งจะส่งผลการติดตามไปยังตาราง จากนั้นคุณสามารถใช้แบบสอบถามเพื่อกรองตามหมายเลข SPID หรือรหัสธุรกรรมได้

หากต้องการสร้างสถานการณ์การหยุดชะงัก ให้สร้างตาราง 2 ตาราง t1 และ t2 ซึ่งแต่ละตารางต้องมีคอลัมน์จำนวนเต็มเพียงคอลัมน์เดียวเท่านั้น ป้อนหนึ่งแถวลงในแต่ละตารางที่มีค่า 1 กำหนดการติดตามที่จะบันทึกชุดเหตุการณ์ต่อไปนี้: Lock:Deadlock, Lock: Deadlock Chain และเหตุการณ์เริ่มต้นและสิ้นสุดที่สอดคล้องกันของการดำเนินการของตัวดำเนินการ (RPC, SP, SQL) ควรเลือกทางเลือกขึ้นอยู่กับแหล่งที่มาของการบล็อกที่ต้องการ ในตัวอย่างของเรา เราจะต้องมีเพียงเหตุการณ์ SQL: StmtStarting และ SQL:StmtCompleted

นอกเหนือจากคอลัมน์ข้อมูลเริ่มต้นแล้ว ให้เพิ่มคอลัมน์เพื่อบันทึกรหัสธุรกรรมและคอลัมน์ที่คุณเลือก ตั้งค่าตัวกรองการติดตามให้ตรงกับ ID ของฐานข้อมูลที่คุณใช้งานอยู่ หลังจากนั้น ให้เปิดการเชื่อมต่อสองรายการไปยังเซิร์ฟเวอร์จาก Query Analyzer ขณะอยู่ในการเชื่อมต่อครั้งแรก ให้ทำ:

เริ่มต้นการทำธุรกรรมอัปเดต t1 SET col1 = 1

บนการเชื่อมต่อ 2 ให้เริ่มธุรกรรมต่อไปนี้:

เริ่มต้นการทำธุรกรรม
อัปเดต t2 ตั้งค่า col1 = 1
เลือก * จาก t1
กระทำธุรกรรม

สุดท้าย ในการเชื่อมต่อ 1 ให้รันคำสั่ง:

เลือก * จาก t2
กระทำธุรกรรม

หยุดการติดตามและเปิดไฟล์การติดตาม ค้นหาเหตุการณ์ Lock:Deadlock Chain และจดบันทึกหมายเลขธุรกรรมที่เกี่ยวข้อง จัดกลุ่มเอาต์พุตตามรหัสธุรกรรมและขยายธุรกรรมที่เกี่ยวข้อง ผลลัพธ์จะมีลักษณะคล้ายกับที่แสดงในหน้าจอที่ 1

ตัวจัดการองค์กรของเซิร์ฟเวอร์ SQL มีตัวช่วยสร้างที่สามารถช่วยคุณตั้งค่าการติดตาม รวมถึงเครื่องมือที่ใช้เพื่อค้นหาสาเหตุของการหยุดชะงัก หากต้องการใช้ Create Trace Wizard เพื่อกำหนดการสืบค้นกลับ ให้เข้าสู่ระบบ Enterprise Manager เลือก Wizards จากเมนู Tools จากนั้นเปิดหมวดหมู่ Management และเลือก Create Trace Wizard

หมายเหตุสุดท้าย

ความสามารถในการเล่นซ้ำการติดตามของ SQL Profiler ควบคู่ไปกับขั้นตอนการจัดเก็บการติดตามแบบขยายของ SQL Server 7.0 ช่วยให้คุณสามารถดีบักฐานข้อมูลของคุณได้ ไม่ว่าคุณจะเพียงตรวจสอบความสมบูรณ์ของสภาพแวดล้อม SQL Server ของคุณหรือแก้ไขปัญหาประสิทธิภาพการทำงานของแอปพลิเคชัน ถึงเวลาแล้วที่คุณจะต้องนำความรู้ของคุณไปปฏิบัติจริง

อิทซิก เบน-กัน [ป้องกันอีเมล]ถือใบรับรอง MCDBA, MCSE+I, MCSD, MCT และ SQL Server MVP เขาเป็นอาจารย์อาวุโสสำหรับหลักสูตร SQL Server ที่ Hi-Tech College ในอิสราเอล และเป็นประธานกลุ่มผู้ใช้ SQL Server ของอิสราเอล

ในการบรรยายนี้ เราจะศึกษาขั้นตอนการจัดเก็บที่เราเริ่มต้นใน "การสร้างและการจัดการขั้นตอนการจัดเก็บ" ต่อไป คุณจะได้เรียนรู้วิธีการวิเคราะห์ขั้นตอนการจัดเก็บและคำสั่ง T-SQL อื่นๆ โดยใช้ Microsoft SQL Server Query Analyzer และ SQL Server Profiler จากการวิเคราะห์นี้ คุณสามารถกำหนดได้ว่าคำสั่ง T-SQL มีประสิทธิภาพเพียงใด การสืบค้น SQL Server ที่มีประสิทธิภาพจะใช้ลำดับการดำเนินการที่เหมาะสมและดัชนีที่เหมาะสมเพื่อลดจำนวนแถวที่ประมวลผลและลดจำนวนการดำเนินการ I/O ให้เหลือน้อยที่สุด

เมื่อใช้ Query Analyzer คุณสามารถดูแผนการดำเนินการที่เลือกสำหรับคำสั่ง T-SQL เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามเซิร์ฟเวอร์ SQL เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามเป็นโมดูลภายในที่ค้นหาแผนการดำเนินการที่ดีที่สุดสำหรับคำสั่ง T-SQL แต่ละรายการ เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามวิเคราะห์แต่ละคำสั่ง T-SQL ดูแผนการดำเนินการที่เป็นไปได้จำนวนหนึ่ง และประเมิน "ต้นทุน" ของแต่ละแผนในแง่ของทรัพยากรที่ต้องการและเวลาในการประมวลผล เลือกแผนที่มีราคาต่ำสุด ต้นทุนของแต่ละแผนจะพิจารณาจากสถิติที่มีอยู่ซึ่งระบบรวบรวมไว้และอาจล้าสมัย เพราะคุณอาจทราบข้อมูลเพิ่มเติมเกี่ยวกับฐานข้อมูลและข้อมูลของคุณมากกว่า เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามจากนั้นคุณอาจสร้างแผนที่ดีกว่าเครื่องมือเพิ่มประสิทธิภาพคิวรีได้ การใช้ข้อมูลที่ Query Analyzer สร้างขึ้น คุณสามารถระบุได้ว่าแผนของตัวเพิ่มประสิทธิภาพคิวรีสำหรับคำสั่งใดคำสั่งหนึ่งจะมีประสิทธิภาพหรือไม่ และถ้าไม่เป็นเช่นนั้น คุณสามารถลองปรับคำสั่งนั้นให้เหมาะสมได้โดยการปรับเปลี่ยนหรือใช้คำแนะนำของ SQL ในการบรรยายนี้ คุณจะได้เรียนรู้วิธีปรับคำสั่ง T-SQL ให้เหมาะสม นอกเหนือจากการเรียนรู้วิธีใช้ Query Analyzer

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

การใช้ตัววิเคราะห์คำถาม SQL

โปรแกรมอรรถประโยชน์ Query Analyzer มาพร้อมกับ Microsoft SQL Server 2000 เพื่อแทนที่

ในฉบับก่อนหน้านี้ (ดู ComputerPress No. 1, 3-5, 7, 9'2006) เราได้กล่าวถึงปัญหาที่เกี่ยวข้องกับการเปลี่ยนไปใช้ SQL Server 2005 โดยการโยกย้ายหรืออัปเกรด รวมถึงสถานการณ์หลักสำหรับการใช้ SQL Server 2005 บทความนี้ จะหารือเกี่ยวกับวิธีการเพิ่มประสิทธิภาพแบบสอบถามต่างๆ และแนวทางที่เป็นไปได้ในการแก้ปัญหาที่เกี่ยวข้องกับการค้นหาปัญหาด้านประสิทธิภาพ

SQL Server ให้บริการที่ทำงานในสภาพแวดล้อมแบบไดนามิกและเปลี่ยนแปลงตลอดเวลา ดังนั้นการตรวจสอบการทำงานของเซิร์ฟเวอร์เป็นประจำทำให้คุณสามารถระบุปัญหาในขั้นตอนที่เกิดขึ้นและดำเนินมาตรการเพื่อกำจัดปัญหาเหล่านั้นได้ทันที ด้วยการรวบรวมสถิติ ทำให้เกิดความเข้าใจเกี่ยวกับแนวโน้มหลักในการทำงานของเซิร์ฟเวอร์ การรวบรวมข้อมูลเป็นประจำ - แม้ในกรณีที่เซิร์ฟเวอร์ทำงานโดยไม่มีปัญหาใดๆ - จะสร้างสิ่งที่เรียกว่าเกณฑ์ประสิทธิภาพของเซิร์ฟเวอร์ ซึ่งสามารถใช้เป็นข้อมูลอ้างอิงสำหรับการวัดประสิทธิภาพของเซิร์ฟเวอร์เพิ่มเติม

เมื่อคุณมีเกณฑ์มาตรฐานประสิทธิภาพพื้นฐานแล้ว คุณจะวิเคราะห์ประสิทธิภาพการสืบค้นในสถานการณ์ต่างๆ ได้ ขอแนะนำให้ทำการวัดอย่างน้อย ก่อน ระหว่าง และหลังการดำเนินการตามขั้นตอนการปรับให้เหมาะสมต่างๆ ซึ่งจะทำให้แน่ใจได้ว่าการดำเนินการจะประสบความสำเร็จ นอกจากนี้ การวัดประสิทธิภาพมาตรฐานเป็นประจำ (รายสัปดาห์ รายเดือน รายไตรมาส ฯลฯ) จะให้ภาพประสิทธิภาพของเซิร์ฟเวอร์ที่ชัดเจนยิ่งขึ้น

มาตรฐานพื้นฐานสามารถใช้เพื่อกำหนดเวลาโหลดสูงสุดของเซิร์ฟเวอร์และเวลาหยุดทำงาน (ชั่วโมงเร่งด่วนและนอกช่วงเร่งด่วน) เวลาตอบสนองของการร้องขอและชุดคำสั่ง เวลาดำเนินการของขั้นตอนสำหรับการสร้างสำเนาสำรองและการกู้คืนข้อมูล ฯลฯ .

ประสิทธิภาพการสืบค้น

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

SQL Server 2005 มีเครื่องมือหลักสองตัวสำหรับการวัดประสิทธิภาพคิวรี - Performance Monitor และ SQL Server Profiler นอกจากนี้ หากต้องการรับข้อมูลเกี่ยวกับการดำเนินการค้นหา คุณสามารถใช้โครงสร้างภาษา T-SQL จากกลุ่ม SET STATISTICS - SET STATISTICS IO, SET STATISTICS PROFILE และ SET STATISTICS TIME - และมุมมองแบบไดนามิก (มุมมองการจัดการแบบไดนามิก) ต่อไป เราจะดูการใช้ Performance Monitor และ SQL Server Profiler โดยละเอียดยิ่งขึ้น

การใช้การตรวจสอบประสิทธิภาพ

ยูทิลิตี้การตรวจสอบประสิทธิภาพใช้เพื่อวิเคราะห์ประสิทธิภาพของทรัพยากรฮาร์ดแวร์และซอฟต์แวร์ รวมถึงหน่วยความจำ การใช้งานเครือข่าย เวลาตัวประมวลผล และข้อมูลที่เกี่ยวข้องกับการทำงานของ SQL Server และผลิตภัณฑ์ซอฟต์แวร์อื่น ๆ - Microsoft Message Queuing (MSMQ), Microsoft .NET Framework และไมโครซอฟต์เอ็กซ์เชนจ์เซิร์ฟเวอร์ โดยเฉพาะอย่างยิ่ง คุณสามารถใช้ Performance Monitor เพื่อตรวจสอบทรัพยากร SQL Server เช่น การล็อคและธุรกรรม

หากต้องการเพิ่มตัวนับที่เราสนใจ คุณต้องทำตามขั้นตอนต่อไปนี้:

  1. ในเมนู เริ่มเลือกทีม วิ่งและในแผงโต้ตอบ วิ่งเข้า เพอร์ฟมอน- สิ่งนี้จะเปิดตัว Performance Microsoft Management Console (MMC) ซึ่งแสดงการแสดงกราฟิกของตัวนับประสิทธิภาพจำนวนหนึ่ง
  2. ในหน้าต่าง การตรวจสอบระบบกดปุ่มขวาบนแผนภูมิแล้วเลือกคำสั่ง เพิ่มเคาน์เตอร์.
  3. ในแผงโต้ตอบ เพิ่มเคาน์เตอร์เลือกคอมพิวเตอร์ที่เราสนใจและวัตถุที่จะตรวจสอบ วัตถุที่เกี่ยวข้องกับ SQL Server จะมีคำนำหน้าตามลำดับ
  4. ในการเลือกตัวนับ คุณต้องเลือกตัวเลือกใดตัวเลือกหนึ่ง เคาน์เตอร์ทั้งหมดหรือตัวนับหนึ่งตัวหรือมากกว่าจากรายการแบบเลื่อนลง (รูปที่ 1)
  1. หลังจากนี้ คุณควรเลือกอินสแตนซ์ฐานข้อมูลหรือเปิดใช้งานตัวเลือก ทุกกรณี.
  2. การคลิกปุ่มเพิ่มและปิดจะเป็นการเพิ่มตัวนับให้เสร็จสิ้น

หลังจากเพิ่มตัวนับที่น่าสนใจสำหรับเราแล้วเราสามารถดูค่าของมันในรูปแบบของกราฟหรือบันทึกไว้ในไฟล์การติดตาม (รูปที่ 2)

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

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

หากต้องการดำเนินการบันทึกให้เสร็จสิ้นด้วยตนเอง ให้คลิกปุ่มขวาบนองค์ประกอบ บันทึกเคาน์เตอร์และเลือกทีม หยุด.

หากต้องการดูข้อมูลที่รวบรวมในไฟล์บันทึกใน Performance Monitor คุณต้องเลือกองค์ประกอบ การตรวจสอบระบบในแถบงาน - คำสั่ง ดูข้อมูลบันทึกและในแผงโต้ตอบ คุณสมบัติการตรวจสอบระบบบนแท็บ แหล่งที่มาระบุชื่อไฟล์บันทึก

ตัวนับการตรวจสอบประสิทธิภาพที่ใช้บ่อยที่สุด ซึ่งสามารถใช้เพื่อช่วยระบุปัญหาด้านประสิทธิภาพ แบ่งออกเป็นประเภทต่อไปนี้:

  • การเข้าถึงข้อมูล - เพื่อตรวจสอบวิธีการเข้าถึงข้อมูลที่ใช้โดย SQL Server เอง วัตถุจะถูกใช้ SQLServer:วิธีการเข้าถึง;
  • สถิติ - วัตถุนี้ใช้เพื่อตรวจสอบการรวบรวมและการคอมไพล์แบบสอบถามใหม่ SQLServer:สถิติ SQL- โดยให้ข้อมูลเกี่ยวกับวิธีการที่รวดเร็วและมีประสิทธิภาพของ SQL Server ในการประมวลผลแบบสอบถาม
  • ธุรกรรม - ตัวนับเฉพาะวัตถุใช้เพื่อกำหนดจำนวนธุรกรรมต่อวินาที SQLServer:ฐานข้อมูลและ SQLServer:ธุรกรรม;
  • ล็อค - วัตถุถูกใช้เพื่อตรวจสอบการล็อค SQL Server ที่วางอยู่บนทรัพยากรบางประเภท SQLServer:ล็อค(ตารางที่ 1).

ตารางที่ 1. ตัวนับ SQL Server Profiler

ชื่อเคาน์เตอร์

คำอธิบาย

นับจำนวนการสแกนช่วงสำหรับดัชนีต่อวินาที

นับจำนวนการสแกนแบบเต็มที่เสร็จสิ้นในวินาทีสุดท้าย

การค้นหาดัชนี/วินาที

นับจำนวนการค้นหาดัชนีในวินาทีสุดท้าย

การเลื่อนระดับการล็อคตาราง/วินาที

นับจำนวนล็อคบนโต๊ะ

โต๊ะทำงานที่สร้าง/วินาที

นับจำนวนแผ่นงานที่สร้างขึ้นในวินาทีสุดท้าย

คำขอเป็นชุด/วินาที

นับจำนวนชุดคำสั่ง Transact-SQL ต่อวินาที จำนวนแพ็กเก็ตสูงหมายถึงปริมาณงานที่ดี

การรวบรวม SQL/วินาที

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

การคอมไพล์ SQL ใหม่/วินาที

นับจำนวนการคอมไพล์แบบสอบถามใหม่ต่อวินาที

SQLServer:วัตถุฐานข้อมูล ธุรกรรม/ตัวนับวินาที

นับจำนวนธุรกรรมที่เริ่มต้นในฐานข้อมูลในวินาทีสุดท้าย

SQLServer:วัตถุธุรกรรม ตัวนับเวลาดำเนินธุรกรรมที่ยาวที่สุด

คำนวณจำนวนวินาทีนับตั้งแต่เริ่มต้นธุรกรรมที่มีการใช้งานนานกว่าธุรกรรมปัจจุบันอื่นๆ ถ้าตัวนับนี้แสดงธุรกรรมที่ยาวมาก ใช้ขั้นตอนการจัดเก็บของระบบsys.dm_tran_active_transactions()เพื่อรับข้อมูลเกี่ยวกับธุรกรรมนี้

SQLServer:วัตถุธุรกรรม อัปเดตตัวนับอัตราส่วนความขัดแย้ง

นับเปอร์เซ็นต์ของธุรกรรมที่ใช้การแยกสแนปช็อตเพื่อแก้ไขข้อขัดแย้งในการอัปเดตข้อมูลในวินาทีสุดท้าย

เวลารอเฉลี่ย (มิลลิวินาที)

คำนวณเวลารอโดยเฉลี่ยสำหรับคำขอล็อกแต่ละรายการที่ทำให้เกิดการรอ

ล็อคคำขอ/วินาที

นับจำนวนการล็อกและการแปลงการล็อกต่อวินาที

ล็อคเวลารอ (มิลลิวินาที)

คำนวณการรอทั้งหมดสำหรับการล็อคในวินาทีสุดท้าย

นับจำนวนคำขอล็อคต่อวินาทีที่ทำให้เกิดการรอ

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

การใช้ตัวสร้างโปรไฟล์เซิร์ฟเวอร์ SQL

ยูทิลิตี้ SQL Server Profiler ใช้เพื่อวัดประสิทธิภาพของแต่ละแบบสอบถามและแบบสอบถามที่เป็นส่วนหนึ่งของขั้นตอนการจัดเก็บและชุดคำสั่ง Transact-SQL สามารถใช้เพื่อรวบรวมข้อมูลประสิทธิภาพ รวมถึงเวลาที่ใช้ในการดำเนินการคำสั่งแต่ละคำสั่ง เวลาในการบล็อกสำหรับการดำเนินการคำสั่ง และแผนการดำเนินการ

หากต้องการสร้างโปรไฟล์ใหม่ คุณต้องทำตามขั้นตอนต่อไปนี้:

  1. เปิดตัวสร้างโปรไฟล์เซิร์ฟเวอร์ SQL ( Microsoft SQL Server 2005 => เครื่องมือประสิทธิภาพ => ตัวสร้างโปรไฟล์เซิร์ฟเวอร์ SQL).
  2. ในเมนู ไฟล์เลือกทีม ร่องรอยใหม่.
  3. ในแผงโต้ตอบ เชื่อมต่อกับเซิร์ฟเวอร์เลือกเซิร์ฟเวอร์ที่ต้องการแล้วคลิกปุ่ม เชื่อมต่อ.
  4. ในแผงโต้ตอบ คุณสมบัติการติดตามคุณต้องตั้งชื่อโปรไฟล์ (ชื่อติดตาม)และในรายการ ใช้เทมเพลตเลือกหนึ่งในเทมเพลตที่มีอยู่หรือ ว่างเปล่าหากไม่ได้ใช้เทมเพลต
  5. หากต้องการบันทึกผลลัพธ์การทำโปรไฟล์ คุณต้องเลือกตัวเลือก บันทึกลงไฟล์เพื่อเขียนข้อมูลลงในไฟล์และระบุขนาดไฟล์สูงสุด (ค่าเริ่มต้นคือ 5 MB) คุณสามารถเปิดใช้งานตัวเลือกได้หรือไม่ เปิดใช้งานการโรลโอเวอร์ไฟล์เพื่อสร้างไฟล์ใหม่โดยอัตโนมัติเมื่อถึงขนาดโปรไฟล์ที่ระบุ ตัวเลือกที่สองคือการบันทึกข้อมูลลงในตารางฐานข้อมูล (บันทึกลงตาราง)- ตัวเลือก ตั้งค่าแถวสูงสุดช่วยให้คุณสามารถกำหนดจำนวนบันทึกสูงสุดได้
  6. หากต้องการตั้งเวลาสิ้นสุดสำหรับการติดตาม คุณสามารถใช้ตัวเลือกนี้ได้ เปิดใช้งานเวลาหยุดการติดตาม(รูปที่ 4)

หากต้องการตั้งค่าเหตุการณ์และคอลัมน์ข้อมูลสำหรับโปรไฟล์ คุณต้องทำตามขั้นตอนต่อไปนี้:

  1. ในแผงโต้ตอบ คุณสมบัติการติดตามไปที่แท็บ การเลือกกิจกรรม.
  2. เพิ่มหรือลบเหตุการณ์ออกจากโปรไฟล์โดยใช้ตารางคลาสเหตุการณ์
  3. หากต้องการรับรายการเหตุการณ์ที่มีอยู่ทั้งหมด ให้เปิดใช้งานตัวเลือก แสดงกิจกรรมทั้งหมด(รูปที่ 5)

ในตาราง ตารางที่ 2 แสดงรายการเหตุการณ์ SQL Server Profiler ที่ใช้บ่อยที่สุด เช่นเดียวกับตัวนับประสิทธิภาพ เหตุการณ์ SQL Server Profiler แบ่งออกเป็นหลายประเภท ซึ่งบางส่วนเป็นที่สนใจในวัตถุประสงค์ของเรา

ตารางที่ 2. เหตุการณ์ SQL Server Profiler

ชื่อกิจกรรม

คำอธิบาย

เหตุการณ์นี้เกิดขึ้นเมื่อการเรียกขั้นตอนระยะไกลเสร็จสิ้นการดำเนินการ

เหตุการณ์นี้จะเริ่มทำงานเมื่อกระบวนงานที่เก็บไว้ดำเนินการเสร็จสิ้น

SP: Stmt เสร็จสมบูรณ์

เหตุการณ์นี้เกิดขึ้นเมื่อเสร็จสิ้นการดำเนินการคำสั่ง Transact-SQL ภายในกระบวนงานที่เก็บไว้

SQL: Stmt เสร็จสมบูรณ์

เหตุการณ์นี้เกิดขึ้นเมื่อเสร็จสิ้นคำสั่ง Transact-SQL

SQL:แบทช์เสร็จสมบูรณ์

เหตุการณ์นี้เกิดขึ้นเมื่อเสร็จสิ้นชุดคำสั่ง Transact-SQL

เหตุการณ์นี้เกิดขึ้นเมื่อธุรกรรมได้รับการล็อคทรัพยากร

เหตุการณ์นี้เกิดขึ้นเมื่อธุรกรรมเผยแพร่ทรัพยากรที่ถูกล็อคไว้ก่อนหน้านี้

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

วิธีการตรวจสอบการอุดตัน

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

เพื่อพิจารณาว่ามีการบล็อกอยู่หรือไม่ คุณสามารถใช้วิธีการต่อไปนี้:

  • ใช้ยูทิลิตี้การตรวจสอบกิจกรรม SQL Server Management Studio ซึ่งแสดงข้อมูลเกี่ยวกับกระบวนการ การล็อคระดับกระบวนการและการล็อคระดับวัตถุ ในการเข้าถึงการตรวจสอบกิจกรรมใน SQL Server Management Studio คุณต้องเลือกรายการ การจัดการและในนั้น- การตรวจสอบกิจกรรมและดับเบิลคลิกที่องค์ประกอบนี้ การตรวจสอบกิจกรรมช่วยให้คุณดู:

อ็อบเจ็กต์ที่ถูกล็อกต่อกระบวนการ - ใช้ ID กระบวนการเพื่อกำหนดคำขอที่ทำให้เกิดการล็อก รหัสกระบวนการเซิร์ฟเวอร์ (SPID)บนหน้า ข้อมูลกระบวนการ,

กระบวนการที่ทำให้กระบวนการอื่นรอ - ใช้คอลัมน์เพื่อระบุกระบวนการดังกล่าว ถูกบล็อคโดยบนหน้า ข้อมูลกระบวนการ(รูปที่ 6);

  • ใช้ SQL Server Profiler เพื่อรับรายงานเกี่ยวกับกระบวนการที่ถูกบล็อก - รายการนี้จะแสดงข้อมูลเกี่ยวกับกระบวนการที่ยังคงถูกบล็อกนานกว่าเวลาที่กำหนด โอ

ในงานของเรา เรามักจะพบกับสถานการณ์ที่คำขอบางอย่างช้า และไม่มีปัญหาที่ชัดเจนปรากฏให้เห็นจากข้อความในคำขอ โดยปกติในกรณีนี้จำเป็นต้องตรวจสอบปัญหาในระดับลึกลงไป ตามกฎแล้ว จำเป็นต้องดูข้อความของแบบสอบถาม SQL และแผนของแบบสอบถาม และนี่คือจุดที่ SQLProfiler ช่วยเราได้

SQL Profiler คืออะไร และเหตุใดจึงจำเป็น

SQLProfiler เป็นโปรแกรมที่มาพร้อมกับ MS SQL Server และได้รับการออกแบบเพื่อดูเหตุการณ์ทั้งหมดที่เกิดขึ้นในเซิร์ฟเวอร์ SQL หรืออีกนัยหนึ่งคือเพื่อบันทึกการติดตาม เหตุใดโปรแกรมเมอร์ 1C จึงต้องการ SQLProfiler อย่างน้อยก็เพื่อรับข้อความค้นหาใน SQL และดูแผนของมัน แน่นอนว่าสามารถทำได้ด้วยความช่วยเหลือของนิตยสารเทคโนโลยี แต่ต้องใช้ทักษะบางอย่าง และแผนในวารสารทางเทคนิคไม่ได้สวยงามและอ่านง่ายนัก ใน Profiler คุณสามารถดูได้ไม่เพียงแต่ข้อความเท่านั้น แต่ยังรวมถึงแผนการดำเนินการค้นหาแบบกราฟิกด้วยซึ่งในความคิดของฉันสะดวกกว่ามาก คุณยังสามารถใช้ตัวสร้างโปรไฟล์เพื่อกำหนด: คำขอที่นานกว่าเวลาที่กำหนด คำขอไปยังตารางเฉพาะที่รอการล็อก การหมดเวลาของการล็อกตาย และอื่นๆ อีกมากมาย...

การวิเคราะห์แบบสอบถามด้วย SQL Profiler

ตัวสร้างโปรไฟล์มักใช้เพื่อวิเคราะห์การสืบค้น ตามกฎแล้วเราไม่จำเป็นต้องติดตามข้อความค้นหาทั้งหมด บ่อยครั้งที่เราต้องดูว่าข้อความค้นหาในภาษา 1C ถูกแปลเป็น SQL อย่างไร และดูแผนการดำเนินการ ตัวอย่างเช่น เราอาจจำเป็นต้องใช้สิ่งนี้เพื่อพิจารณาว่าเหตุใดแบบสอบถามจึงทำงานช้า หรือเราอาจเขียนแบบสอบถามขนาดใหญ่และต้องการให้แน่ใจว่าเนื้อหาแบบสอบถาม SQL ไม่มีการเชื่อมต่อกับแบบสอบถามย่อย หากต้องการรับคำขอในการติดตาม ให้ทำดังต่อไปนี้:

1. เรียกใช้ SQL Profiler Start - โปรแกรมทั้งหมด - Microsoft SQL Server 2008 R2 - เครื่องมือเพิ่มประสิทธิภาพ - SQLProfiler
2. สร้างไฟล์การติดตามใหม่ - สร้างการติดตาม (Ctrl+N)
3. ระบุเซิร์ฟเวอร์ DBMS ที่ฐานข้อมูลของเราตั้งอยู่ และคลิก “เชื่อมต่อ”

โดยปกติแล้ว ไม่มีอะไรป้องกันคุณจากการติดตามเซิร์ฟเวอร์ DBMS ที่อยู่ในคอมพิวเตอร์เครื่องอื่น 4. ในหน้าต่าง “คุณสมบัติการติดตาม” ที่ปรากฏขึ้น ให้ไปที่แท็บที่สอง “เลือกเหตุการณ์”

5. ตอนนี้เราจำเป็นต้องระบุเหตุการณ์และคุณสมบัติของเหตุการณ์เหล่านี้ที่เราต้องการเห็นในการติดตาม เราต้องการแบบสอบถามและแผนการสืบค้น ดังนั้นเราจึงจำเป็นต้องเปิดใช้งานเหตุการณ์ที่เหมาะสม หากต้องการแสดงรายการคุณสมบัติและเหตุการณ์ทั้งหมด ให้เปิดใช้งานแฟล็ก "แสดงคอลัมน์ทั้งหมด" และ "แสดงกิจกรรมทั้งหมด" ถัดไป คุณต้องเลือกเฉพาะเหตุการณ์ที่แสดงในภาพด้านล่าง กิจกรรมอื่นๆ ทั้งหมดจะต้องถูกปิดใช้งาน


คำอธิบายของเหตุการณ์: ShowplanStatisticsProfile - แผนการดำเนินการแบบสอบถามข้อความ
ShowplanXMLStatisticsProfile - แผนการดำเนินการแบบสอบถามแบบกราฟิก
RPC: เสร็จสมบูรณ์ - ขอข้อความหากดำเนินการตามขั้นตอน (หากดำเนินการคำขอ 1C พร้อมพารามิเตอร์)
SQL:BatchCompleted - ข้อความค้นหาหากถูกดำเนินการเป็นการสืบค้นปกติ (หากการสืบค้น 1C ถูกดำเนินการโดยไม่มีพารามิเตอร์)

6. ตอนนี้คุณต้องตั้งค่าตัวกรองสำหรับกิจกรรม หากยังไม่เสร็จสิ้น เราจะเห็นข้อความค้นหาสำหรับฐานข้อมูลทั้งหมดที่อยู่บนเซิร์ฟเวอร์ DBMS นี้ คลิกปุ่ม "ตัวกรองคอลัมน์" และระบุตัวกรองตามชื่อฐานข้อมูล

ตอนนี้เราจะเห็นเฉพาะคำขอติดตามไปยังฐานข้อมูล "TestBase_8_2" หากต้องการคุณสามารถตั้งค่าตัวกรองในฟิลด์อื่น ๆ สิ่งที่น่าสนใจที่สุดคือ: ระยะเวลา (ระยะเวลา), TextData (โดยปกติจะเป็นข้อความของคำขอ) และ RowCounts (จำนวนแถวที่ส่งคืนโดยคำขอ)

ตัวอย่างเช่น หากฉันต้องการรับคำขอทั้งหมดไปยังตาราง “_InfoRg4312” ที่ใช้เวลานานกว่า 3 วินาทีในฐานข้อมูล “TestBase_8_2” ฉันก็จะดำเนินการดังนี้:
ก) กรองตามฐานข้อมูล ตัวอย่างที่แสดงด้านบน
b) กรองตามระยะเวลาเป็นมิลลิวินาที

C) กรองตามข้อความคำขอ


ที่นี่เราระบุหน้ากาก หากคุณต้องการติดตามคำค้นหาที่เข้าถึงหลายตาราง ให้สร้างองค์ประกอบต่างๆ ในส่วน "คล้ายกับ" เงื่อนไขตัวกรองทั้งหมดทำงานร่วมกัน

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


จากซ้ายไปขวา: ยางลบ - ล้างหน้าต่างการติดตาม เริ่ม - เริ่มการติดตาม หยุดชั่วคราว - หยุดการติดตามชั่วคราว คลิกที่เริ่มดำเนินการติดตามต่อ หยุด - หยุดการติดตาม

8. หน้าต่างการติดตามประกอบด้วยสองส่วน ที่ด้านบนสุดคือเหตุการณ์และคุณสมบัติของเหตุการณ์ ส่วนด้านล่างจะแสดงข้อมูลที่แตกต่างกันขึ้นอยู่กับประเภทของเหตุการณ์ ในกรณีของเรา ข้อความคำขอหรือแผนจะแสดงที่นี่

9. มาดำเนินการคำขอในคอนโซลแบบสอบถาม 1C และดูว่าคำขอดังกล่าวสะท้อนให้เห็นอย่างไรในตัวสร้างโปรไฟล์


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

10. จากคุณสมบัติของเหตุการณ์ คุณสามารถเข้าใจได้: จำนวนวินาทีที่ดำเนินการแบบสอบถาม (ระยะเวลา) จำนวนการอ่านเชิงตรรกะ (การอ่าน) จำนวนแถวที่แบบสอบถามส่งคืนผลลัพธ์ (RowCounts) เป็นต้น ในกรณีของฉัน แบบสอบถามทำงานเป็นเวลา 2 มิลลิวินาที อ่านเชิงตรรกะ 4 ครั้งและส่งคืน 1 แถว

11. ถ้าเราขึ้นไปหนึ่งเหตุการณ์เราจะเห็นแผนการสืบค้นในรูปแบบกราฟิก
ดังที่เห็นได้จากแผน การค้นหาจะดำเนินการตามดัชนีตามราคา แม้ว่าแผนนี้จะไม่สามารถเรียกได้ว่าเป็นอุดมคติก็ตาม ดัชนีไม่ครอบคลุม รับฟิลด์โค้ดและชื่อโดยใช้ KeyLookup ซึ่งใช้เวลา 50%


เมื่อใช้เมนูบริบท แผนกราฟิกสามารถบันทึกเป็นไฟล์แยกต่างหากด้วยนามสกุล *.SQLPlan และเปิดในตัวสร้างโปรไฟล์บนคอมพิวเตอร์เครื่องอื่น หรือใช้โปรแกรม SQL Sentry Plan Explorer ขั้นสูงกว่า

12. หากเราไปไกลกว่านั้น เราจะเห็นแผนการสืบค้นเดียวกัน แต่อยู่ในรูปแบบข้อความ แผนนี้แสดงใน TZ, TsUP และเครื่องมือตรวจสอบประสิทธิภาพ 1C อื่น ๆ เพื่อวิเคราะห์ ฉันแนะนำให้ใช้โปรแกรมแก้ไขข้อความขั้นสูงที่มีแบ็คไลท์ เช่น Notepad++

13. ฉันใช้เมนู "บันทึกไฟล์เป็น" การติดตามทั้งหมดสามารถบันทึกในรูปแบบต่างๆ:
ก) ในรูปแบบของตัวสร้างโปรไฟล์เอง เช่น มีนามสกุล *.trc
b) ในรูปแบบ xml
c) คุณสามารถสร้างเทมเพลตจากการติดตามได้ ดูจุดถัดไป
d) คุณสามารถบันทึกการติดตามเป็นตารางฐานข้อมูลได้ วิธีที่สะดวกในการค้นหา เช่น คำขอที่ช้าที่สุดในการติดตามทั้งหมด หรือเลือกคำขอตามพารามิเตอร์บางตัว ไฟล์ - บันทึกเป็น - ตารางการติดตาม - เลือกเซิร์ฟเวอร์ DBMS และเชื่อมต่อกับมัน ถัดไปคุณจะต้องเลือกฐานข้อมูลบนเซิร์ฟเวอร์ที่ระบุและระบุชื่อของตารางที่จะบันทึกการติดตาม คุณสามารถเลือกตารางที่มีอยู่หรือเขียนชื่อใหม่ จากนั้นตารางจะถูกสร้างขึ้นโดยอัตโนมัติในฐานข้อมูลที่เลือก

ควรคำนึงว่า Duration ถูกเก็บไว้ในตารางในหน่วยล้านของวินาที และเมื่อแสดงผลลัพธ์ แนะนำให้แปลงค่าเป็นมิลลิวินาที คอลัมน์ RowNumber จะถูกเพิ่มลงในตารางด้วย ซึ่งจะแสดงหมายเลขของแถวนี้ในการติดตาม

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

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

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

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