我有一个存储过程,其中包含一些CLR函数.我需要判断这些函数在一个存储过程执行期间被调用了多少次.

我在StackOverflow上找到了这个SELECT,但它没有显示CLR函数:

SELECT TOP 25
DB_NAME(fs.database_id) DatabaseName,
OBJECT_NAME(object_id, database_id) FunctionName,
fs.cached_time, fs.last_execution_time, fs.total_elapsed_time,
fs.total_worker_time, fs.total_logical_reads, fs.total_physical_reads,
fs.total_elapsed_time/fs.execution_count AS [avg_elapsed_time],
fs.last_elapsed_time, fs.execution_count
FROM sys.dm_exec_function_stats AS fs
ORDER BY [total_worker_time] DESC;

推荐答案

我建议创建一个扩展的事件会话来跟踪CLR的执行:

 CREATE EVENT SESSION [Track_CLR_Executions] ON SERVER 
ADD 
  EVENT sqlserver.module_start(
    ACTION(
      sqlserver.sql_text, sqlserver.database_id, 
      sqlserver.client_hostname, sqlserver.client_app_name
    ) 
    WHERE 
      (
        sqlserver.like_i_sql_unicode_string(
          sqlserver.sql_text, N '%CLRFunctionName%'
        )
      )
  ) 
ADD 
  TARGET package0.event_file(
    SET 
      filename = N 'Track_CLR_Executions'
  ) WITH (
    MAX_MEMORY = 4096 KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, 
    MAX_DISPATCH_LATENCY = 30 SECONDS, 
    MAX_EVENT_SIZE = 0 KB, MEMORY_PARTITION_MODE = NONE, 
    TRACK_CAUSALITY = ON, STARTUP_STATE = OFF
  )

Sql相关问答推荐

Oracle SQL中的累计总数

Microsoft Access UNION将长文本字段限制为255个字符

计算分段的总权重

如何根据特定的内部json元素值过滤postgres查询结果?

当交叉联接3个或更多表时,实体框架中是否会传输冗余的行数据并占用数据库带宽?

Oracle SQL根据列中的条件 Select 最大记录数

收到%1、%2或%2邮箱的唯一客户

使用列表作为参数进行 Select ,如果为空,则在PostgreSQL中不使用参数进行 Select

Postgres jsonpath运算符的变量替换,如_regex?

SQL:使用年/月/日分区查询某个时间段的数据

为什么SQL in中的空子查询有时被视为null

如何在 golang squirrel lib 中添加 postgreSQL 的distinct on

达到特定值时,从0开始累加求和

Snowflake中的动态SQL优化

for each 客户查找每个类别的最新评分

SQL Server 分区和 Run Case 语句

并非所有变量都绑定在 PL SQL 函数中

如果当前日期是一周中的某一天,则从另一天提取结果

如何使用子查询锁定此查询中的选定行?

删除具有相同 ID 的重复记录 - Postgresql