ダウンタイムのないパッチ適用 (ZDP) 機能を使用する際の制限事項を知りたいです。Amazon Aurora PostgreSQL 互換エディションデータベース (DB) クラスターのマイナーバージョンアップグレードを実行する前に、制限事項を解決したいと考えています。
簡単な説明
クラスターをアップグレードする前に、ZDP の使用を妨げる可能性のある以下の要因を確認して解決してください。
- 長時間実行されているクエリ
- アクティブなデータ定義言語 (DDL) 操作
- 一時テーブル
- アクティブなテーブルロック
- 通知チャネルをリッスンしているセッション
- 互換性のない TLS バージョン
制限事項の完全なリストについては、「ダウンタイムのないパッチ適用の制限」を参照してください。
ZDP をサポートする Aurora PostgreSQL 互換バージョンのリストについては、「マイナーリリースのアップグレードとダウンタイムなしのパッチ適用プロセス」を参照してください。現在の Aurora PostgreSQL 互換バージョンを特定するには、「Amazon Aurora PostgreSQL のバージョンの識別」を参照してください。
注: クラスターでは、サポートされているインスタンスクラス (db.r、db.t、db.x、または db.serverless) を使用する必要があります。
解決策
長時間実行されているクエリの特定と解決
次の手順を実行します。
-
Aurora PostgreSQL 互換クラスターに接続します。
-
長時間実行されているクエリを特定するには、次のコマンドを実行します。
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';
-
長時間実行されているクエリを停止するには、次のコマンドを実行します。
SELECT pg_terminate_backend(PID);
注: PID を実際のプロセス ID に置き換えてください。
-
長時間実行されているクエリをすべて停止したことを確認するには、手順 2 のクエリをもう一度実行します。
DDL 操作の確認と完了
DDL 操作が完了するまで待つことも、停止することもできます。
次の手順を実行します。
-
アクティブな 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';
-
DDL 操作を停止するには、次のコマンドを実行します。
SELECT pg_terminate_backend(PID);
注: PID を実際のプロセス ID に置き換えてください。
-
DDL 操作が停止したことを確認するには、手順 1 のクエリをもう一度実行します。
一時テーブルを特定して終了する
次の手順を実行します。
-
一時テーブルのあるセッションを特定するには、次のコマンドを実行します。
SELECT schemaname, tablename, pidFROM pg_stat_user_tablesWHERE schemaname LIKE 'pg_temp_%';
-
一時テーブルのあるセッションを閉じるには、次のコマンドを実行します。
SELECT pg_terminate_backend(PID);
注: PID を実際のプロセス ID に置き換えてください。
-
すべての一時テーブルを閉じたことを確認するには、手順 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';
-
ロックを解除するには、次のコマンドを実行して保留中のセッションを停止します。
SELECT pg_terminate_backend(PID);
注: PID を実際のプロセス ID に置き換えてください。
-
すべてのロックを解除したことを確認するには、手順 1 のクエリをもう一度実行します。
通知チャネルリスナーを確認および停止する
次の手順を実行します。
-
通知チャネルをリッスンしているセッションを特定するには、次のコマンドを実行します。
SELECT pid, query, stateFROM pg_stat_activityWHERE query ILIKE '%LISTEN%' AND state = 'idle';
-
通知チャネルリスナーを停止するには、各セッションに接続して次のコマンドを実行します。
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;
1.3 より前のバージョンの TLS を使用している場合は、バージョンを更新してください。
エンジンをアップグレードし、アップグレードをモニタリングしてください
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
DB クラスターをアップグレードするには、「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 DB クラスターのアップグレード
Amazon Aurora PostgreSQL を使用する際のベストプラクティス
Amazon Aurora PostgreSQL の操作