可以从SQL Server环形缓冲区得到一些诊断AlwaysOn的信息,或从sys.dm_os_ring_buffers动态管理视图。环形缓冲在SQL Server启动的时候创建,在SQL Server系统内记录告警用于内部诊断。它们不被支持,但你仍能从中获取有用的信息。下面的查询能从AlwaysON环形缓冲获取所有的事件记录。
1
|
SELECT
*
FROM
sys.dm_os_ring_buffers
WHERE
ring_buffer_type
LIKE
'%HADR%'
|
为了让数据更好管理,通过日期和环形缓冲类型来过滤数据。下面的查询获取今天特定的环形缓冲中的记录。
1
2
3
4
5
6
7
|
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数据区分不同的环形缓冲类型。对于每一个环形缓冲类型,可以参考下文。为了让XML数据更具可读性,你需要修改T-SQL查询抽取需要的XML元素。例如,下面的查询从RING_BUFFER_HADRDBMGR_API环形缓冲类型获取事件,并格式化XML数据到单独的表列。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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环形缓冲类型
有4种类型的环形缓冲在sys.dm_os_ring_buffers里:
RING_BUFFER_HADRDBMGR_API – 记录已经发生或者正在发生的状态变化。当关注状态变化时,集中注意objectType的值。
RING_BUFFER_HADRDBMGR_STATE – 记录AlwaysOn活动的内部方法和函数调用。可以从中看到例如suspend、resume或role changes,包括所有的入口和出口。
RING_BUFFER_HADRDBMGR_COMMIT
RING_BUFFER_HADR_TRANSPORT_STATE
本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1583956 ,如需转载请自行联系原作者