外部のPostgreSQLデータベースをアップグレードする
PostgreSQLデータベースエンジンをアップグレードする際は、PostgreSQLコミュニティおよびクラウドプロバイダーが推奨するすべてのステップに従うことが重要です。PostgreSQLデータベースには2種類のアップグレードがあります:
マイナーバージョンアップグレード: これらには、バグやセキュリティ修正のみが含まれます。これらは常に、既存のアプリケーションデータモデルと下位互換性があります。
マイナーバージョンアップグレードプロセスは、PostgreSQLのバイナリを置き換えてデータベースサービスを再起動することで構成されます。データディレクトリは変更されません。
メジャーバージョンアップグレード: これらは内部ストレージ形式とデータベースカタログを変更します。その結果、クエリオプティマイザーが使用するオブジェクト統計は新しいバージョンに転送されないため、
ANALYZEを使用して再構築する必要があります。文書化されたメジャーバージョンアップグレードプロセスに従わないと、多くの場合、データベースパフォーマンスの低下やデータベースサーバーでの高いCPU使用率につながります。
すべての主要なクラウドプロバイダーは、pg_upgradeユーティリティを使用して、データベースインスタンスのインプレースメジャーバージョンアップグレードをサポートしています。ただし、パフォーマンスの低下やデータベースの中断のリスクを減らすために、アップグレード前後の手順に従う必要があります。
外部データベースプラットフォームのメジャーバージョンアップグレード手順を注意深くお読みください:
- Amazon RDS for PostgreSQL
- Azure Database for PostgreSQL Flexible Server
- Google Cloud SQL for PostgreSQL
- PostgreSQL community
pg_upgrade
メジャーバージョンアップグレード後には、必ずデータベースをANALYZEしてください
オプティマイザー統計はpg_upgradeによって転送されないため、メジャーバージョンアップグレード後にpg_statisticテーブルを更新するには、ANALYZE操作を実行することが必須です。これは、アップグレードされたPostgreSQLサービス/インスタンス/クラスター上のすべてのデータベースに対して行う必要があります。
メンテナンス期間を計画する際には、この操作がGitLabのパフォーマンスを著しく低下させる可能性があるため、ANALYZEの時間を考慮に入れる必要があります。
ANALYZE操作を高速化するには、njobs個のコマンドを同時に実行することで、ANALYZEコマンドを並行して実行する--analyze-only --jobs=njobsオプションを付けて、vacuumdbユーティリティを使用します。