AlwaysOn Ring Buffers

一些AlwaysOn的诊断信息可以从SQL Server ring buffers。或者从sys.dm_os_ring_buffers。ring buffer在SQL Server启动的时候被创建,SQL Server系统为内部诊断记录警告。

通过以下查询获取所有事件记录

SELECT * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type LIKE '%HADR%'

为了让数据更加可控,可以通过日期,ring buffer类型来过滤数据。以下是获取指定ring buffer的查询

DECLARE @runtime datetime

SET @runtime = GETDATE()

SELECT CONVERT (varchar(30), @runtime, 121) as data_collection_runtime,

DATEADD (ms, -1 * (inf.ms_ticks - ring.[timestamp]), GETDATE()) AS ring_buffer_record_time,

ring.[timestamp] AS record_timestamp, inf.ms_ticks AS cur_timestamp, ring.*

FROM sys.dm_os_ring_buffers ring

CROSS JOIN sys.dm_os_sys_info inf where ring_buffer_type='<RING_BUFFER_TYPE>'

Record列包含了XML格式的诊断信息。XML数据和ring buffer类型不同。 为了让XML更加可读,你需要客户化TSQL提取想要的XML元素。比如如下语句,获取所有RING_BUFFER_HADRDBMGR_API ring buffer,并且XML数据放入独立的表的列。

WITH hadr(ts, type, record) AS

(

SELECT timestamp AS ts, ring_buffer_type AS type, CAST(record AS XML) AS record

FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_HADRDBMGR_API'

)

SELECT

ts,

type,

record.value('(./Record/@id)[1]','bigint') AS [Record ID],

record.value('(./Record/@time)[1]','bigint') AS [Time],

record.value('(./Record/HadrDbMgrAPI/dbId)[1]', 'bigint') AS [DBID],

record.value('(/Record/HadrDbMgrAPI/API)[1]', 'varchar(50)') AS [API],

record.value('(/Record/HadrDbMgrAPI/Action)[1]', 'varchar(50)') AS [Action],

record.value('(/Record/HadrDbMgrAPI/role)[1]', 'int') AS [Role],

record.value('(/Record/Stack)[1]', 'varchar(100)') AS [Call Stack]

FROM hadr

ORDER BY record.value('(./Record/@time)[1]','bigint') DESC

GO

1. AlwaysOn Ring Buffer类型

sys.dm_os_ring_buffers有4种类的ring buffer。

AlwaysOn Ring Buffer Type

Description

RING_BUFFER_HADRDBMGR_API

Records state transitions that have taken place or are taking place. When looking at the state transitions pay close attention to the objectType values.

XML

<Recordid="11" type="RING_BUFFER_HADRDBMGR_STATE" time="860243">

<HadrDbMgrState>

<objectType>HadrUsers</objectType>

<currentState>HDbMState_Starting</currentState>

<proposedState>HDbMState_Started</proposedState>

<targetState>HDbMState_Started</targetState>

<legalTransition>Y</legalTransition>

<role>1</role>

</HadrDbMgrState>

</Record>

RING_BUFFER_HADRDBMGR_STATE

Records internal method or function calls made by AlwaysOn activity. It can show information such as suspend, resume, or role changes, including both the entry and exit points.

XML

<Recordid="45" type="RING_BUFFER_HADRDBMGR_STATE" time="1723487912">

<HadrDbMgrState>

<dbId>5</dbId>

<objectType>HadrDbMgr</objectType>

<currentState>HDbMState_Starting</currentState>

<proposedState>HDbMState_Started</proposedState>

<targetState>HDbMState_Started</targetState>

<legalTransition>Y</legalTransition>

<role>2</role>

</HadrDbMgrState>

</Record>

RING_BUFFER_HADRDBMGR_COMMIT

XML

<Recordid="0" type="RING_BUFFER_HADRDBMGR_COMMIT" time="1723475368">

<HadrDbMgrCommitPolicy>

<dbId>5</dbId>

<replicaId>883a18f5-97d5-450f-8f8f-9983a4fa5299</replicaId>

<dbHardenPolicy>KillAll</dbHardenPolicy>

<dbSyncConfig>0x0</dbSyncConfig>

<syncPartnerCount>0</syncPartnerCount>

<minSyncPartnerConfig>0</minSyncPartnerConfig>

<partnerHardenPolicy>KillAll</partnerHardenPolicy>

<partnerSyncConfig>0x0</partnerSyncConfig>

<logBlock>0x0000000000000000</logBlock>

<leaseExpired>Y</leaseExpired>

<partnerChange>N</partnerChange>

<role>2</role>

</HadrDbMgrCommitPolicy>

</Record>

RING_BUFFER_HADR_TRANSPORT_STATE

XML

<Recordid="3" type="RING_BUFFER_HADR_TRANSPORT_STATE" time="1723485399">

<HadrTransportState>

<agId>08264B79-D10B-412F-B38D-CA07B08E9BD8</agId>

<localArId>883A18F5-97D5-450F-8F8F-9983A4FA5299</localArId>

<targetArId>628D6349-72DD-4D18-A6E1-1272645660BA</targetArId>

<currentState>HadrSession_Configuring</currentState>

<targetState>HadrSession_Connected</targetState>

<legalTransition>Y</legalTransition>

</HadrTransportState>

</Record>

2. 从Ring Buffer 解析XML数据

你可以从ring buffer解析数据。你先要使用cast转化到XML。

WITH hadr(ts, type, record) AS

(SELECT timestamp AS ts, ring_buffer_type AS type, CAST(record AS XML) AS record

FROM sys.dm_os_ring_buffers

WHERE ring_buffer_type = 'RING_BUFFER_HADRDBMGR_API')

SELECT ts,

type,

record.value('(./Record/@id)[1]','bigint') AS [Record id],

record.value('(./Record/@time)[1]','bigint') AS [Time],

record.value('(./Record/HadrDbMgrAPI/dbId)[1]', 'bigint') AS [dbid],

record.value('(/Record/HadrDbMgrAPI/API)[1]', 'varchar(50)') AS [API],

record.value('(/Record/HadrDbMgrAPI/Action)[1]', 'varchar(50)') AS [Action],

record.value('(/Record/HadrDbMgrAPI/role)[1]', 'int') AS [Role],

record.value('(/Record/Stack)[1]', 'varchar(100)') AS [Call Stack]

FROM hadr

ORDER BY record.value('(./Record/@time)[1]','bigint') DESC

GO

[AlwaysOn Availability Groups]AlwaysOn Ring Buffers的更多相关文章

  1. [AlwaysOn Availability Groups]AlwaysOn健康诊断日志

    AlwaysOn健康诊断日志 为了监控primary可用副本的健康状况,SQL Server资源DLL使用SQL Server2012的过程sp_server_diagnostics. SQL Ser ...

  2. [AlwaysOn Availability Groups]AlwaysOn等待类型

    AlwaysOn等待类型 当排查AlwaysOn延迟,等待统计信息可以在DMV中查看累计的AlwaysOn等待类型. 查看AlwaysOn等待类型 SELECT * FROM sys.dm_os_wa ...

  3. [AlwaysOn Availability Groups]AG排查和监控指南

    AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance ...

  4. [AlwaysOn Availability Groups]排查:AG配置

    排查AG配置 本文主要用来帮助排查在AG配置时出现的问题,包括,AG功能被禁用,账号配置不正确,数据库镜像endpoint不存在,endpoint不能访问. Section Description A ...

  5. [AlwaysOn Availability Groups]DMV和系统目录视图

    DMV和系统目录视图 这里主要介绍AlwaysON的动态管理视图,可以用来监控和排查你的AG. 在AlwaysOn Dashboard,你可以简单的配置的GUI显示很多可用副本的DMV和可用数据库通过 ...

  6. [SQL in Azure] Tutorial: AlwaysOn Availability Groups in Azure (GUI)

    http://msdn.microsoft.com/en-us/library/azure/dn249504.aspx Tutorial: AlwaysOn Availability Groups i ...

  7. [AlwaysOn Availability Groups] 健康模型 Part 2 ——扩展

    健康模型扩展 第一部分已经介绍了AlwayOn健康模型的概述.现在是创建一个自己的PBM策略,然后设置为制定的归类.创建这些策略,创建之后修改一下配置,dashboard就会自动评估这些策略. 场景, ...

  8. [AlwaysOn Availability Groups]健康模型 Part 1——概述

    健康模型概述 在成功部署AG之后,跟踪和维护健康状况是很重要的. 1.AG健康模型概述 AG的健康模型是基于策略管理(Policy Based Management PBM)的.如果不熟悉这个特性,可 ...

  9. [AlwaysOn Availability Groups]监控AG性能

    监控AG性能 AG的性能的性能方面,在关键任务数据库上进行语句级维护性能是很重要的.理解AG如何传输日志到secondary副本对评估RTO和RPO,表明AG是否性能不好. 1. 数据同步步骤 为了评 ...

随机推荐

  1. Atitit 多元化战略 适合我们发展 的核心业务attilax总结

    Atitit 多元化战略 适合我们发展 的核心业务attilax总结 1.1. 历史的大趋势,全球范围内人员的大流动1 1.2. 衣食住行1 1.3. 农村包围城市战略1 1.4. 挪开三座大山(住房 ...

  2. WCF学习之旅—请求与答复模式和单向模式(十九)

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...

  3. 07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  4. SQLSERVER聚集索引与非聚集索引的再次研究(下)

    SQLSERVER聚集索引与非聚集索引的再次研究(下) 上篇主要说了聚集索引和简单介绍了一下非聚集索引,相信大家一定对聚集索引和非聚集索引开始有一点了解了. 这篇文章只是作为参考,里面的观点不一定正确 ...

  5. 【.NET深呼吸】基础:自定义类型转换

    照例,老周在开始吹牛之前,先讲讲小故事,这是朋友提出的建议,老TMD写技术有什么了不起的,人人都会写.后来老周想想,也确实,代码谁不会写,能写到有品位有感悟,就不容易做到.于是,老周接受了该朋友的建议 ...

  6. 原创:CSS3技术-雪碧图自适应缩放与精灵动画方案

    花了一个礼拜完成了慕课网定制的七夕主题效果,其中有一个没实现好的功能,就是雪碧图的自适应缩放 ps: 以下实现都是基于移动端的处理 原图如下: 人物是采用的是雪碧图,通过坐标绝对数据取值 问题很明显, ...

  7. JavaScript权威设计--JavaScript对象(简要学习笔记七)

    1.with语句 语法: width(object){ statement } with语句可用于临时扩展作用域链.作用域链可以按序检索的对象列表,通过它可以进行变量名解析. with将object添 ...

  8. ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求

    之所以称ASP.NET Core是一个Web开发平台,源于它具有一个极具扩展性的请求处理管道,我们可以通过这个管道的定制来满足各种场景下的HTTP处理需求.ASP. NET Core应用的很多特性,比 ...

  9. SQL Server-聚焦使用索引和查询执行计划(五)

    前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...

  10. webpack配置别名alias出现的错误匹配

    @(webpack) webpack是一款功能强大的前端构建工具,不仅仅是针对js,它也可通过各种loader来构建相关的less,html,image等各种资源,将webpack配合流程制定工具gu ...