有没有办法找到在特定会话中调用触发器的次数?我们的 ETL 应用程序正在像每一行一样插入记录而不是语句(即)如果要插入 100 条记录,我认为 ETL 发出 100 条插入语句而不是在单个批次中插入。所以trigger也叫100次。我只想确认触发器被调用了 100 次。
我有一个想法来改变触发器以具有计数器并将其存储在表中以查找触发器调用的次数。
有没有找到这个的本地方法?
有没有办法找到在特定会话中调用触发器的次数?我们的 ETL 应用程序正在像每一行一样插入记录而不是语句(即)如果要插入 100 条记录,我认为 ETL 发出 100 条插入语句而不是在单个批次中插入。所以trigger也叫100次。我只想确认触发器被调用了 100 次。
我有一个想法来改变触发器以具有计数器并将其存储在表中以查找触发器调用的次数。
有没有找到这个的本地方法?
您可以设置扩展事件跟踪并捕获事件类型“sp_statement_completed”。按 object_type='trigger' 过滤跟踪。您还可以传递触发器名称以进一步缩小范围。以下定义将为您提供一个起点。根据您的需要调整文件名、位置、大小和 max_file_size。
解决方案是创建一个日志表,并更改触发器的代码 - 添加一行,每次调用触发器时都会将 1 行插入到日志表中
您可以在日志记录表中包含列 -
将以下代码添加到触发器
然后您可以查询您的日志记录表并查看触发器运行的频率
您甚至可以向触发器添加列和代码以记录 ETL 过程每次运行插入的记录数
添加日志记录可能会对性能产生影响,但前提是您的触发器被非常频繁地调用(每秒数十或数百次调用)
您可能还需要授予 ETL 进程(运行 ETL 任务的登录)权限以插入到您的日志记录表中