SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_EXCEPTION 跟踪异常

SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_EXCEPTION 跟踪异常

动态管理视图sys.dm_os_ring_buffers使得实时定位问题更加容易。环形缓冲包含大量的在服务器上发生的事件。当前,我正碰到锁请求超时问题。根据SQL Server Profiler跟踪捕获,发现服务器收到大量如下信息:

Lock request time out period exceeded.

我们找到了语句并修改,来阻止所请求超时的发生。现在服务器正被监控,我不想运行SQL Server Profiler去跟踪这个消息的产生。所以,我想用环形缓冲动态管理视图去监控是否服务器上有进一步的锁请求超时发生。这使得监控实例更容易。

下面的脚本给出了一个存储在环形缓冲区中的异常的时间范围,输出了大量的发生的异常。

对于SQL Server 2005:

DECLARE @ts_now BIGINT,@dt_max BIGINT, @dt_min BIGINT
SELECT @ts_now = cpu_ticks / CONVERT(FLOAT, cpu_ticks_in_ms) FROM sys.dm_os_sys_info
select @dt_max = MAX(timestamp), @dt_min = MIN(timestamp) from sys.dm_os_ring_buffers WHERE ring_buffer_type = N‘RING_BUFFER_EXCEPTION‘
select DATEADD(ms, -1 * (@ts_now - @dt_max), GETDATE()) AS MaxTime,
DATEADD(ms, -1 * (@ts_now - @dt_min), GETDATE()) AS MinTime
SELECT record_id,
DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime,y.Error,UserDefined,b.description as NormalizedText
FROM (
SELECT
record.value(‘(./Record/@id)[1]‘, ‘int‘) AS record_id,
record.value(‘(./Record/Exception/Error)[1]‘, ‘int‘) AS Error,
record.value(‘(./Record/Exception/UserDefined)[1]‘, ‘int‘) AS UserDefined,TIMESTAMP
FROM (
SELECT TIMESTAMP, CONVERT(XML, record) AS record
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = N‘RING_BUFFER_EXCEPTION‘
AND record LIKE ‘% %‘) AS x) AS y
INNER JOIN sys.sysmessages b
on y.Error = b.error
WHERE b.msglangid = 1033 and y.Error = 1222 -- Change the message number to the message number that you want to monitor
ORDER BY record_id DESC

对于SQL Server 2008:

DECLARE @ts_now BIGINT,@dt_max BIGINT, @dt_min BIGINT
SELECT @ts_now = cpu_ticks/(cpu_ticks/ms_ticks) FROM sys.dm_os_sys_info
select @dt_max = MAX(timestamp), @dt_min = MIN(timestamp) from sys.dm_os_ring_buffers WHERE ring_buffer_type = N‘RING_BUFFER_EXCEPTION‘
select DATEADD(ms, -1 * (@ts_now - @dt_max), GETDATE()) AS MaxTime,
DATEADD(ms, -1 * (@ts_now - @dt_min), GETDATE()) AS MinTime
SELECT record_id,
DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime,Error,UserDefined,text as NormalizedText
FROM (
SELECT
record.value(‘(./Record/@id)[1]‘, ‘int‘) AS record_id,
record.value(‘(./Record/Exception/Error)[1]‘, ‘int‘) AS Error,
record.value(‘(./Record/Exception/UserDefined)[1]‘, ‘int‘) AS UserDefined,TIMESTAMP
FROM (
SELECT TIMESTAMP, CONVERT(XML, record) AS record
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = N‘RING_BUFFER_EXCEPTION‘
AND record LIKE ‘% %‘) AS x) AS y
INNER JOIN sys.messages b
on y.Error = b.message_id
WHERE b.language_id = 1033 and y.Error = 1222 -- Change the message number to the message number that you want to monitor
ORDER BY record_id DESC

时间: 2024-10-03 22:54:52

SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_EXCEPTION 跟踪异常的相关文章

SQL Server 环形缓冲区(Ring Buffer) -- SQL Server 与Ring Buffer的关系介绍

SQL Server 环形缓冲区(Ring Buffer) -- SQL Server 与Ring Buffer的关系 SQL Server 操作系统(SQLOS)负责管理特定于SQL Server的操作系统资源.其中相关的动态管理试图sys.dm_os_ring_buffers将被标识为仅供参考.不提供支持.不保证以后的兼容性. 先看看记录的不同的Ring Buffer类型. select distinct ring_buffer_type from sys.dm_os_ring_buffer

SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_SCHEDULER_MONITOR 获取SQL

SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_SCHEDULER_MONITOR 获取SQL进程的CPU利用率 环形缓冲区存储了有关CPU利用率的信息.这些信息每分钟更新一次.所以你可以跟踪到4小时15分钟内给定时间点的CPU利用率.下面的输出显示了SQL实例的CPU利用率和其他活动进程的CPU利用率.这将帮助我们分析是否SQL Server进程占用大量CPU. 对于SQL Server 2005: declare @ts_now bigint sel

SQL Server 环形缓冲区(Ring Buffer) -- RING BUFFER CONNECTIVITY 的深入理解

SQL Server 环形缓冲区(Ring Buffer) -- RING BUFFER CONNECTIVITY 的深入理解 首先我们从连接的Ring Buffer数据返回的XML来入手. SELECT CAST(record as xml) AS record_data FROM sys.dm_os_ring_buffers WHERE ring_buffer_type= 'RING_BUFFER_CONNECTIVITY' 执行上面的语句,得到下面的结果: 点击XML的超链接,打开文件内容

SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_SECURITY_ERROR 诊断安全相

SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_SECURITY_ERROR 诊断安全相关错误 环形缓冲存储了大量的在过去一段时间段内的安全错误信息,有助于分析SQL Server安全问题. 例如,当你尝试创建一个SQL登录账号,并启用密码策略,但是提供的密码不匹配密码策略.然后,你将会收到一个错误消息说明密码不匹配.这个错误将会存储在环形缓冲区.当你执行下面的查询,你将会导致错误的SPID以及导致失败的API名称.如上面示例描述的,你会找到NetVal

SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_MEMORY_BROKER 诊断内部内存压力

SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_MEMORY_BROKER 诊断内部内存压力 内存Broker 内存Broker的职责是根据其需求在大内存消费者之间分配内存.内存Broker是一种SQLOS的组件,但是与缓冲池紧密结合.此外,内存Broker只会将缓冲池的内存管理器所控制的内存考虑在内.内存Broker会监视缓冲池的内存需求,以及由大内存消费者所消费的内存.基于所收集的信息,它会估计每个消费者的"最优化"内存分布,并将此信息广播

SQL Server 环形缓冲区(Ring Buffer) -- 环形缓冲在AlwaysOn的应用

SQL Server 环形缓冲区(Ring Buffer) -- 环形缓冲在AlwaysOn的应用 可以从SQL Server环形缓冲区得到一些诊断AlwaysOn的信息,或从sys.dm_os_ring_buffers动态管理视图.环形缓冲在SQL Server启动的时候创建,在SQL Server系统内记录告警用于内部诊断.它们不被支持,但你仍能从中获取有用的信息.下面的查询能从AlwaysON环形缓冲获取所有的事件记录. SELECT * FROM sys.dm_os_ring_buffe

SQL Server 2014新特性——Buffer Pool扩展

Buffer Pool扩展 Buffer Pool扩展是buffer pool 和非易失的SSD硬盘做连接.以SSD硬盘的特点来提高随机读性能. 缓冲池扩展优点 SQL Server读以随机读为主,SQL Server IO分为2部分:buffer pool管理方式,和buffer pool. SQL Server 从磁盘中读入数据,并且存放在buffer pool中以供读取和修改,修改完之后脏数据还是放在buffer pool中,当内存紧张执行lazy write把脏数据写入磁盘,并且释放内存

Sql Server来龙去脉系列之三 查询过程跟踪

我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更新.CPU占用过高等,跟踪这些状态是非常有用地. 本章节覆盖了事件系统的关键区域:触发器.事件通知器.改变跟踪.SQL跟踪.扩展事件等.这些事件都有一个相似目的:响应或者记录发生的事件.但每一中事件的工作方式又不一样. 基础:触发器和事件通知器 触发器非常多,Data Manipulation La

SQL Server扩展事件-- 使用system_health默认跟踪会话监控死锁

SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁 转自:http://blog.51cto.com/ultrasql/1600372 自SQL Server 2008以后,提供了扩展事件(Extended Events)来跟踪系统分析定位问题.默认的system_health会话一直在运行,可以帮助你更快的定位问题. 运行如下脚本可以看到system_health扩展事件会话: SELECT * FROM sys.dm_xe_