【问题标题】:SQL Server : How to display all extended event tablesSQL Server:如何显示所有扩展事件表
【发布时间】:2015-07-20 22:28:30
【问题描述】:
当我运行查询时
SELECT * FROM sys.sysobjects WHERE xtype = 'U'
我发现还添加了 2 个表 trace_xe_action_map 和 trace_xe_event_map,然后我意识到这两个兄弟姐妹来自扩展事件,但我记得将它们插入到我的数据库中。但是我不知道他们都属于哪个xtype。因为如果我在 SQL Server Management Studio 中运行上述查询;我将找不到他们。我应该进行什么查询才能在 SQL Server Management Studio 中显示它们?
【问题讨论】:
标签:
sql-server
tsql
database-table
extended-events
【解决方案1】:
trace_xe_action_map (Transact-SQL)
对于映射到 SQL 跟踪列 ID 的每个扩展事件操作,包含一行。此表存储在主数据库中的 sys 架构中。
适用于:SQL Server 2012+。
trace_xe_event_map (Transact-SQL)
对于映射到 SQL 跟踪事件类的每个扩展事件事件,包含一行。此表存储在主数据库中的 sys 架构中。
适用于:SQL Server 2012+。
您可以使用以下查询来识别与 SQL Trace 事件类等效的扩展事件事件:
SELECT te.name, xe.package_name, xe.xe_event_name
FROM sys.trace_events AS te
LEFT JOIN sys.trace_xe_event_map AS xe
ON te.trace_event_id = xe.trace_event_id
WHERE xe.trace_event_id IS NOT NULL
并非所有事件类都有等效的扩展事件事件。您可以使用以下查询列出没有等效扩展事件的事件类:
SELECT te.trace_event_id, te.name
FROM sys.trace_events AS te
LEFT JOIN sys.trace_xe_event_map AS xe
ON te.trace_event_id = xe.trace_event_id
WHERE xe.trace_event_id IS NULL
通过执行这个查询:
SELECT *
FROM sys.all_objects -- also FROM sys.system_objects
WHERE name like 'trace_xe_%'
你会得到这样的结果:
name | object_id | type | type_desc
--------------------+------------+------+------------
trace_xe_action_map | -463397375 | U | USER_TABLE
trace_xe_event_map | -319884821 | U | USER_TABLE