分享方式:


sys.dm_hadr_database_replica_states (Transact-SQL)

適用於:SQL Server Azure SQL 受控執行個體

針對參與 Always On 可用性群組的每一個資料庫傳回一個資料列 (SQL Server 本機執行個體正在裝載此群組的可用性複本)。 此動態管理檢視會公開主要和次要複本的狀態資訊。 在次要複本上,此檢視會傳回伺服器實例上每個輔助資料庫的數據列。 在主要複本上,此檢視會針對每個主資料庫傳回一個數據列,以及對應輔助資料庫的額外數據列。

重要

視動作和較高層級狀態而定,資料庫狀態資訊可能無法使用或過期。 此外,這些值只有區域相關性。 例如,在主要複本上,數據行的值 last_hardened_lsn 會反映目前可供主要複本使用的指定輔助資料庫的相關信息,而不是次要複本目前可能擁有的實際強化記錄序號 (LSN)。

資料行名稱 資料類型 描述(主要複本上)
database_id int 資料庫標識碼,在 SQL Server 實例內是唯一的。 此值與 sys.databases 目錄檢視中顯示的值相同。
group_id uniqueidentifier 資料庫所屬可用性群組的標識碼。
replica_id uniqueidentifier 可用性群組內可用性複本的標識碼。
group_database_id uniqueidentifier 可用性群組內資料庫的標識碼。 此標識碼與這個資料庫聯結的每個復本相同。
is_local bit 可用性資料庫是否為本機資料庫,其中一個:

0 = 資料庫不是 SQL Server 實例的本機資料庫。
1 = 資料庫是伺服器實例的本機資料庫。
is_primary_replica bit 1如果複本是主要複本,則傳回 ,如果0它是次要複本,則傳回 。

適用於:SQL Server 2014 (12.x) 和更新版本。
synchronization_state tinyint 數據移動狀態,下列其中一個值。

0 = 未同步處理。 對於主資料庫,表示資料庫尚未準備好將其事務歷史記錄與對應的輔助資料庫同步處理。 對於輔助資料庫,這個值表示資料庫因為連線問題、正在暫停,或在啟動或角色切換期間經歷轉換狀態,而尚未啟動記錄同步處理。

1 = 同步處理。 對於主資料庫,表示資料庫已準備好接受輔助資料庫的掃描要求。 針對輔助資料庫,表示資料庫發生作用中數據移動。

2 = 已同步處理。 主資料庫會顯示 SYNCHRONIZED 取代 SYNCHRONIZING。 當本機快取顯示資料庫已就緒且正在同步處理時,同步認可輔助資料庫會顯示已同步處理。

3 = 還原。 表示當次要資料庫積極取得主要資料庫的頁面時,復原程序中的階段。

注意: 當次要複本上的資料庫處於 REVERTING 狀態時,強制故障轉移至次要複本會使資料庫處於無法啟動為主資料庫的狀態。 資料庫需要重新連線為輔助資料庫,或您需要從記錄備份套用新的記錄檔記錄。

4 = 初始化。 表示次要資料庫跟上復原 LSN 所需的交易記錄正在傳送而且在次要複本上強行寫入時的復原階段。

注意: 當次要複本上的資料庫處於 INITIALIZING 狀態時,強制故障轉移至次要複本會使資料庫處於無法啟動為主資料庫的狀態。 資料庫需要重新連線為輔助資料庫,或您需要從記錄備份套用新的記錄檔記錄。
synchronization_state_desc nvarchar(60) 資料移動狀態的描述,其中一個:

NOT SYNCHRONIZING
SYNCHRONIZING
SYNCHRONIZED
REVERTING
INITIALIZING
is_commit_participant bit 0 = 與這個資料庫相關的交易認可不會同步處理。

1 = 與這個資料庫相關的交易認可已同步處理。

對於異步認可可用性復本上的資料庫,此值一律 0為 。

對於同步認可可用性復本上的資料庫,此值僅適用於主資料庫。
synchronization_health tinyint 反映加入可用性複本上可用性群組之資料庫的同步處理狀態交集,以及可用性複本的可用性模式(同步認可或異步認可模式)。 可以是下列其中一個值。

0 = 狀況不良。 synchronization_state資料庫的 是 0NOT SYNCHRONIZING)。

1 = 部分狀況良好。 如果 synchronization_state1SYNCHRONIZING同步認可可用性復本上的資料庫會視為部分狀況良好。

2 = 狀況良好。 如果 為 ,則synchronization_state同步認可可用性復本上的資料庫會被視為狀況良好,SYNCHRONIZED如果 為 2 ,則異步認可可用性複本上的資料庫會視為狀況良好synchronization_state 1SYNCHRONIZING
synchronization_health_desc nvarchar(60) synchronization_health可用性資料庫的描述。

NOT_HEALTHY
PARTIALLY_HEALTHY
HEALTHY
database_state tinyint 0 = Online
1 = 還原
2 = 復原
3 = 復原擱置中
4 = Suspect
5 = 緊急
6 = 離線

注意:state 中的數據行相同 sys.databases.
database_state_desc nvarchar(60) database_state可用性複本的描述。

ONLINE
RESTORING
RECOVERING
RECOVERY_PENDING
SUSPECT
EMERGENCY
OFFLINE

注意:state_desc 中的數據行相同 sys.databases.
is_suspended bit 資料庫狀態,其中一個:

0 = 繼續
1 = Suspended
suspend_reason tinyint 如果資料庫已暫停,則暫停狀態的原因為下列其中一項:

0 = 用戶動作
1 = 從合作夥伴暫停
2 = Redo
3 = 擷
4 = 套用
5 = 重新啟動
6 = 復原
7 = 重新驗證
8 = 計算次要復本同步處理點時發生錯誤
suspend_reason_desc nvarchar(60) 資料庫暫停狀態原因的描述,其中一個:

SUSPEND_FROM_USER = 使用者手動暫停的數據移動

SUSPEND_FROM_PARTNER = 強制故障轉移之後,資料庫複本會暫停

SUSPEND_FROM_REDO = 重做階段期間發生錯誤

SUSPEND_FROM_APPLY = 將記錄寫入檔案時發生錯誤(請參閱錯誤記錄檔)

SUSPEND_FROM_CAPTURE = 擷取主要複本上的記錄檔時發生錯誤

SUSPEND_FROM_RESTART = 資料庫複本在資料庫重新啟動前暫停 (請參閱錯誤記錄檔)

SUSPEND_FROM_UNDO = 復原階段期間發生錯誤(請參閱錯誤記錄檔)

SUSPEND_FROM_REVALIDATION = 重新連線時偵測到記錄變更不相符 (請參閱錯誤記錄檔)

SUSPEND_FROM_XRF_UPDATE = 找不到常見的記錄點(請參閱錯誤記錄檔)
recovery_lsn numeric(25,0) 在主要復本上,主資料庫在復原或故障轉移之後寫入任何新的記錄檔記錄之前,事務歷史記錄的結尾。 對於指定的輔助資料庫,如果這個值小於目前強化的 LSN (last_hardened_lsn), recovery_lsn 則這個輔助資料庫需要重新同步處理的值(也就是,還原為 並重新初始化至 )。 如果此值大於或等於目前的強化 LSN,則不需要重新同步處理,而且不會發生。

recovery_lsn 反映以零填補的記錄區塊標識碼。 這不是實際的 LSN。 如需如何衍生此值的資訊,請參閱 本文稍後的瞭解 LSN 資料行值
truncation_lsn numeric(25,0) 在主資料庫的主要複本上,反映所有對應輔助資料庫的最小記錄截斷 LSN。 如果封鎖本機記錄截斷(例如備份作業),此 LSN 可能高於本機截斷 LSN。

針對指定的輔助資料庫,反映該資料庫的截斷點。
truncation_lsn 反映以零填補的記錄區塊標識碼。 這不是實際的記錄序號。
last_sent_lsn numeric(25,0) 當您查詢主要複本時, last_sent_lsn 會針對每個次要複本資料庫數據列報告。 記錄檔區塊標識碼,指出主要記錄檔已傳送到哪一個記錄區塊。 這是所傳送之下一個記錄區塊的標識碼,而不是最近傳送之記錄區塊的標識碼。

last_sent_lsn 反映以零填補的記錄區塊標識碼。 這不是實際的記錄序號。
last_sent_time datetime 當您查詢主要複本時, last_sent_time 會針對每個次要複本資料庫數據列報告。 傳送最後一個記錄區塊的時間。
last_received_lsn numeric(25,0) 當您查詢次要複本時, last_received_lsn 會針對本機次要複本資料庫數據列報告。 記錄區塊標識碼,可識別裝載此輔助資料庫的次要複本已接收所有記錄區塊的點。

last_received_lsn 反映以零填補的記錄區塊標識碼。 這不是實際的記錄序號。
last_received_time datetime 當您查詢次要複本時, last_received_time 會針對本機次要複本資料庫數據列報告。 上次收到訊息中的記錄區塊標識碼在次要複本上讀取的時間。
last_hardened_lsn numeric(25,0) 記錄區塊的開頭,其中包含輔助資料庫上最後一個強化 LSN 的記錄檔記錄。

在異步認可主資料庫,或在目前原則為 delay的同步認可資料庫上,值為 NULL。 對於其他同步認可主資料庫, last_hardened_lsn 表示所有輔助資料庫的強化 LSN 下限。

注意: 反映 last_hardened_lsn 以零填補的記錄區塊標識符。 這不是實際的記錄序號。 如需詳細資訊,請參閱 本文稍後的瞭解 LSN 資料行值
last_hardened_time datetime 在輔助資料庫上,最後一個強化 LSN (last_hardened_lsn) 的記錄區塊標識碼時間。 在主資料庫上,反映對應至最小強化 LSN 的時間。
last_redone_lsn numeric(25,0) 輔助資料庫上重做之最後一筆記錄檔記錄的實際記錄序號。 last_redone_lsn一律小於 last_hardened_lsn
last_redone_time datetime 在輔助資料庫上重做最後一筆記錄檔記錄的時間。
log_send_queue_size bigint 尚未傳送至輔助資料庫的記錄檔記錄數目,以 KB 為單位。
log_send_rate bigint 主要複本實例在上一個使用期間傳送數據的平均速率,以 KB 為單位/秒。
redo_queue_size bigint 次要複本記錄檔中尚未重做之記錄檔中的記錄檔記錄數目,以 KB 為單位。
redo_rate bigint 在指定的輔助資料庫上重做記錄記錄的平均速率,以 KB 為單位/秒。

redo_rate 計算方式是除以重做時的總記錄位元節重做,因為資料庫引擎啟動的時間範圍是主動執行,而不是經過時間。 由於重做可能不會持續執行,因此產生的值可能會與性能計數器的值 Database Replica:Redone Bytes/sec 不同(較高)。
filestream_send_rate bigint 指定 FILESTREAM 檔案寄送至次要複本的速率,以 KB 為單位/秒。
end_of_log_lsn numeric(25,0) 記錄 LSN 的本機結尾。 對應至主要和輔助資料庫上記錄快取中最後一筆記錄的實際 LSN。 在主要複本上,次要數據列會從次要複本傳送至主要複本的最新進度訊息反映記錄 LSN 的結尾。

end_of_log_lsn 反映以零填補的記錄區塊標識碼。 這不是實際的記錄序號。 如需詳細資訊,請參閱 本文稍後的瞭解 LSN 資料行值
last_commit_lsn numeric(25,0) 與事務歷史記錄中最後一筆認可記錄對應的實際記錄序號。

在主資料庫上,這會對應至處理的最後一筆認可記錄。 輔助資料庫的數據列會顯示次要複本傳送至主要複本的記錄序號。
在次要復本上,這是重做的最後一個認可記錄。
last_commit_time datetime 對應至最後一個認可記錄的時間。

在輔助資料庫上,這次與主資料庫相同。

在主要複本上,每個輔助資料庫數據列會顯示裝載輔助資料庫之次要複本回報給主要複本的時間。 主資料庫數據列與指定輔助資料庫數據列之間的時間差異,大約代表恢復點目標 (RPO),假設重做程式已趕上,而次要複本會將進度回報回主要複本。
low_water_mark_for_ghosts bigint 資料庫的單調遞增數位,表示主資料庫上的准刪除清除所使用的低水位標記。 如果這個數位不會隨著時間而增加,則表示準刪除清除可能不會發生。 若要決定要清除哪些准刪除數據列,主要複本會針對所有可用性複本使用此數據行的最小值(包括主要複本)。
secondary_lag_seconds bigint 次要復本在同步處理期間落後於主要複本的秒數。

在主要複本上,每個輔助資料庫的同步處理延遲 (lag) 會計算為次要複本上最早強化 LSN 但尚未在次要複本上強化的秒數。 此值會顯示為 0 暫停數據移動。 數據移動必須處於非暫停狀態,才能讓此值顯示作用中延隔時間。

適用於:SQL Server 2016 (13.x) 和更新版本。

瞭解 LSN 資料行值

last_hardened_lsnlast_received_lsnlast_sent_lsnrecovery_lsntruncation_lsn 資料行的值end_of_log_lsn不是實際的記錄序號 (LSN)。 相反地,每個值都會反映以零填補的記錄區塊標識符。

end_of_log_lsnlast_hardened_lsnrecovery_lsn 是排清 LSN。 例如, last_hardened_lsn 表示下一個區塊超過磁碟上已存在區塊的開頭。 因此,任何 LSN 的值 last_hardened_lsn 都小於磁碟上。 大於或等於此值的 LSN 不會排清。

在 所 sys.dm_hadr_database_replica_states傳回的 LSN 值中,只有 last_redone_lsn 真正的 LSN。

權限

SQL Server 2019 (15.x) 和舊版需要 VIEW SERVER STATE 伺服器的許可權。

SQL Server 2022 (16.x) 和更新版本需要 VIEW SERVER PERFORMANCE STATE 伺服器的許可權。