我正在运行以下选择:
SELECT tstats.object_id, tstats.database_id, tstats.sql_handle,
DB_NAME(tstats.database_id) AS [db_name], OBJECT_NAME(tstats.object_id) AS
trigger_name, tstats.execution_count, tstats.total_worker_time,
tstats.total_logical_reads, tstats.total_logical_writes, OBJECT_NAME(trgs.parent_id) AS
trigger_parent, getdate() AS [timestamp] FROM sys.dm_exec_trigger_stats tstats INNER
JOIN sys.triggers trgs ON tstats.object_id = trgs.object_id ORDER BY object_id asc
SQL Server 版本是 2019 (RTM-CU24) 标准。
问题是,某些触发器返回两次(相同的对象 ID、不同的执行计数和其他统计信息):
我正在尝试对这个sys.dm_exec_trigger_stats
DMV 进行采样并每分钟生成增量,以查看哪些触发器正在影响应用程序性能 - 我认为数据库名称、触发器的父名称和触发器名称(或 object_id)的组合是唯一的。它们多次返回,具有不同的运行时统计信息,我无法理解。提示表示赞赏。
当缓存键不同时,同一触发器将存在多个缓存条目,这通常是由于不同的会话
SET
选项造成的。此版本的查询返回单列中每个计划的缓存键属性/值对。您可以聚合同一触发器的行以避免重复,这可能足以满足您的目的,但请注意,这可能无法讲述完整的故事,因为每个计划都是独立编译的并且可能不同。