1. บทนำ
1.1 อะไรคือ SQL Server กิจกรรมขยายเวลา?
SQL Server Extended Events เป็นระบบตรวจสอบประสิทธิภาพแบบเบาที่ช่วยให้ผู้ดูแลระบบและนักพัฒนาสามารถรวบรวมและวิเคราะห์ข้อมูลกิจกรรมเซิร์ฟเวอร์โดยละเอียด ระบบนี้ถูกรวมเข้ากับ SQL Server เครื่องมือฐานข้อมูลและให้ข้อมูลเชิงลึกที่ครอบคลุมทั้งในด้านการดำเนินงานปกติและสถานการณ์การแก้ไขปัญหา
1.2 เหตุใดจึงใช้เหตุการณ์ขยายสำหรับการตรวจสอบ?
SQL Server Extended Events นำเสนอข้อดีที่น่าสนใจหลายประการสำหรับการตรวจสอบและการแก้ไขปัญหาฐานข้อมูล:
- ผลกระทบต่อประสิทธิภาพขั้นต่ำด้วยสถาปัตยกรรมน้ำหนักเบา
- การควบคุมแบบละเอียดเกี่ยวกับการรวบรวมข้อมูลและการกรองเหตุการณ์
- การรวบรวมข้อมูลที่ปรับแต่งได้ตามความต้องการในการติดตามที่เฉพาะเจาะจง
- ความสามารถในการบันทึกเหตุการณ์จากแพ็คเกจหลายรายการพร้อมกัน
- ความสามารถในการกรองแบบยืดหยุ่นเพื่อเน้นการทำงานที่เกี่ยวข้อง
- รองรับการตรวจสอบระบบการผลิตโดยไม่ลดทอนประสบการณ์ผู้ใช้
- การติดตามเมตริกประสิทธิภาพที่ครอบคลุม
- ความสามารถในการวินิจฉัยขั้นสูงสำหรับการแก้ไขปัญหา
- การบำรุงรักษาเส้นทางการตรวจสอบเพื่อให้เป็นไปตามข้อกำหนด
- ตัวเลือกการวิเคราะห์ข้อมูลแบบเรียลไทม์และประวัติ
1.3 เหตุการณ์ขยายเทียบกับ SQL Server Profiler
ในขณะที่ SQL Server Profiler MS SQL Extended Events เป็นเครื่องมือตรวจสอบแบบดั้งเดิม จึงเป็นทางเลือกที่มีประสิทธิภาพมากกว่า Extended Events ใช้ทรัพยากรระบบน้อยลงและรองรับการปรับขนาดได้ดีกว่าสำหรับสภาพแวดล้อมการใช้งานจริง
SQL Server Profiler ไม่ได้รับการสนับสนุนอีกต่อไปแล้ว และ Microsoft ขอแนะนำให้ย้ายไปยัง Extended Events สำหรับกิจกรรมการตรวจสอบทั้งหมด
2. การทำความเข้าใจสถาปัตยกรรมเหตุการณ์ขยาย
2.1 ส่วนประกอบของเอนจิ้นเหตุการณ์ขยาย
เอ็นจิ้น Extended Events ประกอบด้วยส่วนประกอบหลักหลายส่วนที่ทำงานร่วมกันเพื่อบันทึก ประมวลผล และจัดเก็บข้อมูลเหตุการณ์ การทำความเข้าใจส่วนประกอบเหล่านี้จะช่วยให้คุณออกแบบโซลูชันการตรวจสอบที่มีประสิทธิภาพ
- ผู้จัดส่ง: ส่วนประกอบของตัวจัดการจะประสานงานการไหลของเหตุการณ์จากแหล่งที่มาของเหตุการณ์ไปยังเอ็นจินเหตุการณ์ที่ขยาย เมื่อเหตุการณ์เกิดขึ้น ตัวจัดการจะได้รับการแจ้งเตือนและส่งต่อไปยังเซสชันที่ใช้งานอยู่ซึ่งสมัครใช้งานประเภทเหตุการณ์นั้นโดยเฉพาะ
- บัฟเฟอร์: บัฟเฟอร์จะจัดเก็บข้อมูลเหตุการณ์ไว้ในหน่วยความจำชั่วคราวก่อนที่จะเขียนไปยังปลายทาง กลไกการบัฟเฟอร์นี้ช่วยเพิ่มประสิทธิภาพโดยลดการทำงานของ I/O ขนาดบัฟเฟอร์และการตั้งค่าการจัดการสามารถกำหนดค่าได้เพื่อให้เกิดความสมดุลระหว่างการใช้หน่วยความจำกับความต้องการในการเก็บรวบรวมข้อมูล
- เซสชั่น: เซสชันกำหนดขอบเขตของการตรวจสอบเหตุการณ์ โดยระบุว่าเหตุการณ์ใดที่จะบันทึก การกระทำใดที่จะดำเนินการ เงื่อนไขใดที่จะใช้ และจะจัดเก็บผลลัพธ์ไว้ที่ใด เซสชันสามารถสร้าง แก้ไข เริ่ม และหยุดได้อย่างอิสระ
- อินสแตนซ์เป้าหมาย: อินสแตนซ์เป้าหมายแสดงถึงปลายทางในการจัดเก็บข้อมูลเหตุการณ์ที่บันทึกไว้ แต่ละเซสชันสามารถเขียนไปยังเป้าหมายหนึ่งหรือหลายเป้าหมาย เช่น ไฟล์ บัฟเฟอร์แบบวงแหวน หรือตัวนับ เป้าหมายจะประมวลผลและเก็บรักษาข้อมูลเหตุการณ์ไว้เพื่อการวิเคราะห์ในภายหลัง
2.2 แพ็คเกจกิจกรรม
SQL Server Extended Events จัดระเบียบฟังก์ชันการทำงานเป็นแพ็กเกจ โดยแต่ละแพ็กเกจจะประกอบด้วยเหตุการณ์ การกระทำ ประเภท เงื่อนไข และเป้าหมายที่เกี่ยวข้อง แพ็กเกจทั่วไปได้แก่ sqlserver, sqlos และ package0
- แพ็คเกจ sqlserver มอบเหตุการณ์เฉพาะฐานข้อมูล เช่น แบบสอบถามและธุรกรรม
- แพ็คเกจ sqlos มีเหตุการณ์ของระบบปฏิบัติการ
- package0 นำเสนอฟังก์ชันวัตถุประสงค์ทั่วไปที่ใช้กับแพ็คเกจทั้งหมด
2.3 ประเภทเหตุการณ์และฟิลด์
เหตุการณ์แสดงถึงการเกิดขึ้นภายใน SQL Server ที่คุณต้องการตรวจสอบ แต่ละประเภทเหตุการณ์มีฟิลด์ที่กำหนดไว้ล่วงหน้าเพื่อเก็บข้อมูลที่เกี่ยวข้อง ตัวอย่างเช่น เหตุการณ์ sql_statement_completed ประกอบด้วยฟิลด์สำหรับระยะเวลา เวลา CPU การอ่าน และการเขียน
เหตุการณ์สามารถเป็นแบบซิงโครนัสหรืออะซิงโครนัสก็ได้ เหตุการณ์แบบซิงโครนัสจะทำงานระหว่างการดำเนินการ ในขณะที่เหตุการณ์แบบอะซิงโครนัสจะทำงานหลังจากการดำเนินการเสร็จสิ้น การทำความเข้าใจลักษณะของเหตุการณ์จะช่วยให้คุณเลือกเหตุการณ์ที่เหมาะสมกับความต้องการในการตรวจสอบของคุณได้
2.4 การกระทำ
แอ็กชันจะเพิ่มข้อมูลเพิ่มเติมให้กับเหตุการณ์ที่บันทึกไว้ เมื่อเหตุการณ์เกิดขึ้น แอ็กชันที่เกี่ยวข้องจะทำงานเพื่อรวบรวมบริบทเพิ่มเติม เช่น ข้อความ SQL รหัสเซสชัน หรือข้อมูลสแต็กการเรียกใช้
การดำเนินการทั่วไป ได้แก่ sql_text เพื่อบันทึกข้อความคำสั่ง SQL, database_name เพื่อระบุฐานข้อมูล และ client_hostname เพื่อติดตามเซิร์ฟเวอร์ต้นทาง การดำเนินการเหล่านี้ให้ข้อมูลบริบทที่สำคัญสำหรับการแก้ไขปัญหาและการวิเคราะห์
2.5 เป้าหมาย
เป้าหมายจะกำหนดวิธีการและสถานที่จัดเก็บข้อมูลเหตุการณ์ SQL Server Extended Events รองรับประเภทเป้าหมายหลายประเภท รวมถึง:
- event_file สำหรับจัดเก็บดิสก์ ซึ่งให้พื้นที่จัดเก็บถาวรสำหรับการวิเคราะห์โดยละเอียด
- ring_buffer สำหรับการเก็บข้อมูลตามหน่วยความจำ ช่วยให้เข้าถึงเหตุการณ์ล่าสุดได้อย่างรวดเร็วด้วยค่าใช้จ่ายน้อยที่สุด
- event_counter สำหรับการนับแบบง่าย
- ฮิสโทแกรมสำหรับการจัดกลุ่ม
- pair_matching เพื่อเชื่อมโยงเหตุการณ์ที่เกี่ยวข้อง
2.6 คำทำนาย (ตัวกรอง)
เพรดิเคตจะกรองเหตุการณ์ตามเงื่อนไขที่กำหนด ซึ่งจะช่วยลดปริมาณข้อมูลที่บันทึก คุณสามารถกรองตามชื่อฐานข้อมูล ชื่อแอปพลิเคชัน รหัสเซสชัน เกณฑ์ระยะเวลา หรือค่าฟิลด์เหตุการณ์ใดๆ ก็ได้
การใช้เพรดิเคตที่มีประสิทธิภาพจะช่วยลดผลกระทบต่อประสิทธิภาพการทำงานโดยจับเฉพาะเหตุการณ์ที่เกี่ยวข้องเท่านั้น เพรดิเคตที่ซับซ้อนจะรวมเงื่อนไขต่างๆ เข้าด้วยกันโดยใช้ตัวดำเนินการเชิงตรรกะเพื่อสร้างเกณฑ์การกรองที่แม่นยำ
3. สถานะเซสชันเหตุการณ์ที่ขยายและวงจรชีวิต
3.1 สถานะเซสชัน: สร้าง แก้ไข และลบ
เซสชันกิจกรรมขยายจะดำเนินไปตามสถานะที่แตกต่างกัน:
- คำสั่ง CREATE EVENT SESSION กำหนดเซสชันใหม่ แต่ไม่ได้เริ่มต้นเซสชันนั้น เซสชันจะอยู่ในสถานะหยุดทำงานจนกว่าจะถูกเปิดใช้งานอย่างชัดเจน
- คำสั่ง ALTER EVENT SESSION ใช้สำหรับแก้ไขการตั้งค่าเซสชันหรือเปลี่ยนสถานะของเซสชันระหว่างหยุดและเริ่มต้น
- คำสั่ง DROP EVENT SESSION จะลบคำจำกัดความเซสชันออกจากเซิร์ฟเวอร์ทั้งหมด
3.2 เนื้อหาและลักษณะของเซสชัน
แต่ละเซสชันประกอบด้วยชุดของเหตุการณ์ การกระทำ เป้าหมาย และเงื่อนไข เซสชันมีขอบเขตโดยนัยที่กำหนดขอบเขตและพฤติกรรมของมัน ตัวเลือกการกำหนดค่าจะควบคุมการจัดสรรหน่วยความจำ การเก็บรักษาเหตุการณ์ และความหน่วงในการส่งต่อ
คุณลักษณะของเซสชัน ได้แก่ การคงอยู่ของเซสชันหลังการรีสตาร์ทเซิร์ฟเวอร์ การจัดสรรหน่วยความจำสูงสุด และวิธีการจัดการกับปัญหาหน่วยความจำล้น การตั้งค่าเหล่านี้ส่งผลกระทบอย่างมากต่อพฤติกรรมของเซสชันและการใช้ทรัพยากร
3.3 ขอบเขตเซสชันและแพ็คเกจ
ขอบเขตของเซสชันกำหนดความสัมพันธ์ระหว่างเหตุการณ์ เป้าหมาย และแพ็กเกจ เหตุการณ์จากแพ็กเกจหนึ่งสามารถกระตุ้นการทำงานจากแพ็กเกจอื่นได้ ทำให้มีความยืดหยุ่นในกลยุทธ์การเก็บรวบรวมข้อมูล
ความสัมพันธ์ของแพ็กเกจช่วยให้คุณสามารถรวมเหตุการณ์จากหลายแหล่งภายในเซสชันเดียว ความสามารถนี้ช่วยให้สามารถติดตามสถานการณ์ได้อย่างครอบคลุมและครอบคลุม SQL Server ระบบย่อย
4. การสร้างเซสชันเหตุการณ์ขยายโดยใช้ SSMS
4.1 ข้อกำหนดเบื้องต้นและการตั้งค่า
ก่อนสร้าง SQL Server สำหรับเซสชันเหตุการณ์ที่ขยาย โปรดตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ที่เหมาะสม คุณต้องมีสิทธิ์ ALTER ANY EVENT SESSION สำหรับเซสชันที่กำหนดขอบเขตเซิร์ฟเวอร์ หรือสิทธิ์ CONTROL บนฐานข้อมูลสำหรับเซสชันที่กำหนดขอบเขตฐานข้อมูล
ยืนยันว่า SQL Server โปรแกรม Management Studio ได้รับการติดตั้งและเชื่อมต่อกับอินสแตนซ์เป้าหมายของคุณแล้ว โปรดศึกษาข้อกำหนดในการตรวจสอบและระบุว่าเหตุการณ์และเป้าหมายใดเหมาะสมกับความต้องการของคุณมากที่สุด
4.2 การเข้าถึงเหตุการณ์ที่ขยายใน Object Explorer
หากต้องการเข้าถึงอินเทอร์เฟซเหตุการณ์ขยายใน SSMS ให้ทำตามขั้นตอนเหล่านี้:
- จุดเปิด SQL Server Management Studio และเชื่อมต่อกับคุณ SQL Server ตัวอย่าง.
- ใน Object Explorer ให้ขยาย การจัดการ -> กิจกรรมขยาย.
- โหนดเหตุการณ์ขยายประกอบด้วย การประชุม และ แบบรวดเร็ว โฟลเดอร์สำหรับจัดการการกำหนดค่าการตรวจสอบของคุณ
4.3 สร้างเซสชันใหม่
ในการสร้างเซสชันใหม่:
-
- คลิกขวาที่ไอคอน การประชุม ภายใต้โฟลเดอร์ กิจกรรมขยาย.
- เลือก เซสชั่นใหม่ เพื่อเปิดกล่องโต้ตอบการกำหนดค่า เนื้อหาต่อไปนี้จะใช้วิธีนี้เพื่อสร้างเซสชันใหม่
หมายเหตุ: ตัวช่วยสร้างเซสชันใหม่ ยังพร้อมให้สัมผัสประสบการณ์ที่เป็นไกด์นำทางมากขึ้นอีกด้วย
4.3.1 การกำหนดค่าหน้าทั่วไป
เกี่ยวกับ ทั่วไป หน้ากำหนดค่าคุณสมบัติเซสชันพื้นฐาน:
- ป้อนชื่อเซสชันใน ชื่อเซสชัน ฟิลด์ ใช้ชื่อที่อธิบายวัตถุประสงค์ในการตรวจสอบ
- เลือกได้ตามต้องการ เริ่มเซสชันกิจกรรมเมื่อเซิร์ฟเวอร์เริ่มต้นทำงาน เพื่อเปิดใช้งานการเปิดใช้งานเซสชันอัตโนมัติ
- เทมเพลตเซสชันเริ่มต้นคือ ว่างเปล่าคุณสามารถใช้เทมเพลตอื่นได้หากใช้การกำหนดค่าที่กำหนดไว้ล่วงหน้า
4.3.2 การตั้งค่าหน้ากิจกรรม
การขอ อีเวนต์ หน้าช่วยให้คุณเลือกเหตุการณ์ที่จะตรวจสอบ:
- เลือก อีเวนต์ หน้าจากซ้าย เลือกหน้า แผงหน้าปัด.
- ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร คลังกิจกรรมเรียกดูกิจกรรมที่มีอยู่หรือใช้ฟังก์ชันการค้นหา
- กรองเหตุการณ์โดยการพิมพ์คำสำคัญเช่น “sql_statement_completed” เพื่อค้นหาเหตุการณ์ที่เกี่ยวข้อง
- เลือกเหตุการณ์ที่ต้องการ เช่น sql_statement_completed
- คลิกปุ่มลูกศรขวาเพื่อย้ายเหตุการณ์ไปที่ กิจกรรมที่เลือก รายการ.
4.3.3 การกำหนดค่าการจัดเก็บข้อมูล
การขอ การจัดเก็บข้อมูล หน้าจะกำหนดว่าข้อมูลเหตุการณ์จะถูกเก็บไว้ที่ไหน:
- เลือก การจัดเก็บข้อมูล หน้าจากซ้าย เลือกหน้า แผงหน้าปัด.
- ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร เป้าหมาย ในพื้นที่นั้น ให้เลือกประเภทเป้าหมายจากเมนูแบบเลื่อนลง
(1) ไฟล์เหตุการณ์เป้าหมาย
เป้าหมาย event_file จะบันทึกข้อมูลลงในไฟล์บนดิสก์ที่มีนามสกุล .xel:
- เลือก ไฟล์เหตุการณ์ จากเมนูแบบเลื่อนลงประเภทเป้าหมาย
- ระบุพาthของไฟล์ เช่น C:\temp\YourSession_Target.xel
- กำหนดค่าตัวเลือกการพลิกกลับเพื่อจัดการพื้นที่ดิสก์โดยการตั้งค่าขนาดไฟล์สูงสุดและจำนวนไฟล์
- โปรแกรมเป้าหมายจะบันทึกเหตุการณ์อย่างต่อเนื่องจนกว่าเซสชันจะหยุดลงหรือพื้นที่จัดเก็บข้อมูลเต็ม
(2) ring_buffer เป้าหมาย
เป้าหมาย ring_buffer จะจัดเก็บเหตุการณ์ไว้ในหน่วยความจำเพื่อให้เข้าถึงได้อย่างรวดเร็วโดยไม่ต้องอ่านเขียนลงดิสก์:
- เลือก ริงบัฟเฟอร์ เป็นประเภทเป้าหมาย
- กำหนดค่าการจัดสรรหน่วยความจำสูงสุดสำหรับบัฟเฟอร์
- เข้าใจว่าเหตุการณ์เก่าๆ จะถูกลบทิ้งเมื่อบัฟเฟอร์เต็ม ทำให้เหมาะสำหรับการตรวจสอบกิจกรรมล่าสุด
(3) เป้าหมายตัวนับเหตุการณ์
เป้าหมาย event_counter จะนับจำนวนครั้งของการเกิดเหตุการณ์โดยไม่เก็บข้อมูลรายละเอียดใดๆ ซึ่งจะช่วยลดภาระการทำงานให้น้อยที่สุดเมื่อคุณต้องการเพียงข้อมูลความถี่เท่านั้น
(4) ฮิสโตแกรมเป้าหมาย
ฮิสโตแกรมเป็นการจัดกลุ่มเหตุการณ์ตามค่าฟิลด์ที่กำหนด เพื่อสร้างสถิติการกระจายตัว ซึ่งมีประโยชน์สำหรับการระบุรูปแบบทั่วไปหรือค่าที่มีความถี่สูง
(5) การจับคู่เป้าหมาย
เป้าหมายการจับคู่คู่จะเชื่อมโยงเหตุการณ์ที่เกี่ยวข้องกัน เช่น การได้มาและการปลดล็อก ซึ่งช่วยให้สามารถวิเคราะห์การทำงานที่จับคู่กันและความสัมพันธ์ด้านเวลาของการทำงานเหล่านั้นได้
ไม่เคยตั้งค่าขั้นสูง
การขอ ค้นหาระดับสูง หน้าแสดงตัวเลือกการกำหนดค่าระดับเซสชัน:
- เลือก ค้นหาระดับสูง หน้าจากซ้าย เลือกหน้า แผงหน้าปัด.
- กำหนดค่า โหมดการเก็บรักษาเหตุการณ์ เพื่อควบคุมวิธีการจัดการเหตุการณ์ภายใต้แรงกดดันของหน่วยความจำ
- ชุด ความหน่วงเวลาในการจัดส่งสูงสุด เพื่อสร้างสมดุลระหว่างการประมวลผลแบบเรียลไทม์กับประสิทธิภาพของระบบ
- กำหนดค่า ขนาดหน่วยความจำสูงสุด และ ขนาดกิจกรรมสูงสุด ขึ้นอยู่กับข้อกำหนดการติดตามของคุณ
- เลือก โหมดพาร์ติชั่นหน่วยความจำ เพื่อเพิ่มประสิทธิภาพสำหรับสภาพแวดล้อม CPU เดียวหรือหลาย CPU
4.4 การกำหนดค่าตัวกรองเหตุการณ์ (คำทำนาย)
เพรดิเคตช่วยลดปริมาณข้อมูลโดยการกรองเหตุการณ์ตามเกณฑ์เฉพาะ การกำหนดค่าตัวกรอง:
- เกี่ยวกับ อีเวนต์ หน้า เลือกเหตุการณ์ที่คุณต้องการกรอง เช่น “sql_statement_completed”
- คลิก กำหนดค่า เพื่อเปิดกล่องโต้ตอบการกำหนดค่าเหตุการณ์
- เลือก ตัวกรอง (ภาคแสดง) แถบ
- ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร สนาม แบบดรอปดาวน์ เลือกฟิลด์ที่ต้องการกรอง เช่น ระยะเวลา
- เลือก a ผู้ประกอบการเช่น ">”
- เข้าสู่ตัวกรอง ความคุ้มค่าเช่น 1000000 (1 วินาที)
- เพิ่มเงื่อนไขเพิ่มเติมหากจำเป็น
4.5 การเลือกการดำเนินการและฟิลด์เหตุการณ์
สำหรับแต่ละเหตุการณ์ คุณสามารถเลือกข้อมูลที่จะรวบรวมได้:
- เกี่ยวกับ อีเวนต์ หน้าเลือกเหตุการณ์ที่คุณต้องการเลือกข้อมูล เช่น “sql_statement_completed”
- คลิก กำหนดค่า เพื่อเปิดกล่องโต้ตอบการกำหนดค่าเหตุการณ์
- เลือก ฟิลด์ทั่วโลก (การดำเนินการ) แถบ
- เลือกการดำเนินการเพื่อเพิ่มข้อมูลเพิ่มเติม เช่น ชื่อฐานข้อมูล หรือ ชื่อแอปพลิเคชันไคลเอ็นต์
- ตรวจสอบ ฟิลด์กิจกรรม ส่วนที่จะดูว่าฟิลด์ไหนถูกจับภาพโดยอัตโนมัติ
- ล้างช่องข้อมูลที่ไม่จำเป็นเพื่อลดปริมาณข้อมูล
4.6 การเริ่มต้นและการจัดการเซสชัน
หลังจากตั้งค่าเซสชันเสร็จแล้ว คุณสามารถเริ่มใช้งานและตรวจสอบการทำงานได้:
- คลิก OK เพื่อสร้างเซสชัน
- ใน Object Explorer ให้ขยาย การประชุม โฟลเดอร์เพื่อดูเซสชันใหม่ของคุณ
- คลิกขวาที่ชื่อเซสชันและเลือก เริ่มเซสชัน เพื่อเริ่มบันทึกเหตุการณ์
- หากต้องการดูข้อมูลสด ให้คลิกขวาที่เซสชันแล้วเลือก ดูข้อมูลสด.
- หยุดเซสชันโดยคลิกขวาและเลือก หยุดเซสชัน.
5. การสร้างเซสชันเหตุการณ์ขยายโดยใช้ T-SQL
5.1 ไวยากรณ์การสร้างเซสชันเหตุการณ์
การสร้างเซสชันเหตุการณ์แบบขยายด้วย T-SQL ช่วยให้ควบคุมได้อย่างแม่นยำและเปิดใช้งานสคริปต์สำหรับการปรับใช้แบบอัตโนมัติ คำสั่ง CREATE EVENT SESSION เป็นไปตามโครงสร้างไวยากรณ์เฉพาะ
ไวยากรณ์พื้นฐานประกอบด้วยชื่อเซสชัน ข้อความ ADD EVENT สำหรับแต่ละเหตุการณ์ ข้อความ ADD TARGET สำหรับปลายทางการจัดเก็บข้อมูล และข้อความ WITH ที่เป็นตัวเลือกสำหรับการกำหนดค่าเซสชัน
5.2 การสร้างเซสชันเหตุการณ์พื้นฐาน
เซสชันพื้นฐานจะตรวจสอบเหตุการณ์เฉพาะและเขียนผลลัพธ์ไปยังปลายทางที่กำหนด ต่อไปนี้คือวิธีการสร้างส่วนประกอบที่สำคัญ
5.2.1 การกำหนดชื่อเซสชันและตัวเลือก
เริ่มต้นด้วยการสร้างเซสชันโดยตั้งชื่อที่สื่อความหมาย:
CREATE EVENT SESSION [SampleSession] ON SERVER
คำสั่ง ON SERVER จะสร้างเซสชันที่จำกัดขอบเขตเซิร์ฟเวอร์ ซึ่งจะคงอยู่ตลอดการเปลี่ยนแปลงฐานข้อมูล สำหรับ Azure SQL Database ให้ใช้ ON DATABASE สำหรับเซสชันที่จำกัดขอบเขตฐานข้อมูล
5.2.2 การเพิ่มเหตุการณ์ด้วย ADD EVENT
เพิ่มเหตุการณ์ที่จะบันทึกโดยใช้คำสั่ง ADD EVENT:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
การดำเนินการนี้จะบันทึกคำสั่ง SQL ที่เสร็จสมบูรณ์ทั้งหมด คุณสามารถเพิ่มเหตุการณ์ได้หลายรายการโดยการเพิ่มคำสั่ง ADD EVENT เพิ่มเติม
5.2.3 การกำหนดค่าการดำเนินการเหตุการณ์
การดำเนินการจะรวบรวมบริบทเพิ่มเติมสำหรับแต่ละเหตุการณ์ เพิ่มการดำเนินการภายในวงเล็บหลังชื่อเหตุการณ์:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
ตัวอย่างนี้จับข้อความ SQL ชื่อฐานข้อมูล และชื่อผู้ใช้สำหรับคำสั่งที่เสร็จสมบูรณ์แต่ละคำสั่ง
5.2.4 การตั้งค่าคำทำนายเหตุการณ์ (WHERE Clause)
เพรดิเคตจะกรองเหตุการณ์เพื่อลดปริมาณข้อมูล ใช้คำสั่ง WHERE ภายในนิยามเหตุการณ์:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
ตัวกรองนี้สำหรับคำสั่งที่มีระยะเวลามากกว่า 5 วินาที (5,000,000 ไมโครวินาที)
5.3 การเพิ่มเป้าหมายของกิจกรรม
เป้าหมายจะกำหนดว่าข้อมูลเหตุการณ์จะถูกจัดเก็บไว้ที่ใดและจะถูกประมวลผลอย่างไร
5.3.1 ไวยากรณ์การเพิ่มเป้าหมาย
เพิ่มเป้าหมายโดยใช้คำสั่ง ADD TARGET หลังจากกำหนดเหตุการณ์ทั้งหมดแล้ว:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
คำนำหน้า package0 บ่งชี้ว่าเป้าหมายมาจากแพ็กเกจพื้นฐาน
5.3.2 การกำหนดค่าพารามิเตอร์เป้าหมาย
แต่ละประเภทเป้าหมายจะรับพารามิเตอร์เฉพาะ สำหรับ event_file ให้กำหนดค่า filename, max_file_size และ max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
การกำหนดค่านี้จะสร้างไฟล์ขนาดสูงสุด 50 MB ต่อไฟล์ และรักษาไฟล์ไว้ได้สูงสุด 5 ไฟล์เมื่อทำการโรลโอเวอร์
5.4 ตัวเลือกและการตั้งค่าเซสชัน
คำสั่ง WITH จะกำหนดค่าตัวเลือกในระดับเซสชันที่ควบคุมพฤติกรรมและการใช้ทรัพยากร
5.4.1 MAX_MEMORY และ EVENT_RETENTION_MODE
ควบคุมการจัดสรรหน่วยความจำและการจัดการเหตุการณ์ภายใต้แรงกดดัน:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
ตัวเลือก EVENT_RETENTION_MODE ประกอบด้วย ALLOW_SINGLE_EVENT_LOSS สำหรับการใช้หน่วยความจำน้อยที่สุด, ALLOW_MULTIPLE_EVENT_LOSS สำหรับการใช้หน่วยความจำในระดับปานกลาง และ NO_EVENT_LOSS สำหรับการเก็บรักษาข้อมูลอย่างสมบูรณ์โดยแลกกับผลกระทบต่อประสิทธิภาพการทำงาน
5.4.2 ความหน่วงเวลาสูงสุดในการจัดส่ง
กำหนดเวลาสูงสุดที่เหตุการณ์สามารถคงอยู่ในบัฟเฟอร์ก่อนที่จะถูกเขียนไปยังปลายทาง:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
ค่าที่ต่ำกว่าจะให้ข้อมูลแบบเรียลไทม์มากขึ้น แต่ก็ต้องแลกมาด้วยการเพิ่มขึ้นของจำนวนการดำเนินการ I/O
5.4.3 โหมดหน่วยความจำ_พาร์ติชั่น
เพิ่มประสิทธิภาพการแบ่งพาร์ติชันหน่วยความจำสำหรับการกำหนดค่าฮาร์ดแวร์ของคุณ:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
ตัวเลือกต่างๆ ได้แก่ NONE สำหรับพาร์ติชันเดียว PER_NODE สำหรับระบบ NUMA และ PER_CPU สำหรับการทำงานพร้อมกันสูงสุดบนระบบที่มี CPU หลายตัว
5.5 การเริ่มต้น การหยุด และการปรับเปลี่ยนช่วงเวลาการบำบัด
จัดการสถานะเซสชันและการกำหนดค่าผ่านคำสั่ง ALTER EVENT SESSION
5.5.1 เปลี่ยนแปลงเซสชันเหตุการณ์เพื่อเริ่ม/หยุด
เริ่มเซสชันหลังจากสร้างเสร็จแล้ว:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
หยุดเซสชันการทำงาน:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 การแก้ไขเซสชันที่มีอยู่
แก้ไขการกำหนดค่าเซสชันขณะหยุด เพิ่มเหตุการณ์:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
ลบเหตุการณ์:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 การยกเลิกเซสชันเหตุการณ์
ลบเซสชันทั้งหมดด้วย DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
จะต้องหยุดเซสชั่นก่อนจึงจะยกเลิกได้
6. การทำงานกับเป้าหมายของกิจกรรมโดยละเอียด
6.1 การกำหนดค่าเป้าหมายไฟล์เหตุการณ์
เป้าหมาย event_file ให้พื้นที่จัดเก็บข้อมูลเหตุการณ์แบบถาวร พร้อมตัวเลือกการกำหนดค่าที่ยืดหยุ่น
6.1.1 เส้นทางไฟล์และข้อตกลงการตั้งชื่อ
ระบุเส้นทางแบบเต็มและชื่อไฟล์สำหรับไฟล์เหตุการณ์:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
ใช้นามสกุลไฟล์ .xel สำหรับไฟล์บันทึกเหตุการณ์แบบขยาย ตรวจสอบให้แน่ใจว่า SQL Server บัญชีบริการมีสิทธิ์เขียนลงในไดเร็กทอรีที่ระบุ
6.1.2 การหมุนเวียนไฟล์และการจัดการขนาด
กำหนดค่าการหมุนเวียนไฟล์อัตโนมัติเพื่อจัดการพื้นที่ดิสก์:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
เมื่อไฟล์ถึง 50 MB SQL Server Extended Events จะสร้างไฟล์ใหม่โดยเพิ่มส่วนต่อท้าย เมื่อครบ 10 ไฟล์แล้ว ไฟล์ที่เก่าที่สุดจะถูกเขียนทับ
6.1.3 การอ่านข้อมูลไฟล์เหตุการณ์
สอบถามข้อมูลไฟล์เหตุการณ์โดยใช้ฟังก์ชัน sys.fn_xe_file_target_read_file:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
รูปแบบไวด์การ์ดจะอ่านไฟล์ทั้งหมดที่เกี่ยวข้องกับเซสชัน
6.2 การใช้งานเป้าหมาย ring_buffer
เป้าหมาย ring_buffer จะจัดเก็บเหตุการณ์ไว้ในหน่วยความจำเพื่อให้เข้าถึงกิจกรรมล่าสุดได้อย่างรวดเร็ว
6.2.1 การจัดเก็บเหตุการณ์ตามหน่วยความจำ
กำหนดค่า ring_buffer สำหรับที่เก็บข้อมูลตามหน่วยความจำ:
ADD TARGET package0.ring_buffer
กิจกรรมจะสามารถเข้าถึงได้เฉพาะในขณะที่เซสชันกำลังดำเนินการอยู่เท่านั้น SQL Server กำลังทำงานอยู่ ข้อมูลจะสูญหายเมื่อเซสชันหยุดลงหรือเซิร์ฟเวอร์รีสตาร์ท
6.2.2 ขนาดบัฟเฟอร์และการกำหนดค่า
ควบคุมการจัดสรรหน่วยความจำสำหรับบัฟเฟอร์วงแหวน:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
ระบุหน่วยความจำเป็นหน่วย KB เมื่อบัฟเฟอร์เต็ม เหตุการณ์เก่าจะถูกลบออกโดยใช้วิธี FIFO
6.2.3 การสอบถามข้อมูลบัฟเฟอร์ริง
เข้าถึงข้อมูลบัฟเฟอร์วงแหวนผ่าน DMV:
SELECT
CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer';
ตัวแปร target_data ประกอบด้วยข้อมูลเหตุการณ์ในรูปแบบ XML
6.3 ตัวนับเหตุการณ์เป้าหมาย
เป้าหมาย event_counter ให้การนับอย่างง่ายโดยไม่ต้องจัดเก็บข้อมูลโดยละเอียด:
ADD TARGET package0.event_counter
เป้าหมายนี้ติดตามความถี่ของเหตุการณ์โดยใช้ทรัพยากรน้อยที่สุด เหมาะสำหรับการตรวจสอบปริมาณมากที่ต้องการนับจำนวนเหตุการณ์เท่านั้น
6.4 ฮิสโตแกรมเป้าหมาย
ฮิสโตแกรมนี้จัดกลุ่มเหตุการณ์ตามค่าของฟิลด์:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
การกำหนดค่านี้จะสร้างฮิสโทแกรมที่แสดงการกระจายของเหตุการณ์ต่างๆ ทั่วทั้งฐานข้อมูล
6.5 pair_matching Target
เป้าหมายการจับคู่คู่จะเชื่อมโยงเหตุการณ์ที่เกี่ยวข้องกัน เช่น การได้มาซึ่งการล็อกกับการปลดล็อก:
ADD TARGET package0.pair_matching(
SET begin_event=N'sqlserver.lock_acquired',
end_event=N'sqlserver.lock_released',
begin_matching_columns=N'resource_type',
end_matching_columns=N'resource_type'
)
ซึ่งช่วยให้สามารถวิเคราะห์การดำเนินการแบบจับคู่และระยะเวลาได้
7. การดูและวิเคราะห์ข้อมูลเหตุการณ์ขยาย
7.1 การใช้ SSMS เพื่อดูข้อมูลสด
SQL Server Management Studio มอบอินเทอร์เฟซกราฟิกสำหรับการดูข้อมูลเหตุการณ์ขยายแบบเรียลไทม์:
- ใน Object Explorer ให้ขยาย การจัดการ -> กิจกรรมขยาย -> การประชุม.
- คลิกขวาที่เซสชันที่ใช้งานอยู่ของคุณ
- เลือก ดูข้อมูลสด เพื่อเปิดดูข้อมูลสด
- เหตุการณ์จะปรากฏในกริดเมื่อเกิดขึ้น
- คลิกที่เหตุการณ์แต่ละเหตุการณ์เพื่อดูค่าฟิลด์โดยละเอียดในบานหน้าต่างรายละเอียด
- ใช้ตัวกรองแถบเครื่องมือเพื่อเน้นเฉพาะประเภทเหตุการณ์หรือค่าฟิลด์
7.2 การสอบถามข้อมูลไฟล์เหตุการณ์ด้วย T-SQL
แบบสอบถาม T-SQL ช่วยให้วิเคราะห์ข้อมูลเหตุการณ์ที่บันทึกไว้ได้อย่างยืดหยุ่น
7.2.1 ฟังก์ชัน sys.fn_xe_file_target_read_file
อ่านข้อมูลไฟล์เหตุการณ์โดยใช้ฟังก์ชันระบบนี้:
SELECT
object_name AS EventName,
CAST(event_data AS XML) AS EventData,
file_name,
file_offset,
timestamp_utc
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
ฟังก์ชันนี้จะส่งคืนหนึ่งแถวต่อเหตุการณ์โดยมีรายละเอียดที่จัดรูปแบบเป็น XML
7.2.2 การแยกวิเคราะห์ข้อมูลเหตุการณ์ XML
แยกค่าเฉพาะจากข้อมูลเหตุการณ์ XML:
SELECT
event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
SELECT CAST(event_data AS XML) AS event_data
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
) AS EventData;
นิพจน์ XQuery จะดึงค่าฟิลด์แต่ละค่าจากโครงสร้าง XML
7.2.3 การแปลงข้อมูลเหตุการณ์เป็นตาราง
สร้างชุดผลลัพธ์ที่มีโครงสร้างจากข้อมูลเหตุการณ์:
WITH EventData AS (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
)
SELECT
EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;
7.3 การสอบถามข้อมูลบัฟเฟอร์ริง
ดึงข้อมูลจากเป้าหมาย ring_buffer:
SELECT
n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);
7.4 มุมมองระบบสำหรับเหตุการณ์ที่ขยาย
SQL Server มี DMV และมุมมองแค็ตตาล็อกหลายรายการสำหรับการจัดการและติดตามเซสชันเหตุการณ์ขยาย
7.4.1 sys.server_event_sessions
ดูคำจำกัดความเซสชันที่เก็บไว้ในเซิร์ฟเวอร์:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
มุมมองแคตตาล็อกนี้แสดงรายละเอียดการกำหนดค่าสำหรับเซสชันที่กำหนดทั้งหมด
7.4.2 sys.dm_xe_sessions
ดูเซสชันที่ใช้งานอยู่ในปัจจุบัน:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
DMV นี้ให้ข้อมูลรันไทม์เกี่ยวกับเซสชัน Extended Event ที่ใช้งานอยู่
7.4.3 sys.dm_xe_session_targets
ดูเป้าหมายที่เกี่ยวข้องกับเซสชันที่ใช้งานอยู่:
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
7.4.4 DMV ที่เป็นประโยชน์อื่นๆ
มุมมองเพิ่มเติมให้ข้อมูลเซสชันที่ครอบคลุม:
- sys.dm_xe_session_events: แสดงรายการเหตุการณ์ในเซสชันที่ใช้งานอยู่
- sys.dm_xe_session_event_actions: แสดงการดำเนินการที่กำหนดค่าไว้สำหรับเหตุการณ์เซสชัน
- sys.dm_xe_objects: รวบรวมเหตุการณ์ การกระทำ และเป้าหมายทั้งหมดที่มีอยู่
- sys.dm_xe_object_columns: ฟิลด์รายละเอียดที่มีให้สำหรับประเภทเหตุการณ์แต่ละประเภท
- sys.dm_xe_packages: แสดงรายการแพ็กเกจ Extended Event ทั้งหมด
8. กรณีการใช้งานจริงและตัวอย่าง
8.1 การตรวจสอบการดำเนินการคำสั่ง SQL
การติดตามการดำเนินการคำสั่ง SQL ช่วยให้เข้าใจรูปแบบแบบสอบถามและลักษณะประสิทธิภาพ
8.1.1 การติดตามเหตุการณ์ sql_statement_completed
สร้างเซสชันเพื่อตรวจสอบคำสั่ง SQL ที่เสร็จสมบูรณ์:
CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.client_hostname,
sqlserver.username
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryMonitoring.xel',
max_file_size=(100),
max_rollover_files=(5)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
STARTUP_STATE=OFF
);
ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;
8.1.2 การกรองตามฐานข้อมูลหรือแอปพลิเคชัน
มุ่งเน้นไปที่ฐานข้อมูลหรือแอปพลิเคชันเฉพาะโดยใช้คำทำนาย:
CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.client_app_name)
WHERE (
[sqlserver].[database_name] = N'YourDatabase'
AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\AppMonitoring.xel'
);
8.2 การจับข้อมูลเดดล็อก
การวิเคราะห์เดดล็อกต้องรวบรวมข้อมูลโดยละเอียดเกี่ยวกับธุรกรรมที่ขัดแย้ง
8.2.1 เหตุการณ์ xml_deadlock_report
สร้างเซสชันเพื่อจับภาพกราฟเดดล็อกที่สมบูรณ์:
CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);
ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;
8.2.2 การวิเคราะห์กราฟเดดล็อก
สกัดและวิเคราะห์ข้อมูลเดดล็อก:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
EventXML.query('.') AS DeadlockGraph
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\Deadlocks*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';
กราฟเดดล็อกประกอบด้วยรายละเอียดเกี่ยวกับกระบวนการ ทรัพยากร และการเลือกเหยื่อ
8.3 การติดตามปัญหาประสิทธิภาพการทำงานของแบบสอบถาม
ระบุแบบสอบถามที่ทำงานได้ไม่ดีโดยใช้เมตริกระยะเวลาและการใช้ทรัพยากร
8.3.1 การตรวจจับแบบสอบถามแบบรันยาว
จับภาพแบบสอบถามที่เกินเกณฑ์ระยะเวลาที่กำหนด:
CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.plan_handle
)
WHERE ([duration] > 5000000) -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\LongQueries.xel'
);
8.3.2 การวิเคราะห์แผนการดำเนินการ
จับภาพแผนการสอบถามเพื่อการวิเคราะห์ประสิทธิภาพ:
CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
ACTION(
sqlserver.sql_text,
sqlserver.database_name
)
WHERE ([duration] > 10000000) -- 10 seconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryPlans.xel',
max_file_size=(200)
);
8.4 การตรวจสอบเหตุการณ์การเข้าสู่ระบบและความปลอดภัย
ติดตามกิจกรรมการตรวจสอบสิทธิ์และการอนุญาตเพื่อการตรวจสอบความปลอดภัย
8.4.1 การติดตามการเข้าสู่ระบบสำเร็จและล้มเหลว
ตรวจสอบความพยายามเข้าสู่ระบบทั้งที่สำเร็จและล้มเหลว:
CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_hostname,
sqlserver.client_app_name
)
),
ADD EVENT sqlserver.login_failed(
ACTION(
sqlserver.client_hostname
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);
8.4.2 การเปลี่ยนแปลงการอนุญาต
ติดตามการแก้ไขการอนุญาตด้านความปลอดภัย:
CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SecurityAudit.xel'
);
8.5 การตรวจสอบระดับฐานข้อมูล
ตรวจสอบการดำเนินงานเฉพาะฐานข้อมูลและการเปลี่ยนแปลงสถานะ
8.5.1 เหตุการณ์การสำรองและกู้คืน
ติดตามการสำรองข้อมูลและคืนค่าการดำเนินการ:
CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\BackupRestore.xel'
);
8.5.2 การเปลี่ยนแปลงสถานะฐานข้อมูล
ตรวจสอบการเปลี่ยนแปลงสถานะฐานข้อมูล:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 การตรวจจับปัญหาการทุจริตและความสมบูรณ์ของฐานข้อมูล
SQL Server Extended Events มอบความสามารถในการเตือนล่วงหน้าสำหรับการตรวจจับความเสียหายของฐานข้อมูลที่อาจเกิดขึ้น ช่วยให้สามารถดำเนินการเชิงรุกได้ก่อนที่ปัญหาจะลุกลาม
8.6.1 เหตุการณ์สำคัญสำหรับการตรวจจับการทุจริต
เหตุการณ์หลายอย่างบ่งชี้ถึงการทุจริตที่อาจเกิดขึ้นหรือปัญหา I/O
8.6.1.1 error_reported เหตุการณ์สำหรับข้อผิดพลาดร้ายแรง
เหตุการณ์ error_reported จะจับภาพทั้งหมด SQL Server ข้อผิดพลาด รวมถึงหมายเลขข้อผิดพลาดที่เกี่ยวข้องกับการทุจริต:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
ข้อผิดพลาด 823 ระบุข้อผิดพลาด I/O, 824 ส่งสัญญาณข้อผิดพลาดความสอดคล้องทางตรรกะ และ 825 รายงานความสำเร็จในการอ่านซ้ำซึ่งอาจบ่งชี้ถึงปัญหาฮาร์ดแวร์
8.6.1.2 เหตุการณ์ database_suspect_data_page
เหตุการณ์นี้เกิดขึ้นเมื่อ SQL Server พบกับหน้าผู้ต้องสงสัย:
ADD EVENT sqlserver.database_suspect_data_page
หน้าที่น่าสงสัยระบุถึงการทุจริตที่อาจเกิดขึ้นและจะถูกบันทึกไว้ในตาราง msdb.dbo.suspect_pages
8.6.1.3 เหตุการณ์ errorlog_write
บันทึกรายการที่ถูกเขียนลงใน SQL Server บันทึกข้อผิดพลาด:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 การสร้างเซสชันการตรวจสอบการทุจริต
จัดตั้งเซสชันที่ครอบคลุมสำหรับการตรวจจับและการติดตามการทุจริต
8.6.2.1 การกรองหมายเลขข้อผิดพลาดการทุจริต (823, 824, 825)
จัดประชุมเฉพาะเจาะจงโดยมุ่งเน้นไปที่ตัวชี้วัดการทุจริต:
CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
WHERE (
[error_number] IN (823, 824, 825, 832, 855, 856)
OR [severity] >= (20)
)
),
ADD EVENT sqlserver.database_suspect_data_page(
ACTION(
sqlserver.database_name
)
)
8.6.2.2 การกำหนดระดับความรุนแรงที่เหมาะสม
รวมถึงข้อผิดพลาดร้ายแรงที่อาจบ่งชี้ถึงการทุจริต:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
ระดับความรุนแรง 20 ขึ้นไปบ่งชี้ถึงปัญหาในระดับระบบที่มักเกี่ยวข้องกับการทุจริต
8.6.2.3 การกำหนดค่าไฟล์เป้าหมายเหตุการณ์สำหรับการแจ้งเตือน
จัดเก็บเหตุการณ์การทุจริตเพื่อวิเคราะห์และแจ้งเตือน:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
max_file_size=(50),
max_rollover_files=(10)
)
WITH (
STARTUP_STATE=ON,
MAX_DISPATCH_LATENCY=5 SECONDS
);
ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;
8.6.3 การวิเคราะห์ข้อมูลเหตุการณ์การทุจริต
สกัดและตีความเหตุการณ์ที่เกี่ยวข้องกับการทุจริตจากข้อมูลที่จับได้
8.6.3.1 การระบุหน้าผู้ต้องสงสัย
แบบสอบถามสำหรับเหตุการณ์ database_suspect_data_page:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 การแยกรายละเอียดข้อผิดพลาดและบริบท
วิเคราะห์เหตุการณ์ที่รายงานข้อผิดพลาดสำหรับรูปแบบการทุจริต:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);
8.6.4 การบูรณาการกับ DBCC CHECKDB
ใช้ข้อมูลเหตุการณ์ขยายเพื่อเป็นแนวทาง DBCC CHECKDB การดำเนินการ
8.6.4.1 การเรียกใช้ DBCC CHECKDB ตามเหตุการณ์
เมื่อตรวจพบเหตุการณ์ทุจริต ให้ดำเนินการ DBCC CHECKDB เพื่อตรวจสอบอย่างครอบคลุม:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Extended Events จะให้คำเตือนล่วงหน้า ในขณะที่ DBCC CHECKDB ดำเนินการตรวจสอบอย่างละเอียด
8.6.4.2 เวิร์กโฟลว์การตอบสนองต่อการทุจริตอัตโนมัติ
นำการตอบสนองอัตโนมัติมาใช้โดยการตรวจสอบไฟล์เหตุการณ์:
- กำหนดค่า SQL Server งานตัวแทนจะต้องสอบถามไฟล์เหตุการณ์การตรวจสอบการทุจริตเป็นระยะๆ
- เมื่อพบเหตุการณ์ทุจริต ให้ดำเนินการ DBCC CHECKDB บนฐานข้อมูลที่ได้รับผลกระทบ
- ส่งการแจ้งเตือนทางอีเมลถึง DBA พร้อมรายละเอียดเหตุการณ์และผลลัพธ์ DBCC CHECKDB
- บันทึกผลการค้นพบลงในตารางการตรวจสอบแบบรวมศูนย์เพื่อวิเคราะห์แนวโน้ม
8.6.4.3 การสร้างสมดุลระหว่างการตรวจสอบเชิงรุกกับประสิทธิภาพ
Extended Events มอบการตรวจจับการทุจริตที่มีค่าใช้จ่ายต่ำเมื่อเทียบกับการดำเนินการ DBCC CHECKDB บ่อยครั้ง:
- เรียกใช้ Extended Events อย่างต่อเนื่องเพื่อตรวจจับการทุจริตแบบเรียลไทม์
- ดำเนินการ DBCC CHECKDB เฉพาะเมื่อตัวบ่งชี้การทุจริตปรากฏขึ้น
- กำหนดเวลา DBCC CHECKDB เป็นประจำในช่วงเวลาการบำรุงรักษา
- ใช้เหตุการณ์ที่ขยายเพื่อระบุฐานข้อมูลที่ต้องการความสนใจทันที
แนวทางนี้ให้การตรวจสอบเชิงรุกโดยไม่ต้องใช้ทรัพยากรจำนวนมากในการตรวจสอบความสมบูรณ์อย่างต่อเนื่อง
8.6.4.4 ซ่อมแซมฐานข้อมูลที่เสียหาย
หากตรวจพบความเสียหายในฐานข้อมูล คุณสามารถใช้ DBCC CHECKDB เพื่อแก้ไขความเสียหายเล็กน้อยได้ หากไม่สำเร็จ คุณสามารถลองใช้บริการจากผู้ให้บริการภายนอก เครื่องมือการกู้คืนฐานข้อมูล SQLซึ่งโดยทั่วไปจะให้อัตราการกู้คืนที่สูงกว่าในฐานข้อมูลที่เสียหายอย่างรุนแรง
9. เหตุการณ์ขยายขอบเขตเซิร์ฟเวอร์เทียบกับขอบเขตฐานข้อมูล
9.1 เซสชันเหตุการณ์ที่กำหนดขอบเขตเซิร์ฟเวอร์
เซสชันที่มีขอบเขตเซิร์ฟเวอร์จะตรวจสอบกิจกรรมทั่วทั้ง SQL Server อินสแตนซ์ เซสชันเหล่านี้ถูกสร้างขึ้นโดยใช้คำสั่ง ON SERVER และคงอยู่ในฐานข้อมูลหลัก
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
เซสชันที่มีขอบเขตเซิร์ฟเวอร์จะบันทึกเหตุการณ์จากฐานข้อมูลทั้งหมดและเหมาะสำหรับการตรวจสอบในระดับอินสแตนซ์
9.2 เซสชันเหตุการณ์ที่กำหนดขอบเขตฐานข้อมูล (ฐานข้อมูล Azure SQL)
เซสชันที่มีขอบเขตฐานข้อมูลจะจำกัดอยู่ที่ฐานข้อมูลเดียวและส่วนใหญ่จะใช้ในฐานข้อมูล Azure SQL ที่การเข้าถึงระดับเซิร์ฟเวอร์ถูกจำกัด:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
ใน Azure SQL Database ไฟล์เหตุการณ์จะถูกเก็บไว้ใน Azure Blob Storage แทนที่จะอยู่ในระบบไฟล์ภายในเครื่อง
9.3 ความแตกต่างและกรณีการใช้งาน
เซสชันที่กำหนดขอบเขตเซิร์ฟเวอร์ให้การตรวจสอบที่ครอบคลุมในทุกฐานข้อมูล แต่จำเป็นต้องมีการอนุญาตที่สูงกว่า เซสชันที่กำหนดขอบเขตฐานข้อมูลให้การแยกส่วนและเหมาะสมสำหรับการตรวจสอบแอปพลิเคชันหรือผู้เช่าเฉพาะราย
ใช้เซสชันที่จำกัดขอบเขตเซิร์ฟเวอร์สำหรับการตรวจสอบแบบรวมศูนย์ การแก้ไขปัญหาประสิทธิภาพการทำงานข้ามฐานข้อมูล และการตรวจสอบความปลอดภัย ใช้เซสชันที่จำกัดขอบเขตฐานข้อมูลใน Azure SQL Database, สภาพแวดล้อมแบบหลายผู้เช่า หรือเมื่อมอบหมายความรับผิดชอบในการตรวจสอบให้กับทีมแอปพลิเคชัน
10. เหตุการณ์ขยายในฐานข้อมูล Azure SQL
10.1 ข้อควรพิจารณาเฉพาะ Azure
Azure SQL Database นำ Extended Events มาใช้โดยมีความแตกต่างบางประการจากแบบภายในองค์กร SQL Serverเซสชันจะมีขอบเขตของฐานข้อมูลตามค่าเริ่มต้น และการจัดเก็บไฟล์เหตุการณ์จะใช้ Azure Blob Storage แทนระบบไฟล์ภายในเครื่อง
การตรวจสอบสิทธิ์ในการเข้าถึง Azure Blob Storage จำเป็นต้องใช้โทเค็น SAS ที่กำหนดค่าไว้ภายในไฟล์เป้าหมายของเหตุการณ์ สตริงการเชื่อมต่อจะอ้างอิงถึงบัญชีเก็บข้อมูลและคอนเทนเนอร์ที่จัดเก็บไฟล์เหตุการณ์ไว้
10.2 เป้าหมายที่ใช้งานได้ใน Azure
Azure SQL Database รองรับเป้าหมาย Extended Event ต่อไปนี้:
- event_file: เขียนไปยัง Azure Blob Storage
- ring_buffer: ที่เก็บข้อมูลบนหน่วยความจำที่มีพฤติกรรมแบบเดียวกับภายในองค์กร
- event_counter: นับจำนวนเหตุการณ์ที่เกิดขึ้น
เป้าหมาย event_file จำเป็นต้องกำหนดค่าด้วยข้อมูลรับรอง Azure Blob Storage:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 การสร้างเซสชันที่มีขอบเขตฐานข้อมูล
สร้างเซสชันในฐานข้อมูล Azure SQL:
CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);
ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;
เซสชันที่มีขอบเขตของฐานข้อมูลใน Azure จะทำงานคล้ายกับเซสชันที่มีขอบเขตของเซิร์ฟเวอร์ภายในองค์กร แต่มีขอบเขตจำกัดเฉพาะฐานข้อมูลปัจจุบัน
11. แนวทางปฏิบัติที่ดีที่สุดและการเพิ่มประสิทธิภาพการทำงาน
11.1 การลดผลกระทบต่อประสิทธิภาพให้น้อยที่สุด
เหตุการณ์ที่ขยายออกไปได้รับการออกแบบมาเพื่อลดค่าใช้จ่าย แต่การกำหนดค่าที่ไม่เหมาะสมอาจส่งผลกระทบต่อประสิทธิภาพการทำงาน โปรดปฏิบัติตามแนวทางเหล่านี้:
- ใช้คำทำนายเฉพาะเพื่อกรองเหตุการณ์แทนที่จะบันทึกทุกอย่าง
- หลีกเลี่ยงการรวบรวมการดำเนินการที่ไม่จำเป็นซึ่งจะเพิ่มภาระการประมวลผล
- เลือกเป้าหมายที่เหมาะสมโดยพิจารณาจากความต้องการในการเก็บรักษาข้อมูล
- ตั้งค่าขนาดบัฟเฟอร์ที่เหมาะสมและความล่าช้าในการจัดส่ง
- ตรวจสอบการใช้ทรัพยากรเซสชันโดยใช้ DMV
11.2 การเลือกเหตุการณ์และตัวกรองที่ถูกต้อง
เลือกเหตุการณ์ที่ตรงกับวัตถุประสงค์การตรวจสอบของคุณโดยตรง หลีกเลี่ยงเหตุการณ์ที่เกิดบ่อยเว้นแต่จำเป็น และใช้เงื่อนไขเพื่อลดปริมาณข้อมูลเสมอ
ตัวอย่างเช่น แทนที่จะจับเหตุการณ์ sql_statement_completed ทั้งหมด ให้กรองตามฐานข้อมูลเฉพาะหรือเกณฑ์ระยะเวลา:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 หลักเกณฑ์การคัดเลือกเป้าหมาย
เลือกเป้าหมายตามความต้องการในการวิเคราะห์ของคุณ:
- ใช้ event_file เพื่อวิเคราะห์ประวัติโดยละเอียดและการเก็บรักษาในระยะยาว
- ใช้ ring_buffer สำหรับการตรวจสอบแบบเรียลไทม์โดยมีผลกระทบต่อ I/O น้อยที่สุด
- ใช้ event_counter เมื่อมีเพียงความถี่เท่านั้นที่มีความสำคัญ
- ใช้ฮิสโทแกรมเพื่อการวิเคราะห์การกระจาย
- ใช้ pair_matching เพื่อวิเคราะห์เหตุการณ์ที่สัมพันธ์กัน
11.4 คำแนะนำการกำหนดค่าเซสชัน
กำหนดค่าเซสชันด้วยขีดจำกัดทรัพยากรที่เหมาะสม:
- ตั้งค่า MAX_MEMORY ตามปริมาณเหตุการณ์ที่คาดหวังและทรัพยากรเซิร์ฟเวอร์
- ใช้ ALLOW_SINGLE_EVENT_LOSS เพื่อลดภาระการทำงานให้น้อยที่สุดในสถานการณ์ส่วนใหญ่
- ตั้งค่า MAX_DISPATCH_LATENCY เพื่อสร้างสมดุลระหว่างความต้องการแบบเรียลไทม์กับประสิทธิภาพ
- ใช้การแบ่งพาร์ติชันหน่วยความจำ PER_CPU บนระบบมัลติโปรเซสเซอร์
- หลีกเลี่ยงการตั้งค่า STARTUP_STATE=ON เว้นแต่จำเป็นต้องมีการตรวจสอบอย่างต่อเนื่อง
11.5 การจัดการขนาดไฟล์เหตุการณ์และการเก็บรักษา
กำหนดค่าการหมุนเวียนไฟล์เพื่อป้องกันการใช้งานดิสก์ที่ไม่จำกัด:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
การกำหนดค่านี้จะรักษาข้อมูลเหตุการณ์ไว้ประมาณ 1 GB (10 ไฟล์ × 100 MB) สามารถปรับได้ตามข้อกำหนดการเก็บรักษาและพื้นที่เก็บข้อมูลที่มีอยู่ของคุณ
12. การแก้ไขปัญหาเหตุการณ์ที่ขยายออกไป
12.1 ปัญหาทั่วไปและแนวทางแก้ไข
ปัญหาที่พบบ่อยใน Extended Events ได้แก่ เซสชันไม่สามารถบันทึกข้อมูลได้ ประสิทธิภาพการทำงานลดลง ปัญหาเกี่ยวกับไฟล์เป้าหมาย และพฤติกรรมของเซสชันที่ไม่คาดฝัน
12.2 เซสชันไม่จับข้อมูล
หากเซสชันไม่ได้บันทึกเหตุการณ์ที่คาดหวัง:
- ตรวจสอบว่าเซสชันเริ่มต้นแล้วโดยใช้ sys.dm_xe_sessions
- ตรวจสอบคำทำนายเพื่อให้แน่ใจว่าไม่ได้กรองเหตุการณ์ทั้งหมดออกไป
- ตรวจสอบว่าเหตุการณ์ทำงานถูกต้องหรือไม่ โดยการลบตัวกรองออกชั่วคราว
- ตรวจสอบสิทธิ์ในการอนุญาตเพื่อให้แน่ใจว่าคุณสามารถเข้าถึงข้อมูลเซสชันได้
- ตรวจสอบว่าการกำหนดค่าเป้าหมายถูกต้องและสามารถเขียนได้
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 การเสื่อมประสิทธิภาพ
หากเหตุการณ์ที่ขยายทำให้เกิดปัญหาด้านประสิทธิภาพ:
- เพิ่มคำทำนายเพื่อลดปริมาณเหตุการณ์
- ลบขั้นตอนที่ไม่จำเป็นซึ่งรวบรวมข้อมูลเพิ่มเติมออกไป
- เพิ่ม MAX_DISPATCH_LATENCY เพื่อลดความถี่ในการเขียน
- เปลี่ยน EVENT_RETENTION_MODE เป็น ALLOW_SINGLE_EVENT_LOSS
- พิจารณาใช้ ring_buffer แทน event_file สำหรับเหตุการณ์ความถี่สูง
12.4 ปัญหาเป้าหมายไฟล์
ปัญหาเกี่ยวกับไฟล์เป้าหมายมักเกี่ยวข้องกับสิทธิ์การเข้าถึงหรือพื้นที่ดิสก์:
- ตรวจสอบ SQL Server บัญชีบริการมีสิทธิ์ในการเขียนไปยังไดเร็กทอรีเป้าหมาย
- ตรวจสอบให้แน่ใจว่ามีเนื้อที่ว่างบนดิสก์เพียงพอ
- ตรวจสอบว่าเส้นทางที่ระบุมีอยู่และสามารถเข้าถึงได้
- ตรวจสอบการกำหนดค่าการหมุนเวียนไฟล์หากไฟล์ไม่ได้หมุนเวียนตามที่คาดหวัง
12.5 การดีบักด้วยมุมมองระบบ
ใช้ DMV เพื่อวินิจฉัยปัญหาเหตุการณ์ขยาย:
-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;
-- View session targets and their status
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;
13. หัวข้อขั้นสูง
13.1 การสร้างแพ็คเกจกิจกรรมที่กำหนดเอง
ผู้ใช้ขั้นสูงสามารถสร้างแพ็คเกจกิจกรรมที่กำหนดเองเพื่อขยาย SQL Server ฟังก์ชันการทำงานของเหตุการณ์ที่ขยายออกไป จำเป็นต้องมีการพัฒนา C++ และการบูรณาการกับ SQL Server กรอบการทำงานด้านความสามารถในการขยาย
แพ็คเกจที่กำหนดเองช่วยให้สามารถตรวจสอบเหตุการณ์ที่เฉพาะเจาะจงของแอปพลิเคชันหรือรวมระบบการตรวจสอบของบุคคลที่สามกับโครงสร้างพื้นฐานเหตุการณ์ขยาย
13.2 เทมเพลตเซสชันกิจกรรม
SSMS มีเทมเพลตในตัวสำหรับสถานการณ์การตรวจสอบทั่วไป เข้าถึงเทมเพลตเมื่อสร้างเซสชันใหม่ผ่านตัวช่วยสร้าง:
- ในกล่องโต้ตอบเซสชันใหม่ ให้คลิก แบบ หล่นลง.
- เลือกจากเทมเพลตที่มี เช่น การติดตามรายละเอียดแบบสอบถาม หรือสุขภาพระบบ
- ปรับเปลี่ยนเทมเพลตให้เหมาะกับความต้องการเฉพาะของคุณ
13.3 การบูรณาการกับโซลูชันการตรวจสอบ
ข้อมูลเหตุการณ์ที่ขยายออกไปสามารถป้อนให้กับโซลูชันการตรวจสอบองค์กรได้:
- ส่งออกข้อมูลเหตุการณ์ไปยังระบบบันทึกข้อมูลแบบรวมศูนย์
- แยกไฟล์เหตุการณ์และโหลดข้อมูลลงในฐานข้อมูลการตรวจสอบ
- สร้างแดชบอร์ดแบบกำหนดเองโดยใช้เครื่องมือ BI
- การแจ้งเตือนทริกเกอร์ตามรูปแบบเหตุการณ์เฉพาะ
- ความสัมพันธ์ SQL Server เหตุการณ์ที่มีเมตริกแอปพลิเคชันและโครงสร้างพื้นฐาน
13.4 ระบบอัตโนมัติและการกำหนดตารางเวลา
การจัดการเหตุการณ์ขยายแบบอัตโนมัติโดยใช้ SQL Server ตัวแทน:
- สร้างงานเพื่อเริ่ม/หยุดเซสชันในช่วงเวลาที่กำหนด
- กำหนดเวลาการวิเคราะห์และการรายงานไฟล์เหตุการณ์
- ดำเนินการตามนโยบายการเก็บรักษาข้อมูลโดยเก็บถาวรหรือลบไฟล์เหตุการณ์เก่า
- ตอบสนองอัตโนมัติต่อเงื่อนไขที่ตรวจพบ เช่น ปัญหาประสิทธิภาพการทำงานหรือเหตุการณ์ด้านความปลอดภัย
14. การย้ายถิ่นฐานจาก SQL Server Profiler
14.1 SQL Server การแมปเหตุการณ์โปรไฟเลอร์ไปยังเหตุการณ์ขยาย
Microsoft จัดทำแผนที่ระหว่าง SQL Server Profiler เหตุการณ์และเหตุการณ์ขยาย การแมปทั่วไปประกอบด้วย:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:BatchStarting -> sql_batch_starting
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starting
- กราฟเดดล็อก -> xml_deadlock_report
- เข้าสู่ระบบการตรวจสอบ -> เข้าสู่ระบบ
- ตรวจสอบการออกจากระบบ -> ออกจากระบบ
14.2 การแปลงคำจำกัดความของร่องรอย
แปลงที่มีอยู่ SQL Server โปรไฟเลอร์ติดตามเซสชันเหตุการณ์ที่ขยายโดยการระบุเหตุการณ์ที่เทียบเท่าและกำหนดค่าเพรดิเคตที่เหมาะสม SSMS ให้ความช่วยเหลือสำหรับการแปลงทั่วไป
ตรวจสอบตัวกรองการติดตามและแปลงเป็นเพรดิเคตเหตุการณ์ที่ขยาย การดำเนินการในเหตุการณ์ที่ขยายจะแทนที่คอลัมน์การติดตามจาก SQL Server Profiler
14.3 การเปรียบเทียบประสิทธิภาพ
เหตุการณ์ที่ขยายออกไปนั้นให้ประสิทธิภาพที่ดีกว่าอย่างเห็นได้ชัด SQL Server โปรไฟเลอร์ การศึกษาเปรียบเทียบประสิทธิภาพแสดงให้เห็นว่า Extended Events ใช้รอบ CPU น้อยลงและมีผลกระทบต่อปริมาณงานธุรกรรมน้อยลง
เหตุการณ์ที่ขยายใช้การประมวลผลแบบอะซิงโครนัสและการจัดการหน่วยความจำที่ปรับให้เหมาะสมในขณะที่ SQL Server โปรไฟเลอร์จะอาศัยการจับเหตุการณ์แบบซิงโครนัสที่บล็อกจนกว่าการประมวลผลการติดตามจะเสร็จสิ้น
15 ข้อสรุป
15.1 สรุปแนวคิดหลัก
SQL Server Extended Events มอบกรอบงานอันทรงพลังและน้ำหนักเบาสำหรับการตรวจสอบและการแก้ไขปัญหา SQL Serverโครงสร้างสถาปัตยกรรมประกอบด้วยเหตุการณ์ การกระทำ เงื่อนไข เป้าหมาย และเซสชัน ซึ่งทำงานร่วมกันเพื่อบันทึกกิจกรรมของเซิร์ฟเวอร์ที่เกี่ยวข้อง
สามารถสร้างเซสชันได้โดยใช้ SSMS หรือ T-SQL ซึ่งให้ความยืดหยุ่นทั้งในการแก้ไขปัญหาเฉพาะหน้าและการตรวจสอบอัตโนมัติ ประเภทเป้าหมายหลายประเภทสนับสนุนวิธีการวิเคราะห์ที่แตกต่างกัน ตั้งแต่การตรวจสอบแบบเรียลไทม์ด้วย ring_buffer ไปจนถึงการวิเคราะห์ข้อมูลในอดีตด้วย event_file
Extended Events มอบประสิทธิภาพที่เหนือกว่าเมื่อเทียบกับ SQL Server Profiler พร้อมมอบความสามารถในการตรวจสอบที่ครอบคลุมยิ่งขึ้น ระบบนี้ช่วยให้ผู้ดูแลระบบและนักพัฒนาฐานข้อมูลสามารถวินิจฉัยปัญหา เพิ่มประสิทธิภาพการทำงาน ยกระดับความปลอดภัย และรักษาการปฏิบัติตามข้อกำหนด
15.2 ขั้นตอนต่อไปและทรัพยากรเพิ่มเติม
เพื่อพัฒนาคุณอย่างต่อเนื่อง SQL Server ความเชี่ยวชาญของ XEvents:
- นำ Extended Events ไปใช้ในสภาพแวดล้อมการทดสอบเพื่อรับประสบการณ์จริง
- ตรวจสอบเอกสารของ Microsoft เพื่อดูแค็ตตาล็อกเหตุการณ์ที่สมบูรณ์และการอ้างอิงไวยากรณ์โดยละเอียด
- ร่วมเป็นผู้ขายกับเราที่ SQL Server ฟอรัมชุมชนเพื่อเรียนรู้จากประสบการณ์ของผู้อื่น
- สำรวจสถานการณ์ขั้นสูงเช่นแพ็คเกจที่กำหนดเองและการบูรณาการกับแพลตฟอร์มการตรวจสอบ
- พัฒนาคลังเทมเพลตเซสชันสำหรับสถานการณ์การตรวจสอบทั่วไป
16 ส่วนคำถามที่พบบ่อย
ถาม: คืออะไร SQL Server กิจกรรมขยายเวลา?
A: SQL Server Extended Events เป็นระบบตรวจสอบประสิทธิภาพน้ำหนักเบาที่รวมเข้ากับ SQL Server เครื่องมือฐานข้อมูลที่รวบรวมข้อมูลรายละเอียดเกี่ยวกับการทำงานของเซิร์ฟเวอร์ด้วยค่าใช้จ่ายขั้นต่ำ
ถาม: กิจกรรมที่ขยายออกไปแตกต่างจาก SQL Server โปรไฟเลอร์?
A: เหตุการณ์ที่ขยายออกไปนั้นมีประสิทธิภาพที่ดีกว่า ค่าใช้จ่ายที่ต่ำกว่า และการกำหนดค่าที่ยืดหยุ่นกว่า SQL Server Profiler SQL Server Profiler ไม่รองรับอีกต่อไปแล้ว และ Microsoft แนะนำให้ใช้ Extended Events สำหรับงานการตรวจสอบทั้งหมด
ถาม: เหตุการณ์ที่ขยายออกไปสามารถส่งผลกระทบได้หรือไม่ SQL Server ประสิทธิภาพ?
A: เมื่อกำหนดค่าอย่างถูกต้องด้วยเงื่อนไขและขีดจำกัดทรัพยากรที่เหมาะสม เหตุการณ์ที่ขยายจะมีผลกระทบต่อประสิทธิภาพเพียงเล็กน้อย การกำหนดค่าที่ไม่ดีโดยไม่มีการกรองอาจส่งผลกระทบต่อประสิทธิภาพ
ถาม: ต้องมีสิทธิ์อนุญาตอะไรบ้างในการสร้างเซสชันกิจกรรมขยาย?
A: คุณต้องมีสิทธิ์อนุญาต ALTER ANY EVENT SESSION สำหรับเซสชันที่อยู่ในขอบเขตของเซิร์ฟเวอร์ หรือมีสิทธิ์อนุญาต CONTROL บนฐานข้อมูลสำหรับเซสชันที่อยู่ในขอบเขตของฐานข้อมูล
ถาม: ฉันจะดูข้อมูลเหตุการณ์ขยายได้อย่างไร
ก. การใช้ SQL Server โปรแกรมดูข้อมูลแบบเรียลไทม์ของ Management Studio, สามารถสอบถามไฟล์เหตุการณ์ด้วย sys.fn_xe_file_target_read_file หรือสอบถามข้อมูลบัฟเฟอร์วงแหวนผ่าน DMV ได้
ถาม: Extended Events สามารถตรวจจับความเสียหายของฐานข้อมูลได้หรือไม่
A: ใช่ Extended Events สามารถจับข้อผิดพลาดที่เกี่ยวข้องกับการทุจริต (823, 824, 825) และเหตุการณ์หน้าที่น่าสงสัยได้ โดยให้คำเตือนล่วงหน้าสำหรับปัญหาการทุจริตที่อาจเกิดขึ้น
ถาม: ความแตกต่างระหว่างเหตุการณ์ การกระทำ และคำทำนายคืออะไร?
A: เหตุการณ์ คือสิ่งที่เกิดขึ้นที่คุณต้องการติดตาม การกระทำจะเพิ่มข้อมูลเพิ่มเติมให้กับเหตุการณ์ที่บันทึกไว้ เงื่อนไขจะกรองเหตุการณ์ตามเงื่อนไขเพื่อลดปริมาณข้อมูล
ถาม: ฉันจะตรวจสอบแบบสอบถามจากแอปพลิเคชันหรือฐานข้อมูลเฉพาะได้อย่างไร
ก: ใช้คำทำนายในการกำหนดค่าเหตุการณ์ของคุณเพื่อกรองตาม database_name, client_app_name หรือฟิลด์ที่เกี่ยวข้องอื่นๆ
ถาม: ฉันควรใช้เป้าหมายใดสำหรับ Extended Events?
A: ใช้ event_file สำหรับการจัดเก็บถาวรและการวิเคราะห์ประวัติ, ring_buffer สำหรับการตรวจสอบแบบเรียลไทม์ด้วยโอเวอร์เฮดต่ำ, event_counter สำหรับการติดตามความถี่แบบง่าย และฮิสโทแกรมสำหรับการวิเคราะห์การกระจาย
ถาม: มี Extended Events ให้ใช้ใน Azure SQL Database หรือไม่
ตอบ: ใช่ Azure SQL Database รองรับ Extended Events ที่อยู่ในขอบเขตฐานข้อมูลโดยมีไฟล์เหตุการณ์ที่เก็บไว้ใน Azure Blob Storage
ถาม: ฉันจะแก้ไขปัญหาเซสชันเหตุการณ์ขยายที่ไม่ได้บันทึกข้อมูลได้อย่างไร
A: ตรวจสอบว่าเซสชันเริ่มต้นแล้ว ตรวจสอบว่าเงื่อนไขไม่ได้กรองเหตุการณ์ทั้งหมด ยืนยันการกำหนดค่าเป้าหมาย และตรวจสอบสิทธิ์โดยใช้ DMV ของระบบ
ถาม: ฉันสามารถจัดการ Extended Events โดยอัตโนมัติได้หรือไม่
A: ใช่ครับ ใช้ SQL Server หน้าที่ของเอเจนต์ ได้แก่ การเริ่มต้น/หยุดเซสชัน การวิเคราะห์ไฟล์เหตุการณ์ การบังคับใช้นโยบายการเก็บรักษาข้อมูล และการตอบสนองต่อเงื่อนไขที่ตรวจพบ
อ้างอิง
- เริ่มต้นใช้งานอย่างรวดเร็ว: กิจกรรมเพิ่มเติมใน SQL Server – ไมโครซอฟท์ เลิร์น
- ภาพรวมเหตุการณ์ที่ขยาย - Microsoft Learn
- SQL Server เซสชันกิจกรรมขยายเวลา – Microsoft Learn
- เป้าหมายสำหรับกิจกรรมที่ขยายเวลาใน SQL Server – ไมโครซอฟท์ เลิร์น
- SQL Server เครื่องมือขยายเหตุการณ์ – Microsoft Learn
- SQL Server โปรไฟเลอร์: คู่มือฉบับสมบูรณ์
- DBCC CHECKDB: คู่มือฉบับสมบูรณ์
- DataNumen SQL Recovery
เกี่ยวกับผู้เขียน
หยวน เซิง เป็นผู้ดูแลฐานข้อมูลอาวุโส (DBA) ที่มีประสบการณ์มากกว่า 10 ปีใน SQL Server สภาพแวดล้อมและการจัดการฐานข้อมูลองค์กร เขาประสบความสำเร็จในการแก้ไขปัญหาการกู้คืนฐานข้อมูลหลายร้อยกรณีในองค์กรด้านบริการทางการเงิน การดูแลสุขภาพ และการผลิต
หยวนมีความเชี่ยวชาญด้าน SQL Server การกู้คืนฐานข้อมูล โซลูชันที่มีความพร้อมใช้งานสูงรวมถึงการเพิ่มประสิทธิภาพการทำงาน ประสบการณ์ภาคปฏิบัติที่กว้างขวางของเขารวมถึงการจัดการฐานข้อมูลขนาดหลายเทราไบต์ การนำไปใช้ เสมอในกลุ่มความพร้อมใช้งานและพัฒนาแผนกลยุทธ์การสำรองข้อมูลและกู้คืนข้อมูลอัตโนมัติสำหรับระบบธุรกิจที่มีความสำคัญอย่างยิ่ง
ด้วยความเชี่ยวชาญทางเทคนิคและแนวทางปฏิบัติ Yuan มุ่งเน้นที่การสร้างคู่มือที่ครอบคลุมซึ่งจะช่วยให้ผู้ดูแลระบบฐานข้อมูลและผู้เชี่ยวชาญด้านไอทีแก้ไขปัญหาที่ซับซ้อน SQL Server ท้าทายอย่างมีประสิทธิภาพ เขาคอยติดตามข่าวสารล่าสุดอยู่เสมอ SQL Server การเปิดตัวและเทคโนโลยีฐานข้อมูลที่พัฒนาอย่างต่อเนื่องของ Microsoft ทดสอบสถานการณ์การกู้คืนเป็นประจำเพื่อให้แน่ใจว่าคำแนะนำของเขาสะท้อนถึงแนวทางปฏิบัติที่ดีที่สุดในโลกแห่งความเป็นจริง
มีคำถามเกี่ยวกับ SQL Server การกู้คืนหรือต้องการคำแนะนำในการแก้ไขปัญหาฐานข้อมูลเพิ่มเติมหรือไม่? หยวนยินดีต้อนรับ ข้อเสนอแนะและข้อเสนอแนะ เพื่อปรับปรุงทรัพยากรทางเทคนิคเหล่านี้

















