天天看點

[AlwaysOn Availability Groups]監控AG性能 監控AG性能

AG的性能的性能方面,在關鍵任務資料庫上進行語句級維護性能是很重要的。了解AG如何傳輸日志到secondary副本對評估RTO和RPO,表明AG是否性能不好。

為了評估是否有性能問題,首先需要了解同步過程。性能問題可能出現在同步過程的任何一個環節,瓶頸的定位可以讓你深入的了解問題。以下圖示示範了資料通過過程:

[AlwaysOn Availability Groups]監控AG性能 監控AG性能

Sequence

Step Description

Comments

Useful Metrics

1

Log Generation

日志資料被重新整理到磁盤。日志必須被複制到secondary副本。日志記錄進入到發送隊列.

<a href="https://msdn.microsoft.com/zh-cn/library/ms189883(v=sql.110).aspx">SQL Server:Database &gt; Log bytes flushed\sec</a>

2

Capture

每個資料庫的日志被擷取并且發送到相關的partner隊列,每個資料庫副本都有一個隊列。在可用組在連接配接的情況下,并且資料移動并沒有被挂起,擷取程序持續運作,并且資料庫副本顯示要不是同步的,要不是正在同步,如果擷取程序不能及時掃描并把消息放入隊列,日志發送隊列就會築高。

3

Send

資料庫副本中的消息出隊列,并且發送到相關的secondary副本.

4

Receive and Cache

每個secondary副本接受并且緩存這些資訊.

5

Harden

日志在secondary副本被重新整理。在日志重新整理後,一個通知被發送到primary副本。一旦日志被固化,就表示不會再有資料丢失。

6

Redo

Redo重新整理secondary副本中的page。Page被存放在redo隊列等待被redo完成。

<a href="https://msdn.microsoft.com/zh-cn/library/ff878356(v=sql.110).aspx">SQL Server:Database Replica &gt; Redone Bytes/sec</a>

AG被設計時,在primary副本上帶了流量控制,為了避免太多資源消耗,比如網絡,記憶體資源在所有可用副本上的消耗。這些流量控制不會影響可用副本的健康狀态,但是會影響可用資料庫性能,包括RPO。

日志被primary副本捕獲之後,有2個級别的流量控制。

Level

Number of Gates

Number of messages

Transport

1 per availabiltiy replica

8192

Extended event database_transport_flow_control_action

Database

1 per availability database

11200 (x64)

1600 (x86)

<a href="https://msdn.microsoft.com/zh-cn/library/ms179984(v=sql.110).aspx">DBMIRROR_SEND</a>

Extended event hadron_database_flow_control_action

一旦到達任意一個閥值,log資訊就不會被發送到指定副本或者指定資料庫。一旦從副本收到通知,已發送的消息下降,就可以再發。

除了流量控制,還有一個因素會阻止日志發送。副本的同步要保證LSN是順序的被發送的。在日志被發送之前,日志的LSN會通過最小通知LSN檢查,保證小于閥值。如果2個LSN的空隙大于閥值,消息就不會被發送。一旦空隙小于閥值,消息就會被發送。

故障轉移時間的公式如下:

[AlwaysOn Availability Groups]監控AG性能 監控AG性能

如果AG有多個可用庫,最高的故障轉移時間變長了限制RTO總要因素。

Secondary副本唯一要做的事情就是,redo這些擷取的日志。Redo時間是Tredo,公式如下:

[AlwaysOn Availability Groups]監控AG性能 監控AG性能

Redo_queue是redo隊列的長度,redo_rate是redo的速度。這2個值可以檢視:sys.dm_hadr_database_replica_states

Toverhead over head的時間就是WSFC叢集故障轉移,資料庫online的時間。通常這個時間都很小。

RPO,RPO的公司如下:

[AlwaysOn Availability Groups]監控AG性能 監控AG性能

如果AG包含了多個可用性資料庫,最大的 Tdata_loss  會變成限制RPO的關鍵。

Log發送隊清單示所有資料會因為嚴重錯誤丢失的。不能使用log_send_rate來代替log生成速度,因為RPO評估資料丢失是基于日志生成速度的,而不是基于同步速度的。

最簡單的評估 Tdata_loss 是使用last_commit_time.priamry會把這個值發給所有的secondary,你可以計算primary副本和secondary 副本的值的差,來評估需要多久secondary副本可以追上primary副本。雖然不能準确的表示資料丢失,但是已經很接近了。

本章介紹如何對RPO和RTO進行監控,RPO和RTO的計算請檢視上面2節的介紹。你可以監控這2個值,在超過閥值時發送告警。

通過以下步驟建立AG的告警:

1.啟動ageng服務

2.點開ALwaysOn啟動使用者定義AlwaysOn政策

3.建立條件, Database Replica State/ Add(@EstimatedRecoveryTime, 60) &lt;= 600 

4.建立條件 Database Replica State/EstimatedDataLoss&lt;=3600

5.建立RTO政策,建立RPO政策

Scenario

Description

<a href="http://www.cnblogs.com/Amaranthus/p/4981217.html">排查:AG超過RTO</a>

自動或者手動故障轉移後,沒有資料丢失,但是故障轉移超過了RTO。或者評估發現故障轉移時間超過了

<a href="http://www.cnblogs.com/Amaranthus/p/4981484.html">排查:AG超過RPO</a>

強制故障轉移後,都是的資料超過了RPO。或者異步送出的replica能夠承受的資料丢失超過了RPO。

<a href="http://www.cnblogs.com/Amaranthus/p/4982563.html">排查:Primary上的修改無法在Secondary展現</a>

用戶端程式可以成功的完成primary的修改,但是查詢replia卻沒有反應。

以下擴充時間可以用來排查副本在同步中的情況:

Event Name

Category

Channel

Availability Replica

redo_caught_up

transactions

Debug

Secondary

redo_worker_entry

hadr_transport_dump_message

alwayson

Primary

hadr_worker_pool_task

hadr_dump_primary_progress

hadr_dump_log_progress

hadr_undo_of_redo_log_scan

Analytic

    本文轉自 Fanr_Zh 部落格園部落格,原文連結:http://www.cnblogs.com/Amaranthus/p/4991201.html,如需轉載請自行聯系原作者