gpt4 book ai didi

sql-server - 如何读取扩展事件 .xel 文件

转载 作者:行者123 更新时间:2023-12-01 06:19:25 28 4
gpt4 key购买 nike

我有一个特定的请求来读取/解析 .xel 文件,它是扩展事件文件,我怎样才能有效地做到这一点。我的一位同事建议使用 API 来解析文件,但是我相信应该有一种方法可以通过 SQL 代码本身来实现。非常感谢帮助。

最佳答案

要读取 .xel 文件,您可以使用 sys.fn_xe_file_target_read_file功能。例如:

select cast(event_data as XML) as event_data
from sys.fn_xe_file_target_read_file('D:\Folder\MySession*.xel', null, null, null)

此外,您可能希望解析返回的 XML 以获取表格格式的数据。为此,您需要决定从 XML 中提取哪些数据并编写适当的 XPath 表达式。例如:
-- You have to know element names and their data types
select
n.value('(@name)[1]', 'varchar(50)') as event_name,
n.value('(@package)[1]', 'varchar(50)') AS package_name,
n.value('(@timestamp)[1]', 'datetime2') AS [utc_timestamp],
n.value('(data[@name="duration"]/value)[1]', 'int') as duration,
n.value('(data[@name="cpu_time"]/value)[1]', 'int') as cpu,
n.value('(data[@name="physical_reads"]/value)[1]', 'int') as physical_reads,
n.value('(data[@name="logical_reads"]/value)[1]', 'int') as logical_reads,
n.value('(data[@name="writes"]/value)[1]', 'int') as writes,
n.value('(data[@name="row_count"]/value)[1]', 'int') as row_count,
n.value('(data[@name="last_row_count"]/value)[1]', 'int') as last_row_count,
n.value('(data[@name="line_number"]/value)[1]', 'int') as line_number,
n.value('(data[@name="offset"]/value)[1]', 'int') as offset,
n.value('(data[@name="offset_end"]/value)[1]', 'int') as offset_end,
n.value('(data[@name="statement"]/value)[1]', 'nvarchar(max)') as statement,
n.value('(action[@name="database_name"]/value)[1]', 'nvarchar(128)') as database_name
from (select cast(event_data as XML) as event_data
from sys.fn_xe_file_target_read_file('D:\Folder\MySession*.xel', null, null, null)) ed
cross apply ed.event_data.nodes('event') as q(n)

关于sql-server - 如何读取扩展事件 .xel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147992/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com