sys.dm_exec_procedure_stats (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

傳回快取預存程式的匯總效能統計數據。 檢視會針對每個快取的預存程式計劃傳回一個數據列,而且只要預存程式保持快取,數據列的存留期就會傳回一個數據列。 從快取中移除預存程式時,會從這個檢視中排除對應的數據列。 此時,query_cache_removal_statistics事件會引發類似 SQL Server 和 Azure SQL 受控執行個體 的sys.dm_exec_query_stats

在 Azure SQL Database 中,動態管理檢視不可以公開可能會影響資料庫內含項目的資訊,或公開有關使用者可存取之其他資料庫的資訊。 為了避免公開此資訊,系統會篩選出包含不屬於連線租用戶之資料的每個資料列。

注意

sys.dm_exec_procedure_stats的結果可能會隨著每個執行而有所不同,因為數據只會反映已完成的查詢,而不是仍在進行中的查詢。 若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 呼叫此專案,請使用 名稱 sys.dm_pdw_nodes_exec_procedure_stats。 Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。

資料行名稱 資料類型 描述
database_id int 預存程式所在的資料庫標識碼。

在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。
object_id int 預存程式的物件識別碼。
type char(2) 物件的類型:

P = SQL 預存程序

PC = 元件 (CLR) 預存程式

X = 擴充預存程式
type_desc nvarchar(60) 物件類型的描述:

SQL_STORED_PROCEDURE

CLR_STORED_PROCEDURE

EXTENDED_STORED_PROCEDURE
sql_handle varbinary(64) 這可用來與從這個預存程式內執行的sys.dm_exec_query_stats查詢相互關聯。
plan_handle varbinary(64) 記憶體中計畫的識別碼。 這個識別碼是暫時性的,只有當計畫留在快取時才會保留。 這個值可以與 sys.dm_exec_cached_plans 動態管理檢視一起使用。

當原生編譯預存程序查詢記憶體優化數據表時,一律會0x000。
cached_time datetime 將預存程式新增至快取的時間。
last_execution_time datetime 上次執行預存程序的時間。
execution_count bigint 預存程式自上次編譯以來已執行的次數。
total_worker_time bigint CPU 時間總計,以微秒為單位,此預存程式自編譯後執行所耗用的 CPU 時間。

針對原生編譯的預存程式,如果許多執行需要少於 1 毫秒, 則total_worker_time 可能不正確。
last_worker_time bigint CPU 時間,以微秒為單位,上次執行預存程式時已耗用。 1
min_worker_time bigint 此預存程式在單一執行期間已耗用的最小 CPU 時間,以微秒為單位。 1
max_worker_time bigint 此預存程式在單一執行期間已耗用的最大 CPU 時間,以微秒為單位。 1
total_physical_reads bigint 執行此預存程式之後所執行的實體讀取總數。

查詢記憶體最佳化的資料表時一律為 0。
last_physical_reads bigint 上次執行預存程式時所執行的實體讀取數目。

查詢記憶體最佳化的資料表時一律為 0。
min_physical_reads bigint 此預存程式在單一執行期間執行的實體讀取數目下限。

查詢記憶體最佳化的資料表時一律為 0。
max_physical_reads bigint 此預存程式在單一執行期間執行的實體讀取數目上限。

查詢記憶體最佳化的資料表時一律為 0。
total_logical_writes bigint 自編譯此預存程式之後,執行所執行的邏輯寫入總數。

查詢記憶體最佳化的資料表時一律為 0。
last_logical_writes bigint 上次執行計劃時,緩衝池頁面數目已遭抹去。 如果已修改頁面,則不會計算寫入。

查詢記憶體最佳化的資料表時一律為 0。
min_logical_writes bigint 這個預存程式在單一執行期間執行的邏輯寫入數目下限。

查詢記憶體最佳化的資料表時一律為 0。
max_logical_writes bigint 這個預存程式在單一執行期間所執行的邏輯寫入數目上限。

查詢記憶體最佳化的資料表時一律為 0。
total_logical_reads bigint 執行此預存程式之後所執行的邏輯讀取總數。

查詢記憶體最佳化的資料表時一律為 0。
last_logical_reads bigint 上次執行預存程式時執行的邏輯讀取數目。

查詢記憶體最佳化的資料表時一律為 0。
min_logical_reads bigint 這個預存程式在單一執行期間執行的邏輯讀取數目下限。

查詢記憶體最佳化的資料表時一律為 0。
max_logical_reads bigint 此預存程式在單一執行期間所執行的邏輯讀取數目上限。

查詢記憶體最佳化的資料表時一律為 0。
total_elapsed_time bigint 完成此預存程式執行的總經過時間,以微秒為單位。
last_elapsed_time bigint 經過的時間,以微秒為單位,針對此預存程式最近完成的執行。
min_elapsed_time bigint 對於此預存程式的任何已完成執行,以微秒為單位的最小耗用時間。
max_elapsed_time bigint 此預存程式的任何已完成執行時間上限,以微秒為單位。
total_spills bigint 執行此預存程序之後,溢出的頁面總數。

適用於:從 SQL Server 2017 (14.x) CU3 開始
last_spills bigint 上次執行預存程式時溢出的頁面數目。

適用於:從 SQL Server 2017 (14.x) CU3 開始
min_spills bigint 此預存程式在單一執行期間已溢出的最小頁數。

適用於:從 SQL Server 2017 (14.x) CU3 開始
max_spills bigint 此預存程式在單一執行期間已溢出的最大頁數。

適用於:從 SQL Server 2017 (14.x) CU3 開始
pdw_node_id int 此散發節點的標識碼。

適用於:Azure Synapse Analytics、Analytics Platform System (PDW)
total_page_server_reads bigint 自編譯此預存程式之後,執行所執行的頁面伺服器讀取總數。

適用於:Azure SQL 資料庫 超大規模資料庫
last_page_server_reads bigint 上次執行預存程式時,頁面伺服器讀取次數。

適用於:Azure SQL 資料庫 超大規模資料庫
min_page_server_reads bigint 在單一執行期間,這個預存程式所讀取的頁面伺服器數目下限。

適用於:Azure SQL 資料庫 超大規模資料庫
max_page_server_reads bigint 這個預存程式在單一執行期間執行的頁面伺服器讀取數目上限。

適用於:Azure SQL 資料庫 超大規模資料庫

1 針對啟用統計數據收集時原生編譯的預存程式,會以毫秒為單位收集背景工作時間。 如果查詢以小於毫秒的方式執行,則此值會是 0。

權限

在 SQL Server 和 SQL 受控執行個體上,需要 VIEW SERVER STATE 權限。

在 SQL Database [Basic]、[S0] 和 [S1] 服務目標,以及彈性集區中的資料庫,需要伺服器管理員帳戶、伺服器管理員帳戶、Microsoft Entra 管理員帳戶或 ##MS_ServerStateReader##伺服器角色的成員資格。 在所有其他 SQL Database 服務目標上,需要資料庫的 VIEW DATABASE STATE 權限或 ##MS_ServerStateReader## 伺服器角色的成員資格。

SQL Server 2022 及更新版本的權限

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

備註

當預存程式執行完成時,檢視中的統計數據會更新。

範例

下列範例會傳回平均經過時間所識別的前十個預存程式相關信息。

SELECT TOP 10 d.object_id, d.database_id, OBJECT_NAME(object_id, database_id) 'proc name',   
    d.cached_time, d.last_execution_time, d.total_elapsed_time,  
    d.total_elapsed_time/d.execution_count AS [avg_elapsed_time],  
    d.last_elapsed_time, d.execution_count  
FROM sys.dm_exec_procedure_stats AS d  
ORDER BY [total_worker_time] DESC;  

另請參閱

執行相關的動態管理檢視和函數 (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_trigger_stats (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)