SQL Server扩展事件(Extended Events)-- 默认扩展事件会话system_health介绍

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

system_health 会话是 SQL Server 默认包含的扩展事件会话。 该会话在 SQL Server 数据库引擎启动时自动启动,并且运行时不会对性能造成任何明显影响。 该会话收集的系统数据可用于帮助对数据库引擎的性能问题进行故障排除。 因此,我们建议您不要停止或删除该会话。

 

此会话源自产品支持团队的想法,它可以跟踪通常被用来对客户系统进行调试的信息(例如当客户系统发生死锁或出现其它严重错误时)。此会话的创建和启动是 SQL Server实例安装过程的一部分,它在环缓冲区中跟踪事件,因此不会消耗太多内存。

 

该会话收集的信息包括:

 

l 发生严重性 >=20 的错误的任何会话的 sql_text 和 session_id。

l 发生与内存有关的错误的任何会话的 sql_text 和 session_id。 这些错误包括 17803、701、802、8645、8651、8657 和 8902。

l 任何无法完成的计划程序问题的记录。 (这些问题在 SQL Server 错误日志中显示为错误 17883。)

l 检测到的任何死锁。

l 等待闩锁(或其他相关资源)的时间 > 15 秒的任何会话的 callstack、sql_text 和 session_id 。

l 等待锁的时间 > 30 秒的任何会话的 callstack、sql_text 和 session_id 。

l 已长时间等待以获得抢先等待的任何会话的 callstack、sql_text 和 session_id。 持续时间因等待类型而异。 在抢先等待中,SQL Server 等待的是外部 API 调用。

l CLR 分配失败和虚拟分配失败的调用堆栈和 session_id。

l 有关内存 Broker、计划程序监视、内存节点 OOM、安全性和连接的 ring_buffer 事件。

l sp_server_diagnostics 中的系统组件结果。

l scheduler_monitor_system_health_ring_buffer_recorded 收集的实例运行状况。

l CLR 分配失败。

l 使用 connectivity_ring_buffer_recorded 时的连接错误。

l 使用 security_error_ring_buffer_recorded 时的安全错误。

 

查看会话定义


下面显示默认事件会话system_health的定义:

 

1
2
3
4
5
6
7
8
9
10
SELECT  name ,
event_retention_mode_desc  AS  event_retention_mode,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc  AS  memory_partition_mode,
track_causality,
startup_state
FROM  sys.server_event_sessions
WHERE  name  'system_health' ;

 

下面显示事件、谓词和动作:

 

1
2
3
4
5
6
7
8
9
10
11
12
SELECT  package, e. name , predicate,
(
SELECT  package +  '.'  name  ', '
FROM  sys.server_event_session_actions a
WHERE  a.event_session_id = e.event_session_id
AND  a.event_id = e.event_id
ORDER  BY  package,  name
FOR  XML PATH( '' )
AS  Actions
FROM  sys.server_event_session_events e
INNER  JOIN  sys.server_event_sessions es  ON  e.event_session_id = es.event_session_id
WHERE  es. name  'system_health' ;

 

下面显示目标及其选项:

 

1
2
3
4
5
6
7
8
9
10
11
SELECT  package, t. name ,
(
SELECT  name  '='  cast (value  AS  varchar ) +  ', '
FROM  sys.server_event_session_fields f
WHERE  f.event_session_id = t.event_session_id
AND  f.object_id = t.target_id
FOR  XML PATH( '' )
AS  options
FROM  sys.server_event_session_targets t
INNER  JOIN  sys.server_event_sessions es  ON  t.event_session_id = es.event_session_id
WHERE  es. name  'system_health' ;

 

查看会话数据


当事件会话创建并运行,数据收集在目标用于后续使用。除了文件目标(event_file),从sys.dm_xe_session_targets视图中可以查询到所有的目标数据,需要读取数据通过sys.fn_xe_file_target_read_file()表值函数。从sys.dm_xe_session_targets转换target_data列为XML格式。

 

您可以使用下列代码来查看环缓冲区中包含的内容:

 

1
2
3
4
5
6
SELECT  name , target_name,  CAST (target_data  AS  XML) target_data
FROM  sys.dm_xe_sessions s
INNER  JOIN  sys.dm_xe_session_targets t
ON  s.address = t.event_session_address
WHERE  s. name  'system_health' ;
GO

 

若要查看事件文件中的会话数据,请使用 Management Studio 中提供的扩展事件用户界面。

 

还原system_health会话


如果删除 system_health 会话,则可以通过在查询编辑器中执行 u_tables.sql 文件来还原该会话。 该文件位于下面的文件夹中,其中 C: 表示您安装 SQL Server 程序文件的驱动器:

C:\Program Files\Microsoft SQL Server\MSSQL11.<instanceid>\MSSQL\Install

 

请注意在还原该会话后,必须使用 ALTER EVENT SESSION 语句或使用对象资源管理器中的“扩展事件”节点启动会话。 否则,该会话会在您下次重新启动 SQL Server 服务时自动启动。

system_health 会话是 SQL Server 默认包含的扩展事件会话。 该会话在 SQL Server 数据库引擎启动时自动启动,并且运行时不会对性能造成任何明显影响。 该会话收集的系统数据可用于帮助对数据库引擎的性能问题进行故障排除。 因此,我们建议您不要停止或删除该会话。

 

此会话源自产品支持团队的想法,它可以跟踪通常被用来对客户系统进行调试的信息(例如当客户系统发生死锁或出现其它严重错误时)。此会话的创建和启动是 SQL Server实例安装过程的一部分,它在环缓冲区中跟踪事件,因此不会消耗太多内存。

 

该会话收集的信息包括:

 

l 发生严重性 >=20 的错误的任何会话的 sql_text 和 session_id。

l 发生与内存有关的错误的任何会话的 sql_text 和 session_id。 这些错误包括 17803、701、802、8645、8651、8657 和 8902。

l 任何无法完成的计划程序问题的记录。 (这些问题在 SQL Server 错误日志中显示为错误 17883。)

l 检测到的任何死锁。

l 等待闩锁(或其他相关资源)的时间 > 15 秒的任何会话的 callstack、sql_text 和 session_id 。

l 等待锁的时间 > 30 秒的任何会话的 callstack、sql_text 和 session_id 。

l 已长时间等待以获得抢先等待的任何会话的 callstack、sql_text 和 session_id。 持续时间因等待类型而异。 在抢先等待中,SQL Server 等待的是外部 API 调用。

l CLR 分配失败和虚拟分配失败的调用堆栈和 session_id。

l 有关内存 Broker、计划程序监视、内存节点 OOM、安全性和连接的 ring_buffer 事件。

l sp_server_diagnostics 中的系统组件结果。

l scheduler_monitor_system_health_ring_buffer_recorded 收集的实例运行状况。

l CLR 分配失败。

l 使用 connectivity_ring_buffer_recorded 时的连接错误。

l 使用 security_error_ring_buffer_recorded 时的安全错误。

 

查看会话定义


下面显示默认事件会话system_health的定义:

 

1
2
3
4
5
6
7
8
9
10
SELECT  name ,
event_retention_mode_desc  AS  event_retention_mode,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc  AS  memory_partition_mode,
track_causality,
startup_state
FROM  sys.server_event_sessions
WHERE  name  'system_health' ;

 

下面显示事件、谓词和动作:

 

1
2
3
4
5
6
7
8
9
10
11
12
SELECT  package, e. name , predicate,
(
SELECT  package +  '.'  name  ', '
FROM  sys.server_event_session_actions a
WHERE  a.event_session_id = e.event_session_id
AND  a.event_id = e.event_id
ORDER  BY  package,  name
FOR  XML PATH( '' )
AS  Actions
FROM  sys.server_event_session_events e
INNER  JOIN  sys.server_event_sessions es  ON  e.event_session_id = es.event_session_id
WHERE  es. name  'system_health' ;

 

下面显示目标及其选项:

 

1
2
3
4
5
6
7
8
9
10
11
SELECT  package, t. name ,
(
SELECT  name  '='  cast (value  AS  varchar ) +  ', '
FROM  sys.server_event_session_fields f
WHERE  f.event_session_id = t.event_session_id
AND  f.object_id = t.target_id
FOR  XML PATH( '' )
AS  options
FROM  sys.server_event_session_targets t
INNER  JOIN  sys.server_event_sessions es  ON  t.event_session_id = es.event_session_id
WHERE  es. name  'system_health' ;

 

查看会话数据


当事件会话创建并运行,数据收集在目标用于后续使用。除了文件目标(event_file),从sys.dm_xe_session_targets视图中可以查询到所有的目标数据,需要读取数据通过sys.fn_xe_file_target_read_file()表值函数。从sys.dm_xe_session_targets转换target_data列为XML格式。

 

您可以使用下列代码来查看环缓冲区中包含的内容:

 

1
2
3
4
5
6
SELECT  name , target_name,  CAST (target_data  AS  XML) target_data
FROM  sys.dm_xe_sessions s
INNER  JOIN  sys.dm_xe_session_targets t
ON  s.address = t.event_session_address
WHERE  s. name  'system_health' ;
GO

 

若要查看事件文件中的会话数据,请使用 Management Studio 中提供的扩展事件用户界面。

 

还原system_health会话


如果删除 system_health 会话,则可以通过在查询编辑器中执行 u_tables.sql 文件来还原该会话。 该文件位于下面的文件夹中,其中 C: 表示您安装 SQL Server 程序文件的驱动器:

C:\Program Files\Microsoft SQL Server\MSSQL11.<instanceid>\MSSQL\Install

 

请注意在还原该会话后,必须使用 ALTER EVENT SESSION 语句或使用对象资源管理器中的“扩展事件”节点启动会话。 否则,该会话会在您下次重新启动 SQL Server 服务时自动启动。






















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1599384 ,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
14天前
|
SQL 数据可视化 算法
SQL Server聚类数据挖掘信用卡客户可视化分析
SQL Server聚类数据挖掘信用卡客户可视化分析
|
2天前
|
SQL 存储 数据库连接
LabVIEW与SQL Server 2919 Express通讯
LabVIEW与SQL Server 2919 Express通讯
|
3天前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
12 4
|
4天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
4天前
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
|
4天前
|
SQL 存储 网络协议
SQL Server详细使用教程
SQL Server详细使用教程
26 2
|
4天前
|
SQL 存储 数据库连接
C#SQL Server数据库基本操作(增、删、改、查)
C#SQL Server数据库基本操作(增、删、改、查)
7 0
|
4天前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
5天前
|
SQL 存储 关系型数据库
SQL Server详细使用教程及常见问题解决
SQL Server详细使用教程及常见问题解决
|
6天前
|
SQL 安全 数据库
SQL Server 备份和还原
SQL Server 备份和还原