ดึงค่าประสิทธิภาพของ SQL Server ด้วย Power BI

ดึงค่าประสิทธิภาพของ SQL Server ด้วย Power BI
ผู้เขียนได้พูดถึงแหล่งข้อมูลของค่าประสิทธิภาพว่ามีอะไรกันบ้าง อยากให้ผู้อ่านลองอ่านบทความนั้นก่อนเพื่อเป็นปูพื้นความรู้
ข้อควรคำนึงอีกเรื่องคือ ปกติหากเราคิวรีค่าประสิทธิภาพออกมาตรง ๆ มักนำมาใช้ประโยชน์ลำบาก
เพราะค่าประสิทธิภาพนั้นมักเก็บข้อมูลในลักษณะ Cumulative หรือเป็นค่าบวกสะสม
ผู้เขียนทดสอบให้เห็นโดยสืบค้นจาก DMV ชื่อ sys.dm_os_wait_stats ด้วยคิวรี่ต่อไปนี้
'BROKER_EVENTHANDLER', 'BROKER_RECEIVE_WAITFOR', 'BROKER_TASK_STOP'
ผู้เขียนได้กรอง Wait Type ที่ไม่เราไม่ใช้ในการพิจารณาประสิทธิภาพ (อ้างอิงจากสคริปต์ของ Glenn Berry https://glennsqlperformance.com/resources )
และ Waiting ที่ไม่เคยเกิดขึ้นออกไป จากนั้นดึงเฉพาะ Waiting Type ที่เกิดบ่อยที่สุด 20 อันดับแรกมา ผลลัพธ์ที่ได้คือ
- waiting_tasks_count นับจำนวน Task ที่ทำให้เกิด Waiting Type
- wait_time_ms เวลาสะสมของการรอทั้งหมด (Resource Wait + Runnable) ก่อนเปลี่ยนเป็นสถานะ Running
- max_wait_time_ms เวลารอที่นานที่สุดใน Waiting Type นี้ (ค่านี้ไม่ใช่ Cumulative แต่เป็นของ Task ใดที่รอนานสุด)
- signal_wait_time_ms เวลาสะสมของการรอในสถานะ Runnable ก่อนเปลี่ยนเป็นสถานะ Running
เพื่อความง่ายในการแสดงตัวอย่างผู้เขียนขอใช้เพียงคอลัมน์ wait_time_ms เท่านั้น
โดยผู้เขียนทำการสร้างฐานข้อมูลชื่อ sqlperf และสร้างตารางชื่อ landing.WaitStats ด้วยสคริปต์ต่อไปนี้
ครั้งถัดมา (สีเขียว) เป็นเวลา 40,319,456 ms
และครั้งที่ถัดมา (สีฟ้า) เป็นเวลา 40,378,444 ms
จะเห็นว่าค่าเป็นบวกสะสมไปเรื่อย ๆ หากเราคิวรี่ตรง ๆ เราต้องตั้งกลไกให้ทำการดึงข้อมูลในมีความถี่คงที่
ตัวอย่างนี้คือ ทุก 1 นาที หรือ 60 วินาที ดังนั้นหากเอาไปวาดเป็นกราฟจะได้จุดสองจุดคือ
WITH Wait as
ผลลัพธ์ที่ได้คือ
ตรงตามความต้องการของเรา จากนั้นผู้เขียนลบประโยค WHERE ทิ้งไป แล้วนำไปใช้ในการ Extract ลง staging ด้วยสคริปต์ต่อไปนี้
ON w2.wait_type=w1.wait_type AND w2.WaitType_SEQ-1 = w1.WaitType_SEQ
จากนั้นผู้เขียนทำการ Load ไปลงตาราง Fact ชื่อ factWaitStats บน Datawarehouse ชื่อ DemoDW (เป็นการจำลองสภาพแวดล้อมให้ใกล้เคียงการทำงานจริง) ด้วยสคริปต์ต่อไปนี้
USE DemoDW
ทางเลือกคือใช้ Microsoft SQL Server Analysis Service (SSAS) สร้าง Data Model แล้วให้ Power BI แสดงผล Visualization เท่านั้น
หรือสร้าง Data Model ด้วย Power BI เองเลย
ผู้เขียนขอเลือกสร้างด้วย Power BI แต่ในการใช้งานจริงเมื่อปริมาณข้อมูลมากขึ้นควรพิจารณาสร้าง Data Model ด้วย SSAS
เมื่อนำไปแสดงบน Visualization จะเห็นว่าสามารถ Drill-Up และ Drill-Down เพื่อดูผลรวมตามลำดับชั้นของเวลาได้
แต่น่าเสียดายที่ตัวอย่างที่แสดงให้ดูนี้มี Wait Type ชื่อ HADR_FILESTREAM_IOMGR_IOCOMPLETION ใช้เวลานานมากกว่าตัวอื่น ๆ ทำให้แทบมองไม่เห็น Wait Type ตัวอื่นเลย
สังเกตว่า Wait Type ชื่อ HADR_FILESTREAM_IOMGR_IOCOMPLETION
ในช่วงนาทีที่ 60 ของชั่วโมงที่ 11 มีค่าลดลงจากในช่วงนาทีที่ 45 ของชั่วโมงที่ 11
นี่เป็นเพียงตัวอย่างที่ไม่สมบูรณ์นัก เพื่อให้พอเห็นการนำค่าประสิทธิภาพไปใช้งาน
ส่วนการดำเนินการกับทั้ง landing, staging และ Datawarehouse ก็ทำขึ้นคร่าว ๆ เช่นกัน
หากมีโอกาสผู้เขียนจะทดลองทำเวอร์ชั่นใช้งานจริงออกมา แล้วแจกจ่าย Source Code อีกครั้ง
หวังว่าตัวอย่างเหล่านี้จะทำให้เห็นการนำค่าประสิทธิภาพไปใช้งานกันครับ
- วิทยากรผู้ดูแลและออกแบบหลักสูตร
- กลุ่มวิชา SQL Server/Window Server
- Microsoft SQL Server Specialist
- Microsoft Certified Trainer (2002-Present)
- Co-Founder at Data Meccanica Co., Ltd.