天天看點

[AlwaysOn Availability Groups]排查:AG超過RTO 排查:AG超過RTO

自動故障轉移或者手動轉移之後,沒有資料都是,你可能會發現切換時間超過了你的RTO。或者當你評估切換時間同步送出secondary副本,發現超過了你的RTO。

通常引起故障轉移超過RTO的原因:

1.報表負荷堵塞了Redo線程。

2.因為資源争用,Redo線程被落下。

Redo線程在secondary副本被一個隻讀長運作語句堵塞。

原因:

在secondary副本,隻讀查詢獲得Sch-s鎖,這些sch-s鎖會堵塞redo線程獲得sch-m鎖執行DDL修改。被堵塞的redo線程不能應用log記錄,直到被釋放。一旦被釋放,可以執行redo。并且允許執行随後的undo和failover過程執行。

診斷和解決:

當redo線程被堵塞,擴充時間會生産,sqlserver.lock_redo_blocked。另外你可以查詢sys.dm_exec_request,檢視那個會話堵塞了redo。

select session_id, command, blocking_session_id,

wait_time, wait_type, wait_resource

from sys.dm_exec_requests where

command = 'DB STARTUP'

可以通過kill會話,強制釋放鎖。

大報表行為降低了secondary的性能,導緻redo線程被落下

當應用log記錄,redo線程讀取log記錄,并且應用這些log通路資料page。Page通路可能造成IO瓶頸,如果page不在記憶體中。如果還有IO密集型的負荷,照成IO資源争用,會降低redo線程的性能。

你可以通過DMV檢視被落下了多少,通過對比last_redone_lsn和last_received_lsn

select recovery_lsn, truncation_lsn, last_hardened_lsn, last_received_lsn,

last_redone_lsn,

last_redone_time

from sys.dm_hadr_database_replica_states