sys.dm_exec_function_stats (Transact-SQL)

適用於: SQL Server 2016 (13.x) 及更新版本 Azure SQL DatabaseAzure SQL 受控執行個體

傳回快取函式的彙總效能統計資料。 此檢視會針對每個快取函式計畫傳回一個資料列,而且資料列的存留期與函式維持快取狀態的時間一樣長。 從快取中移除函式時,對應的資料列也會從這個檢視中刪除。 此時,就會引發效能統計資料 SQL 追蹤事件 (與 sys.dm_exec_query_stats 很相似)。 傳回純量函式的相關資訊,包括記憶體內部函式和 CLR 純量函式。 不會傳回資料表值函式的相關資訊,以及內嵌純量 UDF 內嵌的純量函式相關資訊。

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

注意

sys.dm_exec_function_stats 的結果可能會隨每次執行而有所不同,因為資料只會反映已完成的查詢,而不是仍在進行中的查詢。

資料行名稱 資料類型 描述
database_id int 函式所在的資料庫識別碼。

在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。
object_id int 函式的物件識別碼。
type char(2) 物件類型:FN = 純量值函式
type_desc nvarchar(60) 物件類型的描述:SQL_SCALAR_FUNCTION
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 時間總量 (以微秒為單位)。

如果原生編譯函式執行數次的時間少於 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_page_server_reads bigint 這個函式在編譯以來執行所執行的頁面伺服器讀取總數。

適用於:Azure SQL Database 超大規模資料庫。
last_page_server_reads bigint 函式上次執行所執行的頁面伺服器讀取數。

適用於:Azure SQL Database 超大規模資料庫。
min_page_server_reads bigint 這個函式在單次執行期間曾執行的最小頁面伺服器讀取數。

適用於:Azure SQL Database 超大規模資料庫。
max_page_server_reads bigint 這個函式在單次執行期間曾執行的最大頁面伺服器讀取數。

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

權限

在 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) 'function 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_function_stats AS d  
ORDER BY [total_worker_time] DESC;  

另請參閱

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

sys.dm_exec_trigger_stats (Transact-SQL)
sys.dm_exec_procedure_stats (Transact-SQL)