跳至內容

當我對 Aurora PostgreSQL 相容版資料庫叢集執行次要版本升級時,使用 ZDP 有哪些限制?

3 分的閱讀內容
0

我想了解使用零停機時間修補 (ZDP) 功能有哪些限制。我想在對我的 Amazon Aurora PostgreSQL 相容版資料庫叢集執行次要版本升級之前,先解決這些限制。

簡短說明

在您升級叢集之前,請檢查並解決以下可能導致無法使用 ZDP 的因素:

  • 長時間執行的查詢
  • 進行中的資料定義語言 (DDL) 作業
  • 暫存資料表
  • 作用中的資料表鎖定
  • 正在接聽通知通道的工作階段
  • 不相容的 TLS 版本

如需完整限制清單,請參閱零停機時間修補的限制

如需支援 ZDP 的 Aurora PostgreSQL 相容版本清單,請參閱次要版本升級與零停機時間修補。若要識別您目前的 Aurora PostgreSQL 相容版本,請參閱識別 Amazon Aurora PostgreSQL 的版本

**注意:**您的叢集必須使用受支援的執行個體類別 db.r、db.t、db.x 或 db.serverless。

解決方法

識別並解決長時間執行的查詢

請完成以下步驟:

  1. 連線到您的 Aurora PostgreSQL 相容版叢集。

  2. 若要識別長時間執行的查詢,請執行以下命令:

    SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
    FROM pg_stat_activity
    WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes'
    AND state = 'active';
  3. 若要停止長時間執行的查詢,請執行以下命令:

    SELECT pg_terminate_backend(PID);

    **注意:**將 PID 替換為您的程序 ID。

  4. 若要確認您已停止所有長時間執行的查詢,請再次執行步驟 2 的查詢。

檢查並完成 DDL 作業

您可以等待 DDL 作業完成,或停止這些作業。

請完成以下步驟:

  1. 若要檢查作用中的 DDL 作業,請執行以下命令:

    SELECT pid, query, state, now() - query_start AS duration
    FROM pg_stat_activity
    WHERE query ILIKE '%CREATE%' OR query ILIKE '%ALTER%' OR query ILIKE '%DROP%'
    AND state = 'active';
  2. 若要停止 DDL 作業,請執行以下命令:

    SELECT pg_terminate_backend(PID);

    **注意:**將 PID 替換為您的程序 ID。

  3. 若要確認您已停止 DDL 作業,請再次執行步驟 1 的查詢。

識別並關閉暫存資料表

請完成以下步驟:

  1. 若要識別具有暫存資料表的工作階段,請執行以下命令:

    SELECT schemaname, tablename, pidFROM pg_stat_user_tablesWHERE schemaname LIKE 'pg_temp_%';
  2. 若要關閉具有暫存資料表的工作階段,請執行以下命令:

    SELECT pg_terminate_backend(PID);

    **注意:**將 PID 替換為您的程序 ID。

  3.  若要確認您已關閉所有暫存資料表,請再次執行步驟 1 的查詢。

檢查並釋放資料表鎖定

請完成以下步驟:

  1. 若要檢查作用中的資料表鎖定,請執行以下命令:

    SELECT l.locktype, l.database, l.relation, l.page, l.tuple, l.pid, a.queryFROM pg_locks lJOIN pg_stat_activity a ON l.pid = a.pidWHERE l.granted = true AND l.locktype = 'relation';
  2. 若要釋放鎖定,請執行以下命令以停止持有鎖定的工作階段:

    SELECT pg_terminate_backend(PID);

    **注意:**將 PID 替換為您的程序 ID。

  3. 若要確認您已釋放所有鎖定,請再次執行步驟 1 的查詢。

檢查並停止通知通道接聽程式

請完成以下步驟:

  1. 若要識別正在接聽通知通道的工作階段,請執行以下命令:

    SELECT pid, query, stateFROM pg_stat_activityWHERE query ILIKE '%LISTEN%' AND state = 'idle';
  2. 若要停止通知通道接聽程式,請連線到每個工作階段並執行以下命令:

    UNLISTEN *;

    或執行 pg_terminate_backend 命令以停止這些工作階段:

    SELECT pg_terminate_backend(PID);

檢查您的 TLS 版本

ZDP 支援 TLSv1.3 連線。

若要檢查您目前使用的 TLS 版本,請執行以下命令:

SELECT pid, ssl, ssl_versionFROM pg_stat_sslJOIN pg_stat_activity USING (pid)
WHERE ssl = true;

如果您使用的 TLS 版本早於 1.3,請更新您的版本。

升級您的引擎並監控升級

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

若要升級您的資料庫叢集,請參閱將 Aurora PostgreSQL 引擎升級到新的次要版本

若要監控升級事件,請執行以下 describe-events AWS CLI 命令:

aws rds describe-events --source-identifier CLUSTER-NAME --source-type db-cluster --start-time START-TIME

**注意:**將 CLUSTER-NAME 替換為您的叢集名稱,並將 START-TIME 替換為 ISO 格式的升級開始時間。

分析 ZDP 結果

若要在您的資料庫日誌中檢查 ZDP 結果,請連線到您的叢集,然後執行以下命令:

SELECT * FROM pg_stat_activity WHERE query LIKE '%zero downtime%';

如果 ZDP 作業成功,您會看到類似以下內容的日誌事件:

「Attempt to upgrade the database instance ###-### with zero downtime finished.The process took 3485 ms, 378 connections preserved, 0 connections dropped.」

如果 ZDP 作業未成功,您會看到類似以下內容的日誌事件:

「Database cluster engine minor version upgrade complete.Previous version: 13.12.9.New version: 13.18.4.Total time offline: 21.0 seconds.Taking database cluster offline while the primary instance completes the patch/upgrade process.」

**注意:**ZDP 是以「盡力而為」的方式運作。成功與否取決於升級當時所有準備工作的完成情況以及資料庫的活動狀態。

相關資訊

升級 Amazon Aurora PostgreSQL 資料庫叢集

Amazon Aurora PostgreSQL 的最佳實務

使用 Amazon Aurora PostgreSQL

AWS 官方已更新 8 個月前