SQL Server Execution Plan 執行計畫

2022-09-07

筆記 SQL Server 關於 Execution Plan (執行計畫) 的各種知識。

SQL Server Logo

說明

資料庫的查詢流程,Query Optimizer 會分析查詢語法,使用資料來源物件以及庫物件的統計資訊產生的執行計畫,並由演算法判斷 (低成本及速度快) 最適當的執行計畫,後進行查詢。

關於查詢可以使用的執行計畫的 DMOs:

DMOs 說明
sys.dm_exec_requests 查詢目前進行中 Query 所使用的執行計畫
sys.dm_exec_cached_plans 查詢已快取的實行計畫
sys.dm_exec_query_profiles 藉由輸入 SQL Handle 查詢執行計畫的內容

而因為建立執行計畫需要成本,所以資料庫會將執行計畫進行快取,在相同的查詢下重複使用。這個快取會因為重新啟動資料庫伺服器 (Instnace) 而被清除。

另外也可以手動的方式強制清除執行計畫快取:

DBCC FREEPROCCACHE

執行計畫分為預估 (Estimated) 與實際 (Actual),可以藉由 SSMS 來查詢,此外也可以使用 Live Query Statistics 動畫動態呈現執行計畫的執行情況。

使用快捷鍵 Ctrl + L 可以顯示預估 (Estimated) 的執行計畫
使用快捷鍵 Ctrl + M 可以在執行完查詢後一併顯示實際的執行計畫

也可以將執行計畫以查詢結果文字的方式匯出:

SET SHOWPLAN_ALL ON; 
SET SHOWPLAN_ALL OFF; 

資料庫的快取是否包含結果 (Query Results)?

資料庫只會快取執行計畫以及 Data Pages,所以重複執行的 Query 查詢速度之所以提升是因為有已建立好的執行計畫以及已經讀入記憶體的 Data Pages,不是因為查詢結果被快取。

Query Store

SQL Server 提供了 Query Store 的功能,啟用的層級在 Database,啟用後該資料庫的執行計畫會被保存下來 (容量上限內),提供管理者分析與調整使用。

此外啟用 Query Store 後,因為執行計畫會被保存下來 (Persist),所以可以強制設定查詢所使用的執行計畫。

Query Store 相關 DMOs

DMOs 說明
sys.query_store_plan 檢視儲存在 Query Store 的執行計畫
sys.query_store_query 檢視儲存在 Query Store 的查詢

參考資料

Query processing architecture guide | learn.microsoft

相關連結

SQL Server Integrated Service 初探

SQL Server 閃電般快速查詢指南⚡

SQL Server 周邊工具彙整筆記

SQL Server 學習資源筆記