如何疑難排解 Amazon RDS for SQL Server 讀取複本的延遲問題?

2 分的閱讀內容
0

我擁有適用於具有讀取複本之 Microsoft SQL Server 執行個體的Amazon Relational Database Service (Amazon RDS)。我想疑難排解 Amazon RDS for SQL Server 執行個體的複本延遲問題。

簡短說明

Amazon RDS for SQL Server 企業版支援在相同 AWS 區域和跨區域建立讀取複本。資料複製是非同步作業,並會使用 Always-On 技術將資料從主要執行個體複製到複本執行個體。RDS for SQL Server 不會自動減少來源資料庫執行個體與其讀取複本之間的高複本延遲。

解決方法

檢查您的資源使用率

使用 Amazon CloudWatch 增強型監控和效能洞察,即可詳細檢查主要執行個體和複寫執行個體的資源使用率

確認 CPU 使用率未受到節流。如果您使用爆量效能執行個體類型,請確定您有可用的 CPU 額度,或已開啟「無限制」模式。

請確保擁有足夠的 FreeableMemory,並且 ReadIOPSWriteIOPS 符合已佈建的配額。如果您使用 gp2 磁碟區,請確認您有可用的突發平衡

檢查「ReadThroughput」和「WriteThroughput」是否達到執行個體類型配額

**注意事項:**複本執行個體中缺少資源可能會導致複本延遲問題。最佳實務是建立具有相同執行個體類型、儲存空間類型和 IOPS 數量的主要執行個體和複本執行個體。當使用量遠低於主要執行個體時,您也可以向上擴展讀取複本或縮減其規模。

識別複本延遲開始增加的時間範圍,然後執行下列動作:

  • 檢查主要執行個體上的「WriteIOPS」、「WriteThroughput」、「NetworkReceiveThroughput」和「NetworkTrasmitThroughput」指標。判斷寫入活動是否導致延遲。然後,在讀取複本上檢查相同時間段內的相同指標。
  • 檢查主要執行個體上是否有長時間執行的交易。若要檢查作用中交易的狀態,請執行類似下列範例的查詢:
    SELECT *
    FROM sys.sysprocesses
    WHERE open_tran = 1;

識別等待和鎖死

檢查複本執行個體是否出現任何嚴重的鎖定等待或鎖死情形。鎖死情形會發生在 SelectDDL/DML 交易之間,並且會導致主要執行個體的交易日誌應用程式出現延遲。

若要檢查是否出現封鎖情形,請執行類似下列範例的查詢:

SELECT * FROM sys.sysprocesses WHERE blocked > 0;

檢查複本延遲

在主執行個體上執行查詢,以檢查複本延遲和最高複本延遲。

複本延遲

執行下列查詢:

SELECT
    AR.replica_server_name,
    DB_NAME (ARS.database_id) 'database_name',
    AR.availability_mode_desc,
    ARS.synchronization_health_desc,
    ARS.last_hardened_lsn,
    ARS.last_redone_lsn,
    ARS.secondary_lag_seconds,
FROM
    sys.dm_hadr_database_replica_states ARS
INNER JOIN
    sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
WHERE
    DB_NAME(ARS.database_id) = 'database_name'
ORDER BY
    AR.replica_server_name;

**注意事項:**使用您的資料庫名稱取代 database_name

確認 last_hardened_lsn 值是否在讀取複本上逐步變動。

最高複本延遲

對於 SQL Server,ReplicaLag 指標是資料庫落後的最高延遲 (以秒為單位)。例如,如果您有分別延遲 5 秒和 10 秒的兩個資料庫,則 ReplicaLag 為 10 秒。若要計算 ReplicaLag 指標,請在主要執行個體上執行下列查詢:

SELECT max(secondary_lag_seconds) max_lag
FROM sys.dm_hadr_database_replica_states;

管理資料同步處理與執行個體運作狀態

建立讀取複本時,Amazon RDS 會從主要執行個體取得快照,然後還原快照以建立讀取複本執行個體。Amazon RDS 會重新顯示交易日誌,以將資料與主要執行個體同步。但是,在您建立新執行個體之後,執行個體會出現延遲載入情形,進而導致複本延遲。這是正常的行為。若要減少延遲載入所造成的影響,請在建立讀取複本時使用 io1 或 io2 磁碟區類型。建立複本之後,您可以轉換回 gp2 或 gp3 磁碟區類型。

在主要執行個體上批次執行交易,即可避免交易時間過長,並將交易日誌的大小保持在較小的狀態。僅在高複本延遲期間,視需要重新啟動複本執行個體。否則,Amazon RDS 會延遲交易日誌重新顯示,而您的資料庫可能會進入復原狀態。

因為日誌是在主要執行個體上進行處理,所以當您修改主要執行個體或複本執行個體的類型時,可能會暫時發生複本延遲。

此外,當您修改儲存空間類型或儲存空間大小時,可能會暫時發生複本延遲,直到完成儲存空間最佳化為止。您無法監控儲存空間最佳化的進度。

如果您持續遭遇複本延遲的情形,請檢查複本執行個體上使用者資料庫的狀態。若要重新顯示日誌,資料庫必須處於「線上」狀態。

注意事項:

  • Amazon RDS 僅會在讀取複本上可存取新建立的資料庫後,才會在延遲計算中包含這些資料庫。
  • 當 Amazon RDS 無法判斷延遲時 (例如複本設定期間或讀取複本處於錯誤狀態),ReplicaLag 會傳回 -1

相關資訊

在 Amazon RDS 中使用 Microsoft SQL Server 的讀取複本

AWS 官方
AWS 官方已更新 3 個月前