พัฒนาการของ Query Store

พัฒนาการของ Query Store
ตั้งแต่ได้เขียนบทความ “รู้จัก Query Store บน SQL Server 2016” เอาไว้ก่อนหน้านี้ แล้วได้เว้นช่วงไปพอสมควร ปัจจุบัน Microsoft SQL Server ใกล้จะออกเวอร์ชั่น 2019 ในเร็ววันนี้ มาดูกันว่า Query Store เปลี่ยนไปจากเดิมมากแค่ไหนกัน
Query Store บน Microsoft SQL Server 2016
Query Store บน Microsoft SQL Server 2017
(จากบทความ “เล่าถึง Microsoft SQL Server 2017 Datasheet พอสังเขป ตอนที่ 1”)
- เปิด Query Store บนฐานข้อมูลเป้าหมาย
- เปิดคุณสมบัติ Automatic plan choice correction บนฐานข้อมูลเป้าหมาย ดังนี้
SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON );
Query Store บน Microsoft SQL Server 2019
(ซึ่งถือว่าดีมาก หากผู้ใช้ต้องการเปิดคุณสมบัติ Auto Tuning ขึ้นมาใช้งาน และยังสามารถนำค่า Default นี้กลับไปกำหนดให้กับเวอร์ชั่น 2017 ได้อีกด้วย)
จากเดิมค่า Query Store Capture Mode มีค่าเป็น ALL ในเวอร์ชั่น 2016-2017 ได้เปลี่ยนเป็น AUTO ในเวอร์ชั่น 2019 (สำหรับบน Azure SQL Database เป็น AUTO มาตั้งแต่ต้น) ซึ่งเป็นค่าที่เหมาะสมสำหรับ Auto Tuning มากกว่า
ความหมายของ Query Store Capture Mode มีค่าเป็น AUTO คือแทนที่จะเก็บทุก Plan Cached ที่ถูกขับไล่ออกจากหน่วยความจำ มาเป็นการเก็บเฉพาะที่เห็นว่าสำคัญเท่านั้น เกณฑ์ที่ใช้พิจารณาความสำคัญ Microsoft ไม่มีเอกสารเผยแพร่ออกมา แต่อย่างน้อยมี 3 ค่าจาก Syntax ของคำสั่ง ALTER DATABASE พอจะแสดงให้เห็นได้ (ขอแสดงเพียงบางส่วนของ Syntax)
ผู้อ่านสามารถดู Syntax ตัวเต็มได้จาก https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-set-options?view=sql-server-2017
| TOTAL_EXECUTION_CPU_TIME_MS = number
พบว่าเราสามารถกำหนด Query Store Capture Policy เพิ่มเติมได้ (ไม่มีใน GUI ของ SSMS) ซึ่งหากเปิด Query Store Capture Mode เป็น AUTO ค่าเหล่านี้เราไม่ต้องตั้ง แต่หากเลือก Query Store Capture Mode เป็น Custom เราสามารถกำหนดค่าเหล่านี้ได้คือ
- EXECUTION_COUNT หากกำหนดเป็น 50 จะหมายถึงบันทึกเฉพาะ Query ที่ถูก Execute เกิน 50 ครั้งขึ้นไป
- TOTAL_COMPILE_CPU_TIME_MS หากกำหนดเป็น 60000 หรือ 60 วินาที จะหมายถึงบันทึกเฉพาะ Query ที่ใช้เวลาในการ Compile เกิน 1 นาทีขึ้นไป
- TOTAL_EXECUTION_CPU_TIME_MS หากกำหนดเป็น 60000 หรือ 60 วินาที จะหมายถึงบันทึกเฉพาะ Query ที่ใช้เวลาในการประมวลผลเกิน 1 นาทีขึ้นไป