设为首页 收藏本站
查看: 804|回复: 0

[经验分享] SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话

[复制链接]

尚未签到

发表于 2018-10-19 09:02:48 | 显示全部楼层 |阅读模式
SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话
  如果您具有想要转换为扩展事件会话的现有 SQL 跟踪脚本,则可以使用本主题中的过程创建等效的扩展事件会话。 通过使用 trace_xe_action_map 和 trace_xe_event_map 系统表中的信息,您可以收集进行转换所必需的信息。
  这些步骤包括以下内容:

  执行现有脚本以便创建一个 SQL 跟踪会话,然后获取该跟踪的>  运行一个查询,该查询使用 fn_trace_geteventinfo 函数来为每个 SQL 跟踪事件类及其关联列找到等效的扩展事件的事件和操作。
  使用 fn_trace_getfilterinfo 函数列出要使用的筛选器和等效的扩展事件操作。
  手动创建扩展事件会话,并且使用等效的扩展事件的事件、操作和谓词(筛选器)。
获取跟踪ID
  在查询编辑器中打开 SQL 跟踪脚本,然后执行该脚本以便创建跟踪会话。 请注意,无需运行该跟踪会话即可完成此过程。

  获取跟踪的>SELECT * FROM sys.traces;  
GO
  注意

  跟踪>确定等效的扩展事件

  若要确定等效的扩展事件的事件和操作,请运行以下查询,其中,trace_id 设置为您在之前过程中获取的跟踪>  注意

  在这个示例中,使用默认跟踪 (1) 的跟踪>USE MASTER;  
GO
  
DECLARE @trace_id int;
  
SET @trace_id = 1;
  
SELECT DISTINCT el.eventid, em.package_name, em.xe_event_name AS 'event'
  
, el.columnid, ec.xe_action_name AS 'action'
  
FROM (sys.fn_trace_geteventinfo(@trace_id) AS el
  
LEFT OUTER JOIN sys.trace_xe_event_map AS em
  
ON el.eventid = em.trace_event_id)
  
LEFT OUTER JOIN sys.trace_xe_action_map AS ec
  
ON el.columnid = ec.trace_column_id
  
WHERE em.xe_event_name IS NOT NULL AND ec.xe_action_name IS NOT NULL;

  将返回等效的扩展事件的事件>  在某些情况下,筛选列将映射到默认在扩展事件的事件中包括的事件数据字段。 因此,“Extended_Events_action_name”列将为 NULL。 如果发生此情况,您必须执行以下操作以便确定哪一数据字段等效于筛选列:
  对于返回 NULL 的操作,标识脚本中哪些 SQL 跟踪事件类包含要筛选的列。

  例如,您可能使用了 SP:StmtCompleted 事件类,并且对 Duration 跟踪列名(SQL 跟踪事件类>  对于您在前一步骤中标识的每个 SQL 跟踪事件类,找到等效的扩展事件的事件名称。 (如果您不清楚等效的事件名称,请使用查看与 SQL 跟踪事件类等效的扩展事件主题中的查询。)
  使用下面的查询可以标识要用于您在前一步骤中标识的事件的正确的数据字段。 该查询将在“事件字段”列中显示扩展事件数据字段。 在该查询中,用您在前一步骤中指定的事件名称替换 。
SELECT xp.name package_name, xe.name event_name  
,xc.name event_field, xc.description
  
FROM sys.trace_xe_event_map AS em
  
INNER JOIN sys.dm_xe_objects AS xe
  
ON em.xe_event_name = xe.name
  
INNER JOIN sys.dm_xe_packages AS xp
  
ON xe.package_guid = xp.guid AND em.package_name = xp.name
  
INNER JOIN sys.dm_xe_object_columns AS xc
  
ON xe.name = xc.object_name
  
WHERE xe.object_type = 'event' AND xc.column_type  'readonly'
  
AND em.xe_event_name = '';
  例如,SP:StmtCompleted 事件类映射到 sp_statement_completed 扩展事件的事件。 如果您在查询中将 sp_statement_completed 指定为事件名称,则“event_field”列将显示默认随该事件包括的字段。 在查看这些字段时,您会看到有一个“duration”字段。 若要在等效的扩展事件会话中创建该筛选器,您要添加一个谓词,例如“WHERE duration > 0”。
创建扩展事件会话
  使用查询编辑器可以创建扩展事件会话,并且将输出写入某一文件目标。 下面的步骤描述单个查询,并且提供介绍如何生成查询的说明。 有关完整查询示例,请参阅本主题的“示例”部分。
  添加语句以便创建事件会话,并且使用您要用于扩展事件会话的名称替换 ession_name。
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name')  
DROP EVENT SESSION [Session_Name] ON SERVER;
  
CREATE EVENT SESSION [Session_Name]
  
ON SERVER;
  添加在“确定等效的扩展事件”过程中作为输出返回的扩展事件的事件和操作,并且添加在“确定在脚本中使用的筛选器”过程中标识的谓词(筛选器)。

  下面的示例使用一个 SQL 跟踪脚本,该脚本包括 SQL:StmtStarting 和 SP:StmtCompleted 事件类,以及用于会话>  Eventid package_name event columnid action
  44 sqlserver sp_statement_starting 6 nt_username
  44 sqlserver sp_statement_starting 9 client_pid
  44 sqlserver sp_statement_starting 10 client_app_name
  44 sqlserver sp_statement_starting 11 server_principal_name
  44 sqlserver sp_statement_starting 12 session_id
  45 sqlserver sp_statement_completed 6 nt_username
  45 sqlserver sp_statement_completed 9 client_pid
  45 sqlserver sp_statement_completed 10 client_app_name
  45 sqlserver sp_statement_completed 11 server_principal_name
  45 sqlserver sp_statement_completed 12 session_id
  为了将此结果集转换为等效的扩展事件,添加了 sqlserver.sp_statement_starting 和 sqlserver.sp_statement_completed 事件以及操作列表。 谓词语句作为 WHERE 子句包括。
ADD EVENT sqlserver.sp_statement_starting  
(ACTION
  
(
  
sqlserver.nt_username,
  
sqlserver.client_pid,
  
sqlserver.client_app_name,
  
sqlserver.server_principal_name,
  
sqlserver.session_id
  
)
  
WHERE sqlserver.session_id = 59
  
),
  
ADD EVENT sqlserver.sp_statement_completed
  
(ACTION
  
(
  
sqlserver.nt_username,
  
sqlserver.client_pid,
  
sqlserver.client_app_name,
  
sqlserver.server_principal_name,
  
sqlserver.session_id
  
)
  
WHERE sqlserver.session_id = 59 AND duration > 0
  
)
  添加异步文件目标,并且使用您要用来保存输出的位置替换文件路径。 在指定文件目标时,必须包括日志文件和元数据文件路径文件。
ADD TARGET package0.asynchronous_file_target(  
SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');
查看结果
  您可以使用 sys.fn_xe_file_target_read_file 函数查看输出。 为此,运行以下查询,并且使用您指定的路径替换文件路径:
SELECT *, CAST(event_data as XML) AS 'event_data_XML'  
FROM sys.fn_xe_file_target_read_file('c:\temp\ExtendedEventsStoredProcs*.xel', 'c:\temp\ExtendedEventsStoredProcs*.xem', NULL, NULL);
  注意
  将事件数据转换为 XML 是可选的。
示例
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name')  
DROP EVENT SESSION [session_name] ON SERVER;
  
CREATE EVENT SESSION [session_name]
  
ON SERVER
  
ADD EVENT sqlserver.sp_statement_starting
  
(ACTION
  
(
  
sqlserver.nt_username,
  
sqlserver.client_pid,
  
sqlserver.client_app_name,
  
sqlserver.server_principal_name,
  
sqlserver.session_id
  
)
  
WHERE sqlserver.session_id = 59
  
),
  
ADD EVENT sqlserver.sp_statement_completed
  
(ACTION
  
(
  
sqlserver.nt_username,
  
sqlserver.client_pid,
  
sqlserver.client_app_name,
  
sqlserver.server_principal_name,
  
sqlserver.session_id
  
)
  
WHERE sqlserver.session_id = 59 AND duration > 0
  
)
  
ADD TARGET package0.asynchronous_file_target
  
(SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');
  参考:
  http://technet.microsoft.com/zh-cn/library/ff878264%28v=sql.110%29.aspx



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623418-1-1.html 上篇帖子: sql语句(基础) 下篇帖子: Lync server 2013 更新安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表