決定查詢調整小幫手 (QTA) 是否適合您
在資料庫版本升級之後,您知道潛在的查詢計劃回歸和效能遺失。 若要協助維護資料庫升級之後的效能,您必須尋找識別和緩解回歸查詢的最佳方法。 本單元說明如何使用 查詢存放區 和查詢微調小幫手 (QTA) 來協助確保降低效能在升級之後不會有問題。
開始使用 查詢存放區 和查詢微調小幫手
QTA 取決於 查詢存放區 數據,以尋找在升級后回歸的查詢。 查詢存放區 可讓您在升級之前收集舊版資料庫版本的計量。
查詢存放區 是在 SQL Server 2016 中引進的,QTA 是在 SQL Server 2017 中引進的。 在 SQL Server 2022 實例上執行的任何資料庫版本都可以使用這兩項功能。 這些工具已整合至 SQL Server Management Studio (SSMS),並在資料庫層級運作。
資料庫的相容性層級會決定其版本,進而決定 其所使用的基數估算器 版本。 基數估算器會預測查詢可能傳回的數據列數目,因此查詢優化器可以選取成本最低的計劃。 SQL Server 2014 引進了升級的基數估算器演算法,可讓大多數查詢受益,但很少會對效能造成負面影響。
為了測量效能影響,查詢存放區 報告取用最多系統資源的回歸查詢和查詢。 QTA 會比較資料庫升級前後的 查詢存放區 查詢效能數據,以及改善效能的查詢實驗。
注意
QTA 不適用於 Azure SQL 資料庫 或 SQL 受管理執行個體 資料庫。 針對這些資料庫,請考慮使用適用於 Azure Data Studio 的 Azure SQL 移轉延伸模組。
QTA 和自動計劃修正
當 SQL Server 執行 Transact-SQL (T-SQL) 查詢時,它會分析可執行查詢的可能計劃。 SQL Server 會快取成功執行的查詢計劃,並在再次執行查詢時重複使用它們。
SQL Server 會挑選查詢的最佳計劃,並使用它,直到情況強制挑選新的方案為止。 這些情況可能包括資料庫引擎重新編譯計劃、要新增或移除的索引,或正在變更的統計數據。
新計劃並不一定會改善舊計劃。 您可以執行下列命令來尋找具有回歸計劃的查詢。
SELECT * FROM sys.dm_db_tuning_recommendations
然後 sp_force_plan
,您可以使用預存程序強制 SQL Server 使用建議的特定方案。
EXEC sp_force_plan @query_id = 1187, @plan_id = 1975
此 sp_force_plan
程式是手動程式,如果許多查詢在升級的資料庫上回歸,就可能很乏味。 SQL Server 2017 引進了名為 自動計劃更正 的新功能,可自動調整查詢,並移除手動介入的需求。 您可以執行下列語句,在資料庫上啟用自動計劃更正:
ALTER DATABASE <database-name> SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON)
在資料庫層級設定時,自動計劃更正會指示 SQL Server 使用最後一個良好的查詢計劃。 SQL Server 會繼續監視計劃,以在計劃執行時尋找回歸,並確保其可提供最佳效能。
自動計劃修正的運作方式與 QTA 不同。 使用最後一個好計劃可能表示回復到先前的基數估算器。 相反地,QTA 會使用對應至目標資料庫相容性層級的基數估算器版本執行其實驗。
摘要
QTA 可在 SQL Server 2022 中使用,並視 查詢存放區 運作而定。 QTA 必須在其先前的相容性層級具有資料庫的 查詢存放區 基準數據,才能觀察查詢,並在升級後進行比較。
SQL Server 2017 中引進的自動計劃修正,不需要手動識別並強制查詢計劃。 您可以在資料庫層級啟用自動計劃修正,但可能會回復基數估算器的版本。 QTA 會使用對應至目標相容性層級的基數估算器版本。