sys.dm_exec_function_stats (Transact-SQL)
适用范围:SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库 Azure SQL 托管实例
返回缓存函数的聚合性能统计信息。 该视图为每个缓存的函数计划都返回一行,行的生存期与函数保持缓存状态的时间一样长。 在从缓存中删除函数时,也将从该视图中删除对应行。 此时,将引发类似于 sys.dm_exec_query_stats 的性能统计信息 SQL 跟踪事件。 返回有关标量函数的信息,包括内存中函数和 CLR 标量函数。 不返回有关表值函数以及使用标量 UDF 内联内联的标量函数的信息。
在 Azure SQL 数据库中,动态管理视图不能公开将影响数据库包含的信息,也不能公开有关用户可以访问的其他数据库的信息。 为了避免暴露此信息,包含不属于所连接租户的数据的每行都会被筛选出。
注意
sys.dm_exec_function_stats 的结果可能因每次执行而异,因为数据仅反映已完成的查询,而不反映仍在进行中的查询。
列名称 | 数据类型 | 描述 |
---|---|---|
database_id | int | 函数所在的数据库 ID。 在 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 数据库超大规模。 |
last_page_server_reads | bigint | 上次执行函数时所执行的页面服务器读取次数。 适用于:Azure SQL 数据库超大规模。 |
min_page_server_reads | bigint | 此函数在单个执行期间所执行的最少页面服务器读取次数。 适用于:Azure SQL 数据库超大规模。 |
max_page_server_reads | bigint | 此函数在单个执行期间所执行的最多页面服务器读取次数。 适用于:Azure SQL 数据库超大规模。 |
权限
对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE
权限。
在 SQL 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、Microsoft Entra 管理员帐户或 ##MS_ServerStateReader##
服务器角色中的成员身份为必填项。 对于所有其他 SQL 数据库服务目标,需要数据库的 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)