sys.dm_exec_function_stats (Transact-SQL)
適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure 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)