Sql-Server

如何使用表變數查詢所有查詢的計劃記憶體?

  • March 17, 2021

有沒有辦法使用表變數查詢所有查詢的 sql 計劃記憶體?

一種方法是您可以使用系統DMV對記憶體的查詢計劃的文本執行萬用字元搜尋,如下所示:

SELECT databases.[name] AS DatabaseName, Plans.objtype AS ObjectType, PlanText.text AS PlanText
FROM sys.dm_exec_cached_plans AS Plans -- Cached Query Plans
CROSS APPLY sys.dm_exec_sql_text(Plans.plan_handle) AS PlanText -- Query Plan Text
INNER JOIN sys.types -- Data Types (inclusive of User Defined)
   ON PlanText.[text] LIKE '%' + types.[name] + '%'
INNER JOIN master.sys.databases -- Databases
   ON PlanText.[dbid] = databases.database_id
WHERE types.is_user_defined = 1
   AND types.is_table_type = 1 -- Filter on only the User Defined Table Types

這將返回記憶體查詢計劃的數據庫、對像類型(視圖、過程、Ad-Hoc 等)以及查詢計劃的文本本身。這樣做的一個潛在缺點是,如果您有一個使用者定義的表類型,該表類型具有用於其他查詢中其他事物的非常常見的名稱,因此您可能會由於包含搜尋的誤報而得到額外的結果。

引用自:https://dba.stackexchange.com/questions/287005