我们之前创建了一个用户定义的函数,该函数在一周内显示为“暂停”状态:
USE master
SELECT *
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
ORDER BY start_time
上面查询中的行将“status”视为“已暂停”并继续为每个值增加值:
cpu_time
210262625
total_elapsed_time
623982642
reads
741700958
reads
19754
logical_reads
2938802909
我之前已经杀死了SPID达到370亿logical_reads
但它经常被使用,当然也显示出正确的备份并启动了相同的模式。
我的问题实际上分为两部分。
首先,对于频繁使用的用户定义函数来说,这是正常的行为吗?它是否处于挂起状态?
其次,如何判断调用用户定义函数的次数? (并且实际上称之为)
作为旁注,我对这个功能及其编写方式并不满意,但除非这是“完全异常”的行为,否则我目前没有时间重写它。
答案 0 :(得分:0)
回答你的问题:
wait_type
,wait_time
,last_wait_type
和
wait_resource
。sys.dm_exec_cached_plans
获取usecount。 例如:
SELECT
DB_NAME(dbid) AS db,
OBJECT_NAME(objectid) AS objName,
usecounts,
size_in_bytes,
cacheobjtype
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE plan_handle = 0x05000700A77A001140A10585000000000000000000000000
听起来这个函数要么在某种循环中执行,要么处理大量数据。
检查可以从数据库中调用该函数的所有位置:
SELECT
OBJECT_NAME(object_id) AS objectName
FROM sys.sql_modules
WHERE definition LIKE '%[function_name]%'