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

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

Avatar for Ken Kato Ken Kato
March 26, 2025

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

Avatar for Ken Kato

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