使用Query Store監控性能
SQL Server Query Store特性可讓你看到查詢計劃選擇和性能。簡化了性能調優,能夠快速的發現由於查詢計劃的選擇致使的性能的差異。Query Store自動歷史的查詢,計劃和運行時的統計信息,保留這些能夠用來檢查。數據經過時間窗口來分隔數據,你能夠看見數據庫的使用模式,而且理解查詢計劃在服務中的變化。能夠你使用ALTER DATABASE SET選項來配置Query Store。
啓動Query Store
ALTER DATABASE AdventureWorks2012 SET QUERY_STORE = ON;
Query Store中的信息
特定查詢的執行計劃涉及到不少,好比統計信息變化,schema變化,索引的建立和刪除等等。過程的執行計劃只會保存最新的執行計劃,計劃也會由於內存壓力來犧牲計劃的cache。由於執行計劃的變化致使性能問題也是比較多的。
由於每一個查詢都保留了多個執行計劃,能夠經過策略強制查詢處理器使用特定的執行計劃。Query Store的計劃強制和查詢hint的USE PLAN類似,不須要應用程序作任何修改。計劃強制能夠解決查詢的計劃修改致使的性能退化。
Wait Stats,是另一個source用來調優SQL Server。對於長時間,wait stats是實例級別的,並不能迴歸到實際查詢。在SQL Server 2017,在Query Store中增長另一個維度來跟蹤wait stats。
Query Store特性使用場景:
- 快速查找和經過強制到以前的查詢計劃,修復一個計劃性能迴歸
- 時間窗口內查詢的運行次數。
- 查看過去的x小時,top n查詢
- 審計給定查詢的查詢計劃
- 分析特定數據庫的資源使用
- 等待resource的top n查詢
- 理解特定查詢和計劃的wait nature
Query Store包含的三個Store:
- plan store,用來保存執行計劃信息
- runtime stats store,保存執行的統計信息
- wait stats store,保存wait stats
能夠經過max_plans_per_query配置每一個查詢的保存的plan數量,爲了提升性能寫入這些store都是一部的,爲了最小化空間的使用運行時的統計信息,按某個時間範圍內聚合。
如下查詢返回query store中的查詢和計劃:
SELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*
FROM sys.query_store_plan AS Pl
JOIN sys.query_store_query AS Qry
ON Pl.query_id = Qry.query_id
JOIN sys.query_store_query_text AS Txt
ON Qry.query_text_id = Txt.query_text_id ;
查找等待查詢