sys.query_store_plan (Transact-SQL)
適用於: SQL Server 2016 (13.x) 以上版本 Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics
包含與查詢相關聯之每個執行計劃的相關信息。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
plan_id |
bigint | 主索引鍵。 |
query_id |
bigint | 外鍵。 聯結至 sys.query_store_query (Transact-SQL) 。 |
plan_group_id |
bigint | 計劃群組的標識碼。 數據指標查詢通常需要多個(填入和擷取)計劃。 填入和擷取一起編譯的計劃位於相同的群組中。0 表示計劃不在群組中。 |
engine_version |
nvarchar(32) | 用來以 <major>.<minor>.<build>.<revision> 格式編譯計劃的引擎版本。 |
compatibility_level |
smallint | 查詢中所參考資料庫的資料庫相容性層級。 |
query_plan_hash |
binary(8) | 個別計劃的 MD5 哈希。 |
query_plan |
nvarchar(max) | 查詢計劃的 Showplan XML。 |
is_online_index_plan |
bit | 方案是在在線索引組建期間使用。 注意: Azure Synapse Analytics 一律會傳 0 回 。 |
is_trivial_plan |
bit | Plan 是一個微不足道的計劃(查詢優化器階段 0 中的輸出)。 注意: Azure Synapse Analytics 一律會傳 0 回 。 |
is_parallel_plan |
bit | 計劃是平行的。 注意: Azure Synapse Analytics 一律會傳 1 回 。 |
is_forced_plan |
bit | 當使用者執行預存程式 sys.sp_query_store_force_plan 時,方案會標示為強制。 強制機制 不保證 此確切計劃將用於 所 query_id 參考的查詢。 計劃強制會再次編譯查詢,而且通常會產生與 所 plan_id 參考之計劃完全相同或類似的計劃。 如果計劃強制不成功, force_failure_count 則會遞增,並 last_force_failure_reason 填入失敗原因。注意: Azure Synapse Analytics 一律會傳 0 回 。 |
is_natively_compiled |
bit | 計劃包含原生編譯的記憶體優化程式。 (0 = FALSE ,1 = TRUE )。注意: Azure Synapse Analytics 一律會傳 0 回 。 |
force_failure_count |
bigint | 強制此計劃失敗的次數。 只有在重新編譯查詢時,才能遞增它(而不是每次執行時)。 0 每次is_plan_forced 從 FALSE 變更為 TRUE 時,都會重設為 。注意: Azure Synapse Analytics 一律會傳 0 回 。 |
last_force_failure_reason |
int | 強制計劃失敗的原因。 0:無失敗,否則導致強制失敗的錯誤錯誤號碼 3617: COMPILATION_ABORTED_BY_CLIENT 8637: ONLINE_INDEX_BUILD 8675: OPTIMIZATION_REPLAY_FAILED 8683: INVALID_STARJOIN 8684: TIME_OUT 8689: NO_DB 8690: HINT_CONFLICT 8691: SETOPT_CONFLICT 8694: DQ_NO_FORCING_SUPPORTED 8698: NO_PLAN 8712: NO_INDEX 8713: VIEW_COMPILE_FAILED <其他值>: GENERAL_FAILURE 注意: Azure Synapse Analytics 一律會傳 0 回 。 |
last_force_failure_reason_desc |
nvarchar(128) | 的 last_force_failure_reason 文字描述。COMPILATION_ABORTED_BY_CLIENT :用戶端在完成之前中止的查詢編譯ONLINE_INDEX_BUILD :查詢會在目標數據表有在線建置的索引時嘗試修改數據OPTIMIZATION_REPLAY_FAILED :優化重新執行腳本無法執行。INVALID_STARJOIN :p lan 包含無效的 StarJoin 規格TIME_OUT :優化器在搜尋強制計劃指定的計劃時超過允許的作業數目NO_DB :方案中指定的資料庫不存在HINT_CONFLICT :無法編譯查詢,因為計劃與查詢提示發生衝突DQ_NO_FORCING_SUPPORTED :無法執行查詢,因為計劃與使用分散式查詢或全文檢索作業發生衝突。NO_PLAN :查詢處理器無法產生查詢計劃,因為無法驗證強制計劃對查詢有效NO_INDEX :計劃中指定的索引已不存在VIEW_COMPILE_FAILED :因為計劃中所參考的索引檢視中有問題,因此無法強制查詢計劃GENERAL_FAILURE :一般強制錯誤(未涵蓋其他原因)注意: Azure Synapse Analytics 一律會傳 NONE 回 。 |
count_compiles |
bigint | 規劃編譯統計數據。 |
initial_compile_start_time |
datetimeoffset | 規劃編譯統計數據。 |
last_compile_start_time |
datetimeoffset | 規劃編譯統計數據。 |
last_execution_time |
datetimeoffset | 上次運行時間是指查詢/計劃的最後一個結束時間。 |
avg_compile_duration |
float | 以微秒為單位規劃編譯統計數據。 除以 1,000,000 以取得秒數。 |
last_compile_duration |
bigint | 以微秒為單位規劃編譯統計數據。 除以 1,000,000 以取得秒數。 |
plan_forcing_type |
int | 適用於: SQL Server 2017 (14.x) 和更新版本 規劃強制類型。 0: NONE 1: MANUAL 2: AUTO |
plan_forcing_type_desc |
nvarchar(60) | 適用於: SQL Server 2017 (14.x) 和更新版本 的 plan_forcing_type 文字描述。NONE :不強制計劃MANUAL :規劃用戶強制AUTO :自動調整強制規劃。 |
has_compile_replay_script |
bit | 適用於:SQL Server 2022 (16.x) 和更新版本 指出計劃是否有與其相關聯的優化重新執行腳本: 0 = 沒有優化重新執行文稿(無或甚至無效)。 1 = 記錄的優化重新執行腳本。 不適用於 Azure Synapse Analytics。 |
is_optimized_plan_forcing_disabled |
bit | 適用於:SQL Server 2022 (16.x) 和更新版本 指出是否已針對計劃停用優化計劃強制: 0 = 已停用。 1 = 未停用。 不適用於 Azure Synapse Analytics。 |
plan_type |
int | 適用於:SQL Server 2022 (16.x) 和更新版本 方案類型。 0:已編譯的計劃 1:發送器計劃 2:查詢變體計劃 不適用於 Azure Synapse Analytics。 |
plan_type_desc |
nvarchar(120) | 適用於:SQL Server 2022 (16.x) 和更新版本 計劃類型的文字描述。 編譯計劃:指出計劃是非參數敏感性計劃優化計劃 發送器計劃:指出計劃是參數敏感性計劃優化發送器計劃 查詢變體計劃:指出計劃是參數敏感性計劃優化查詢變體計劃 不適用於 Azure Synapse Analytics。 |
備註
啟用次要複本 查詢存放區 時,可以強制使用多個方案。
在 Azure Synapse Analytics 中,使用資料行 has_compile_replay_script
、 is_optimized_plan_forcing_disabled
、 plan_type_desc
plan_type
會導致Invalid Column Name
錯誤,因為它們不受支援。 如需如何在 Azure Synapse Analytics 中使用的sys.query_store_plan
範例,請參閱範例 B。
規劃強制限制
查詢存放區 有一個機制可強制查詢優化器使用特定執行計劃。 不過,有一些限制可以防止強制執行計劃。
首先,如果計劃包含下列建構:
- 插入大量語句
- 外部數據表的參考
- 分散式查詢或全文檢索作業
- 使用彈性查詢
- 動態或索引鍵集數據指標
- 無效的星形聯結規格
注意
Azure SQL 資料庫 和 SQL Server 2019 和更新版本的組建版本支持強制靜態和快速向前數據指標的計劃。
其次,當計劃依賴的物件時,就無法再使用:
- 資料庫(如果資料庫,原計劃的來源,不再存在)
- 索引 (不再存在或停用)
最後,計劃本身的問題:
- 查詢不合法
- 查詢優化器超過允許的作業數目
- 格式不正確的計劃 XML
權限
需要 VIEW DATABASE STATE
權限。
範例
A. 尋找 SQL Server 無法透過 QDS 強制計畫的原因
請注意 last_force_failure_reason_desc
與 force_failure_count
資料列:
SELECT TOP 1000
p.query_id,
p.plan_id,
p.last_force_failure_reason_desc,
p.force_failure_count,
p.last_compile_start_time,
p.last_execution_time,
q.last_bind_duration,
q.query_parameterization_type_desc,
q.context_settings_id,
c.set_options,
c.STATUS
FROM sys.query_store_plan p
INNER JOIN sys.query_store_query q
ON p.query_id = q.query_id
INNER JOIN sys.query_context_settings c
ON c.context_settings_id = q.context_settings_id
LEFT JOIN sys.query_store_query_text t
ON q.query_text_id = t.query_text_id
WHERE p.is_forced_plan = 1
AND p.last_force_failure_reason != 0;
B. 在 Azure Synapse Analytics 中檢視查詢計劃結果的查詢
使用下列範例查詢,在 Azure Synapse Analytics 的 查詢存放區 中尋找 100 個最新的執行計劃。
SELECT TOP 100
plan_id,
query_id,
plan_group_id,
engine_version,
compatibility_level,
query_plan_hash,
query_plan,
is_online_index_plan,
is_trivial_plan,
is_parallel_plan,
is_forced_plan,
is_natively_compiled,
force_failure_count,
last_force_failure_reason,
last_force_failure_reason_desc,
count_compiles,
initial_compile_start_time,
last_compile_start_time,
last_execution_time,
avg_compile_duration,
last_compile_duration,
plan_forcing_type,
plan_forcing_type_desc
FROM sys.query_store_plan
ORDER BY last_execution_time DESC;
相關內容
- 使用查詢存放區監視效能
- sys.database_query_store_options (Transact-SQL)
- sys.query_context_settings (Transact-SQL)
- sys.query_store_query (Transact-SQL)
- sys.query_store_query_text (Transact-SQL)
- sys.query_store_runtime_stats (Transact-SQL)
- sys.query_store_wait_stats (Transact-SQL)
- sys.query_store_runtime_stats_interval (Transact-SQL)
- 系統目錄檢視 (Transact-SQL)
- 查詢存放區預存程序 (Transact-SQL)