Upgrade to Pro — share decks privately, control downloads, hide ads and more …

初めてのPostgreSQLメジャーバージョンアップ

Ken Kato
March 26, 2025

 初めてのPostgreSQLメジャーバージョンアップ

Ken Kato

March 26, 2025
Tweet

More Decks by Ken Kato

Other Decks in Technology

Transcript

  1. © 2025 Wantedly, Inc. 背景 • RDS for PostgreSQL /

    Aurora PostgreSQL で使用中のバージョンが標準サ ポート終了 (EOL) を迎える • 期日までに対応しないと... ◦ 延長サポートに入ることにより、追加コストが発生する ◦ コミュニティからのセキュリティパッチが提供されないので、セキュリティリスク が高まる ◦ 依存ライブラリやツールとの互換性問題が発生しやすくなる ◦ 新しい機能が使えない 3
  2. © 2025 Wantedly, Inc. 私の状況 • 私1人でプロジェクトを進めることになった • 人生初の PostgreSQL

    アップグレード • 社内にPostgreSQLのメジャーバージョンアップ経験者はおらず、手順もドキュメン トも残っていない状態 5
  3. © 2025 Wantedly, Inc. 進め方 • スケジュール決め • 破壊的変更の有無確認、対応 •

    AWS公式ドキュメントを参考に手順作成 • メンテナンスタイム調整、ユーザーアナウンス • 開発環境、テスト環境でアップグレード ◦ うまくいかなかった手順を修正する • 本番環境でアップグレード 6
  4. © 2025 Wantedly, Inc. 1. ANALYZEが終わらなかった ANALYZE実行が必要な理由: • PostgreSQLのメジャーバージョンアップ後は、統計情報が白紙になる •

    PostgreSQLは統計情報をもとに実行計画を決定するため、統計情報がないと、 実際のデータに合わない非効率な実行計画でクエリを実行してしまう -> ANALYZEを実行することで、統計情報を最新にし、効率的なクエリが実行されるよう になる。 ANALYZE実行 統計情報を最新化 効率的なクエリ 9
  5. © 2025 Wantedly, Inc. 1. ANALYZEが終わらなかった 通常20分以内で終わるはずのANALYZEが、2時間以上経っても終わらなかった。 理由としては... • 外部アクセスを遮断していたが、夜間バッチジョブがクエリを実行していた

    • 非効率なクエリが実行されていて、CPU使用率が90%以上に張り付いていた -> メンテナンスタイム中に完了しなかったので、バックアップから切り戻した。 PostgreSQL バッチジョブ 10
  6. © 2025 Wantedly, Inc. 1. ANALYZEが終わらなかった 対策: • 実行中のセッション (参照系のみ)

    を定期的に切断した • 実行を並列化した SELECT pg_terminate_backend(pid),query,usename FROM pg_stat_activity WHERE query LIKE 'SELECT%' AND pid <> pg_backend_pid() AND usename <> 'rdsadmin' vacuumdb $DATABASE_URL -j 8 –analyze-only -v 11
  7. © 2025 Wantedly, Inc. 2. パラメータグループの差異により、アップグレードに失敗した 開発環境、テスト環境では問題なく動いていたコマンドが、本番環境でエラーになってし まった。 原因は... •

    本番環境では、デフォルトパラメータグループではなく、カスタムパラメータグループ を使っていたから % aws rds modify-db-cluster --db-cluster-identifier XXX --engine-version 13.16 --apply-immediately --allow-major-version-upgrade An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: The current DB instance parameter group XXX is custom. You must explicitly specify a new DB instance parameter group, either default or custom, for the engine version upgrade. 12
  8. © 2025 Wantedly, Inc. 2. パラメータグループの差異により、アップグレードに失敗した 本番環境との環境差異に気づけなかった。 • 本番環境と同じ構成にする •

    本番環境のパラメータや設定を比較する 環境 パラメータグループ 開発環境 デフォルト テスト環境 デフォルト 本番環境 カスタム 13
  9. © 2025 Wantedly, Inc. 3. 拡張機能 (pgAudit) のアップグレードに失敗した 拡張機能 (pgAudit)

    のアップグレード時に、以下のエラーが発生した。 • pgAuditにはアップグレード用のスクリプトが存在しない • 一度DROPした後、再度CREATEする必要があった % ALTER EXTENSION pgaudit UPDATE TO 'X.X.X' ERROR: extension "pgaudit" has no update path from version "X.X.X" to version "X.X.X" https://github.com/pgaudit/pgaudit/issues/191 14
  10. © 2025 Wantedly, Inc. 3. 拡張機能 (pgAudit) のアップグレードに失敗した 原因は... •

    開発環境、テスト環境での事前検証をしていなかった • 事前検証と違う手順で実施していた 15
  11. © 2025 Wantedly, Inc. 今回学んだこと ANALYZEが終わらない • 設定や構成といった静的な条件だけでなく、ジョブや負荷状況などの動的な条件も 考慮する必要がある パラメータグループの差異により、アップグレードに失敗した

    • 開発環境、テスト環境でも本番環境と同じ設定、構成にする • 本番のパラメータや設定の差分を事前に確認・比較する 拡張機能 (pgAudit) のアップグレードに失敗した • 開発環境、テスト環境で事前検証する • 本番環境でも事前検証と同じ手順で実施する 16