SELECT p.name package_name,
o.name event_name,
c.name event_field,
DurationUnit= CASE
WHEN c.description LIKE '%milli%'
THEN SUBSTRING(c.description, CHARINDEX('milli', c.description),12)
WHEN c.description LIKE '%micro%'
THEN SUBSTRING(c.description, CHARINDEX('micro', c.description),12)
ELSE NULL
END,
c.type_name field_type,
c.column_type column_type
FROM sys.dm_xe_objects o
JOIN sys.dm_xe_packages p ON o.package_guid = p.guid
JOIN sys.dm_xe_object_columns c ON o.name = c.object_name
WHERE o.object_type = 'event'
AND c.name ='duration'
它是毫秒、微秒和一些未知的混合。最简单的查找方法是我使用下面的 tsql 代码来确定哪个是什么。
这是来自 SQL 2016 SP1 服务器的结果集。我只发了一部分。查看 DurationUnit 列,您可以看到 3 个不同的值。
对于 NULL ,我发现最好的选择是运行(如果可能的话,开始和结束时间)并找到单位是什么。
我对 vnext SQL Server 运行了相同的查询,并确认我们将来会带来同样的困惑。
您还可以在 SSMS 中“打开”XE 会话并查看“事件”选项卡的“配置”部分中的详细信息 - 因为持续时间字段的描述通常提供正在使用的时间单位。