สํารวจสถานการณ์ประสิทธิภาพการทํางาน
หากต้องการตัดสินใจว่าจะใช้เครื่องมือและความสามารถด้านประสิทธิภาพอย่างไร สิ่งสําคัญคือต้องดูประสิทธิภาพสําหรับ Azure SQL ผ่านสถานการณ์ต่าง ๆ
ทําความเข้าใจสถานการณ์ประสิทธิภาพการทํางานทั่วไป
เทคนิคทั่วไปสําหรับการแก้ไขปัญหาประสิทธิภาพการทํางาน SQL Server คือตรวจสอบว่าปัญหาด้านประสิทธิภาพการทํางาน เรียกใช้ (CPU สูง) หรือ รอ (รออยู่บนทรัพยากร) หรือไม่ แผนภาพต่อไปนี้แสดงแผนผังการตัดสินใจเพื่อตรวจสอบว่าปัญหาด้านประสิทธิภาพการทํางาน SQL Server กําลังทํางานหรือรออยู่หรือไม่ และวิธีการใช้เครื่องมือประสิทธิภาพในการกําหนดสาเหตุและโซลูชัน
ก่อนอื่น ดูการใช้ทรัพยากรโดยรวม สําหรับการปรับใช้ SQL Server มาตรฐาน คุณอาจใช้เครื่องมือ เช่น Performance Monitor ใน Windows หรือ top ใน Linux สําหรับ Azure SQL คุณสามารถใช้วิธีการต่อไปนี้:
พอร์ทัล Azure/PowerShell/alerts
Azure Monitor มีเมตริกแบบรวมเพื่อดูการใช้ทรัพยากรสําหรับ Azure SQL คุณยังสามารถตั้งค่าการแจ้งเตือนเพื่อค้นหาเงื่อนไขการใช้ทรัพยากรได้ด้วย
sys.dm_db_resource_statsสําหรับฐานข้อมูล Azure SQL คุณสามารถดู DMV นี้เพื่อดูการใช้ทรัพยากร CPU หน่วยความจํา และ I/O สําหรับการปรับใช้ฐานข้อมูล DMV นี้ใช้สแนปช็อตของข้อมูลนี้ทุก ๆ 15 วินาที
sys.server_resource_statsDMV นี้จะทํางานเหมือนกับ
sys.dm_db_resource_statsแต่ใช้เพื่อดูการใช้ทรัพยากรสําหรับอินสแตนซ์ที่จัดการแล้วของ SQL สําหรับ CPU หน่วยความจํา และ I/O DMV นี้ยังใช้สแนปช็อตทุก 15 วินาทีsys.dm_user_db_resource_governanceสําหรับ Azure SQL Database DMV นี้จะส่งกลับการกําหนดค่าจริงและการตั้งค่าความจุที่ใช้โดยกลไกการกํากับดูแลทรัพยากรในฐานข้อมูลปัจจุบันหรือพูลแบบยืดหยุ่น
sys.dm_instance_resource_governanceสําหรับอินสแตนซ์ที่จัดการแล้วของ Azure SQL DMV นี้จะส่งกลับข้อมูลที่คล้ายกันเช่น
sys.dm_user_db_resource_governanceแต่สําหรับอินสแตนซ์ที่จัดการแล้วของ SQL ปัจจุบัน
กำลัง เรียก ใช้
ถ้าคุณได้พิจารณาแล้วว่าปัญหาเกิดจากการใช้งาน CPU สูง การดําเนินการนี้จะเรียกว่าสถานการณ์ที่กําลังทํางานอยู่ สถานการณ์ที่กําลังทํางานอยู่อาจเกี่ยวข้องกับคิวรีที่ใช้ทรัพยากรผ่านการคอมไพล์หรือการดําเนินการ ใช้เครื่องมือต่อไปนี้เพื่อการวิเคราะห์เพิ่มเติม:
การจัดเก็บคิวรี
ใช้รายงานทรัพยากรที่ใช้มากที่สุดใน SSMS มุมมองแค็ตตาล็อกที่เก็บคิวรี หรือข้อมูลเชิงลึกด้านประสิทธิภาพการทํางานคิวรีในพอร์ทัล Azure (ฐานข้อมูล SQL Azure เท่านั้น) เพื่อค้นหาคิวรีที่ใช้ทรัพยากร CPU ส่วนใหญ่
sys.dm_exec_requestsใช้ DMV นี้ใน Azure SQL เพื่อรับสแนปช็อตของสถานะของคิวรีที่ใช้งานอยู่ ค้นหาคิวรีที่มีสถานะของ
RUNNABLEและชนิดการรอSOS_SCHEDULER_YIELDเพื่อดูว่าคุณมีความจุ CPU เพียงพอหรือไม่sys.dm_exec_query_statsDMV นี้สามารถใช้ได้เช่นเดียวกับ Query Store เพื่อค้นหาคิวรีที่ใช้ทรัพยากรสูงสุด ซึ่งจะพร้อมใช้งานสําหรับแผนคิวรีที่แคชเท่านั้น ในขณะที่ Query Store มีบันทึกประสิทธิภาพในอดีตแบบถาวร DMV นี้ยังช่วยให้คุณสามารถค้นหาแผนคิวรีสําหรับคิวรีที่แคชไว้ได้
sys.dm_exec_procedure_statsDMV นี้มีข้อมูลเหมือนกับ
sys.dm_exec_query_statsยกเว้นข้อมูลประสิทธิภาพการทํางานสามารถดูได้ที่ระดับกระบวนงานที่เก็บไว้หลังจากที่คุณกําหนดว่าคิวรีใดที่ใช้ทรัพยากรมากที่สุด คุณอาจต้องตรวจสอบว่าคุณมีทรัพยากร CPU เพียงพอสําหรับปริมาณงานของคุณหรือไม่ คุณอาจดีบักแผนคิวรีด้วยเครื่องมือ เช่น การทําโปรไฟล์คิวรีแบบน้ําหนักเบา คําสั่ง SET, Query Store หรือการติดตามเหตุการณ์แบบขยายเวลา
กำลังรอ
ถ้าปัญหาของคุณดูเหมือนจะไม่เป็นการใช้ทรัพยากร CPU สูง อาจเป็นได้ว่าปัญหาด้านประสิทธิภาพการทํางานเกี่ยวข้องกับการรอทรัพยากร สถานการณ์ที่เกี่ยวข้องกับการรอบนทรัพยากรได้แก่:
- การรอ I/O
- การรอล็อก
- การรอสลัก
- ขีดจํากัดของพูลบัฟเฟอร์
- เงินช่วยเหลือหน่วยความจํา
- การลดข้อมูลแคชของแผน
เพื่อทําการวิเคราะห์สถานการณ์ที่รอโดยทั่วไป คุณจะดูที่เครื่องมือต่อไปนี้:
sys.dm_os_wait_statsใช้ DMV นี้เพื่อดูชนิดการรอสูงสุดสําหรับฐานข้อมูลหรืออินสแตนซ์ ซึ่งจะแนะนําคุณเกี่ยวกับการดําเนินการต่อไป โดยขึ้นอยู่กับชนิดการรอสูงสุด
sys.dm_exec_requestsใช้ DMV นี้เพื่อค้นหาชนิดการรอเฉพาะสําหรับคิวรีที่ใช้งานอยู่เพื่อดูว่าทรัพยากรใดที่กําลังรออยู่ ซึ่งอาจเป็นสถานการณ์การบล็อกมาตรฐาน โดยกําลังรอการล็อกจากผู้ใช้อื่น
sys.dm_os_waiting_tasksคุณสามารถใช้ DMV นี้เพื่อค้นหาชนิดการรอสําหรับงานเฉพาะสําหรับคิวรีเฉพาะที่กําลังดําเนินการอยู่ ในขณะนี้ อาจเห็นว่าเหตุใดจึงใช้เวลานานกว่าปกติ
sys.dm_os_waiting_tasksประกอบด้วยสถิติการรอแบบสดที่ sys.dm_os_wait_stats ผลรวมเมื่อเวลาผ่านไปการจัดเก็บคิวรี
Query Store มีรายงานและมุมมองแค็ตตาล็อกที่แสดงการรวมของการรอสูงสุดสําหรับการดําเนินการแผนคิวรี สิ่งสําคัญคือต้องทราบว่าการรอ CPU นั้นเทียบเท่ากับปัญหา ที่กําลังทํางานอยู่
สถานการณ์เฉพาะสําหรับ Azure SQL
มีสถานการณ์ด้านประสิทธิภาพการทํางานบางอย่าง ทั้งการเรียกใช้และการรอ ที่เฉพาะเจาะจงกับ Azure SQL ซึ่งรวมถึงการกํากับดูแลบันทึก ขีดจํากัดผู้ปฏิบัติงาน การรอที่พบสําหรับระดับบริการที่สําคัญทางธุรกิจ และรอการปรับใช้เฉพาะสําหรับ Hyperscale
การกํากับดูแลรายการบันทึก
Azure SQL สามารถใช้การกํากับดูแลอัตราบันทึกเพื่อบังคับใช้ขีดจํากัดทรัพยากรในการใช้งานบันทึกธุรกรรม คุณอาจต้องการการบังคับใช้นี้เพื่อให้แน่ใจว่าขีดจํากัดทรัพยากรและเพื่อให้เป็นไปตาม SLA ที่สัญญาไว้ การกํากับดูแลรายการบันทึกอาจเห็นได้จากชนิดการรอต่อไปนี้:
-
LOG_RATE_GOVERNOR: รอฐานข้อมูล Azure SQL -
POOL_LOG_RATE_GOVERNOR: รอ Elastic Pools -
INSTANCE_LOG_GOVERNOR: รออินสแตนซ์ที่จัดการแล้วของ Azure SQL -
HADR_THROTTLE_LOG_RATE*: รอเวลาแฝงทางธุรกิจที่สําคัญและทางภูมิศาสตร์การจําลองแบบ
ขีดจํากัดของผู้ปฏิบัติงาน
SQL Server ใช้พูลผู้ปฏิบัติงานของเธรด แต่มีขีดจํากัดจํานวนสูงสุดของผู้ปฏิบัติงาน แอปพลิเคชันที่มีผู้ใช้พร้อมกันจํานวนมากอาจเข้าถึงขีดจํากัดของผู้ปฏิบัติงานที่บังคับใช้สําหรับฐานข้อมูล Azure SQL และอินสแตนซ์ที่จัดการแล้วของ SQL:
- Azure SQL Database จํากัดตามระดับบริการและขนาด ถ้าคุณเกินขีดจํากัดนี้ คิวรีใหม่จะแสดงข้อผิดพลาด
- ในขณะนี้ อินสแตนซ์ที่จัดการแล้วของ SQL ใช้
max worker threadsดังนั้นผู้ปฏิบัติงานที่เกินขีดจํากัดนี้อาจเห็นการรอTHREADPOOL
การรอ HADR ที่สําคัญทางธุรกิจ
หากคุณใช้ระดับบริการที่สําคัญทางธุรกิจ คุณอาจเห็นประเภทการรอต่อไปนี้โดยไม่คาดคิด:
HADR_SYNC_COMMITHADR_DATABASE_FLOW_CONTROLHADR_THROTTLE_LOG_RATE_SEND_RECV
แม้ว่าการรอเหล่านี้อาจไม่ทําให้แอปพลิเคชันของคุณช้าลง แต่คุณอาจไม่คาดหวังที่จะเห็นสิ่งเหล่านี้ โดยปกติจะใช้เฉพาะกับการใช้กลุ่มความพร้อมใช้งาน On เสมอ ระดับธุรกิจที่สําคัญใช้เทคโนโลยีกลุ่มความพร้อมใช้งานเพื่อใช้ SLA และความพร้อมใช้งานคุณลักษณะของระดับบริการที่สําคัญทางธุรกิจ ดังนั้นประเภทการรอเหล่านี้จึงคาดหมาย เวลารอที่นานอาจระบุถึงคอขวด เช่น เวลาแฝง I/O หรือแบบจําลองที่อยู่เบื้องหลัง
Hyperscale
สถาปัตยกรรม Hyperscale อาจส่งผลให้มีชนิดการรอที่ไม่ซ้ํากันซึ่งขึ้นต้นด้วย RBIO (การบ่งชี้การกํากับดูแลบันทึกที่เป็นไปได้) นอกจากนี้ DMV มุมมองแค็ตตาล็อก และเหตุการณ์ที่ขยายจะได้รับการปรับปรุงเพื่อแสดงเมตริกสําหรับเซิร์ฟเวอร์เพจที่อ่าน
ในแบบฝึกหัดถัดไป คุณจะได้เรียนรู้วิธีการตรวจสอบและแก้ไขปัญหาประสิทธิภาพการทํางานสําหรับ Azure SQL โดยใช้เครื่องมือและความรู้ที่คุณได้รับในหน่วยนี้