Share via


sys.dm_exec_cached_plans

更新: 2006 年 12 月 12 日

針對 SQL Server 快取的每個查詢計劃傳回一個資料列,加快查詢執行的速度。您可以使用這個動態管理檢視尋找快取的查詢計劃、快取的查詢文字、快取計劃所使用的記憶體,以及快取計劃的重複使用計數。

ms187404.note(zh-tw,SQL.90).gif附註:
對於查詢計劃,sys.dm_exec_cached_plans 動態管理檢視會對應到 SQL Server 2000 中的 syscacheobjects 系統資料表。

資料行名稱

資料類型

描述

bucketid

int

這是快取項目的雜湊值區識別碼。這個值的範圍從 0 開始,一直到該快取類型的雜湊資料表大小。

若為 SQL 計劃和物件計劃快取,雜湊資料表在 32 位元系統上最大為 10007,在 64 位元系統上最大為 40009。若為 Bound Trees 快取,雜湊資料表在 32 位元系統上最大為 1009,在 64 位元系統上最大為 4001。若為擴充預存程序快取,雜湊資料表在 32 位元和 64 位元系統上最大為 127。如需有關快取類型和雜湊資料表的詳細資訊,請參閱<sys.dm_os_memory_cache_hash_tables>。

refcounts

int

參考這個快取物件的快取物件數目。Refcounts 必須至少為 1,快取才能有項目。

usecounts

int

自開始之後使用這個快取物件的次數。

size_in_bytes

int

快取物件所耗用的位元組數目。

memory_object_address

varbinary(8)

快取項目的記憶體位址。這個值可以與 sys.dm_os_memory_objects 一起使用,取得快取計劃的記憶體細分,也可以與 sys.dm_os_memory_cache_entries 一起使用,取得快取項目的成本。

cacheobjtype

nvarchar(34)

快取中的物件類型。這個值可以是下列值之一:

  • 編譯的計劃
  • 剖析樹狀結構
  • 擴充程序
  • CLR 編譯的函數
  • CLR 編譯的程序

objtype

nvarchar(16)

物件的類型。這個值可以是下列值之一:

描述

Proc預存程序

Prepared準備陳述式

Adhoc特定查詢 1

ReplProc複寫篩選程序

觸發程序觸發程序

ViewView

Default預設值

UsrTab使用者資料表

SysTab系統資料表

檢查CHECK 條件約束

規則規則

plan_handle

varbinary(64)

記憶體中計劃的識別碼。這個識別碼是暫時性的,只有當計劃留在快取時才會保留。這個值可以與下列動態管理函數一起使用:

sys.dm_exec_sql_text

sys.dm_exec_query_plan

sys.dm_exec_plan_attributes

1 指利用 osqlsqlcmd (而非遠端程序呼叫) 提交為語言事件的 Transact-SQL。

權限

需要伺服器的 VIEW SERVER STATE 權限。

範例

A. 傳回重複使用之快取項目的批次文字

下列範例會針對使用超過一次的所有快取項目,傳回其 SQL 文字。

SELECT usecounts, cacheobjtype, objtype, text 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE usecounts > 1 
ORDER BY usecounts DESC;
GO

B. 傳回所有快取觸發程序的快取計劃

下列範例會傳回所有快取觸發程序的快取計劃。

SELECT plan_handle, query_plan, objtype 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) 
WHERE objtype ='Trigger';
GO

C. 傳回編譯計劃所用的 SET 選項

下列範例會傳回編譯計劃所用的 SET 選項。另外也會傳回計劃的 sql_handle。PIVOT 運算子可用來將 set_optionssql_handle 屬性輸出為資料行,而非資料列。如需有關 set_options 傳回值的詳細資訊,請參閱<sys.dm_exec_plan_attributes>。

SELECT plan_handle, pvt.set_options, pvt.sql_handle
FROM (
      SELECT plan_handle, epa.attribute, epa.value 
      FROM sys.dm_exec_cached_plans 
      OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
      WHERE cacheobjtype = 'Compiled Plan'
      ) AS ecpa 
PIVOT (MAX(ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;
GO

D. 傳回所有快取編譯計劃細分的記憶體

下列範例會傳回快取中所有編譯計劃所用細分的記憶體。

SELECT plan_handle, ecp.memory_object_address AS CompiledPlan_MemoryObject, 
    omo.memory_object_address, pages_allocated_count, type, page_size_in_bytes 
FROM sys.dm_exec_cached_plans AS ecp 
JOIN sys.dm_os_memory_objects AS omo 
    ON ecp.memory_object_address = omo.memory_object_address 
    OR ecp.memory_object_address = omo.parent_address
WHERE cacheobjtype = 'Compiled Plan';
GO

請參閱

參考

動態管理檢視和函數
執行相關動態管理檢視和函數
sys.dm_exec_query_plan
sys.dm_exec_plan_attributes
sys.dm_exec_sql_text
sys.dm_os_memory_objects
sys.dm_os_memory_cache_entries

其他資源

使用 APPLY

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

變更的內容:
  • 新增<範例>一節。
  • 修改 bucketidrefcountsmemory_object_addressobjtypecacheobjtype 資料行的定義。

2005 年 12 月 5 日

變更的內容:
  • Pagesused 資料行名稱改成 size_in_bytes
  • 移動 memory_object_address 資料行,使其顯示在 size_in_bytes 資料行後面。