[AlwaysOn Availability Groups]AlwaysOn Ring Buffers

简介:

AlwaysOn Ring Buffers

一些AlwaysOn的诊断信息可以从SQL Server ring buffers。或者从sys.dm_os_ring_buffersring bufferSQL 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_buffers4种类的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="11type="RING_BUFFER_HADRDBMGR_STATEtime="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="45type="RING_BUFFER_HADRDBMGR_STATEtime="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="0type="RING_BUFFER_HADRDBMGR_COMMITtime="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="3type="RING_BUFFER_HADR_TRANSPORT_STATEtime="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

 



    本文转自 Fanr_Zh 博客园博客,原文链接:http://www.cnblogs.com/Amaranthus/p/4986900.html,如需转载请自行联系原作者



相关文章
|
机器学习/深度学习 编解码 搜索推荐
【卷积集】近万字长文总结了日常使用的“卷积”特征,内附代码实现送给准备面试的你
【卷积集】近万字长文总结了日常使用的“卷积”特征,内附代码实现送给准备面试的你
285 0
|
6月前
|
存储 弹性计算 人工智能
阿里云服务器第九代企业级g9i实例技术特点、性能优势、适用场景简介
阿里云不断推出创新产品和技术,以满足市场对高性能、高可靠、高性价比云计算资源的需求。近日,阿里云正式面向全球发布了第九代企业级实例ECS g9i,并开启了邀测活动。本文将深入解析阿里云ECS g9i实例的技术特点、性能优势、适用场景以及购买建议,帮助用户更好地了解并选择合适的云服务器实例。
|
11月前
|
人工智能 API
大模型生成短视频
这篇文章详细介绍了如何利用大模型生成短视频,包括配置环境、对接视频素材网站以及生成视频的具体步骤。
244 4
大模型生成短视频
|
缓存 JavaScript 前端开发
vue中使用keep-alive的问题
vue中使用keep-alive的问题
370 59
LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60
LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60
219 0
|
JavaScript
Vue3倒计时(Countdown)
这篇文章介绍了如何在Vue 3中创建一个可自定义的倒计时组件(Countdown),允许设置标题、前缀、后缀、格式和样式,并提供了组件的实现代码和使用示例。
974 2
Vue3倒计时(Countdown)
|
10月前
|
Go
go语言使用常量和编译时常量表达式
【10月更文挑战第19天】
117 2
|
算法 C# 数据安全/隐私保护
|
算法 网络协议 应用服务中间件
(五)网络编程之流量接入层设计:基于性能怪兽从零构建日均亿级吞吐量的网关架构!
在前篇关于《Nginx》的文章中曾经提到:单节点的Nginx在经过调优后,可承载5W左右的并发量,同时为确保Nginx的高可用,在文中也结合了Keepalived对其实现了程序宕机重启、主机下线从机顶替等功能。
224 0
|
机器学习/深度学习 人工智能 自然语言处理
人工智能、机器学习、深度学习:技术革命的深度解析(二)
人工智能、机器学习、深度学习:技术革命的深度解析(二)
209 0