Cloud SQL で利用可能になった PostgreSQL 17 の新機能の紹介
Naresh Gandi
PostgreSQL Database Engineer, Google Cloud
※この投稿は米国時間 2024 年 10 月 25 日に、Google Cloud blog に投稿されたものの抄訳です。
このたび、Cloud SQL での PostgreSQL 17 のサポートを開始しましたので、お知らせいたします。PostgreSQL 17 では、以下の 5 つの重要な領域における数多くの新機能の導入や優れた機能強化がなされています。
-
セキュリティ
-
デベロッパー エクスペリエンス
-
パフォーマンス
-
ツール
-
オブザーバビリティ
このブログ投稿では、Cloud SQL で PostgreSQL 17 をご活用いただけるように、これらの領域に関しての詳細を説明し、価値の高い分析情報や例を提供します。
強化されたセキュリティ
MAINTAIN 権限と pg_maintain ロール
PostgreSQL 17 では MAINTAIN
権限が導入されており、VACUUM、ANALYZE、REINDEX、CLUSTER などのメンテナンス オペレーションをデータベース オブジェクトに対して、オブジェクトのオーナーではない場合でも実行できるようになります。これにより、データベース メンテナンスのタスクをよりきめ細かく制御できるようになります。
また、PostgreSQL 17 では pg_maintain
という名前の事前定義ロールが導入されており、これを使用することですべてのリレーションに対してメンテナンス オペレーションを実行できるようになります。オブジェクトに対する MAINTAIN 権限を明示的に持っていない場合でも、MAINTAIN 権限を持っているかのようにオペレーションを実行できます。
たとえば、テーブルのオーナーは、以下のようにしてテーブルに対する MAINTAIN 権限をユーザーに付与できます。
たとえば、postgres
ユーザーは次のコマンドで pg_maintain ロールをユーザーに付与できます。
デベロッパー エクスペリエンスの強化
MERGE ... RETURNING
PostgreSQL 17 では、便利な MERGE
コマンドが追加されており、デベロッパーはこれを使用して条件付きの更新、挿入、削除を単一の SQL ステートメントで実行できます。このコマンドでは独立したクエリの数を減らせるため、データ操作の簡素化だけでなく、パフォーマンスの改善にもつながります。
JSON データの標準の PostgreSQL テーブルへの変換
PostgreSQL 17 では、JSON_TABLE
関数を使用して JSON データを標準のテーブル形式により直感的な手法で変換することが可能であり、操作を簡単にできます。操作が難しくなることのある json_to_recordset() などのこれまでの手法とは異なり、JSON_TABLE であれば、JSON ドキュメントの表形式への変換をより洗練された標準的な手法で達成できます。
上記のクエリの出力は次のようになります。
パフォーマンスの向上
バキュームのメモリ構造の改善
PostgreSQL 17 では、TidStore と呼ばれる新しくより効率的なデータ構造が導入されており、VACUUM オペレーション中にタプル ID を格納できます。これは、これまでの配列ベースの手法に取って代わるものであり、メモリ消費量が大幅に削減されます。また、この手法であれば 1GB のメモリ使用量の上限を排除した状態で、テーブルのバキュームを実行できます。
pg_stat_progress_vacuum
システムビューでは、バキューム プロセスに関する追加の詳細情報を確認できるいくつかの新しい列が導入されており、また、既存の列の名前がいくつか変更されています。
I/O パフォーマンスの改善
PostgreSQL 17 では ReadBuffer API が強化されており、複数の連続するブロックのディスクから共有バッファへの読み取りを 1 回のシステム呼び出しで行えます。
複数の個別の読み取り操作に関連するオーバーヘッドを削減できるようになるため、この改善は複数の連続するブロックの読み取りが関与するワークロードに対して特にプラスに働きます。また、ANALYZE オペレーションでプランナー統計を迅速に更新するのにも役立ちます。
また、PostgreSQL 17 では io_combine_limit も導入されており、I/O を組み合わせるオペレーションの最大 I/O サイズを制御できます。デフォルトは 128 KB です。
IS [NOT] NULL の処理の改善
PostgreSQL 17 には最適化が導入されており、IS NULL および IS NOT NULL 句の必要のない評価を削減できます。この変更により、冗長なチェックが回避されてクエリの効率が改善され、オペレーションがより高速になります。特に、クエリが複雑であったり、複数の条件が NULL 値に関与したりする場合にプラスに働きます。
たとえば、null_handling
テーブルの id
列が NOT NULL
として定義されている場合、EXPLAIN PLAN を実行すると次のようになります。
これにより PostgreSQL は、条件 “id IS NULL” が決して true にならないことをすぐに判断できるため、テーブルデータに実際にアクセスする必要性がなくなります。One-Time Filter: false
で id 列のすべての値が null 以外であることが保証されるため、条件 “id IS NULL” はいずれの行でも満たされないことになります。
ツールの改善
改善された COPY エラー処理と詳細度のコントロール
PostgreSQL 17 では COPY コマンドに改善が加えられており、ON_ERROR
や LOG_VERBOSITY
などのオプションが使用できるようになっています。これらのオプションを使用することで、エラーをより適切に処理し、データ インポート操作時にスキップされた行に関する有益な分析情報を取得できるようになります。
ここで、3 番目の列は age(integer) であるため、“abc” は整数のデータ型に対しての無効なデータになります。
以下のコマンドでのデータのインポート
また、PostgreSQL 17 では pg_stat_progress_copy
ビューに tuples_skipped
という新しい列が導入されており、これを使用して、不正な形式のデータを含むためにスキップされたタプルの数を確認できます。
pg_dump、pg_dumpall、pg_restore での --filter オプションの使用
PostgreSQL 17 で --filter オプションが導入され、ダンプや復元のオペレーションでどのオブジェクトを含めるか、含めないかに関して詳細に制御できるようになりました。
たとえば、フィルタ ファイルを作成して、pg_dump でそれを使用できます。
pg_restore での --transaction-size オプションの使用
pg_restore コマンドに --transaction-size
オプションが含まれるようになり、指定の数のオブジェクトを処理した後に commit を行えるようになりました。 --transaction-size
オプションを使用することで、復元プロセスを小規模なオブジェクトのセットに分割して、トランザクションの管理を容易にできます。
強化されたオブザーバビリティ
pg_wait_events システムビュー
新しい pg_wait_events システムビューでは、プロセスの待機の原因となっているイベントに関する情報を確認できます。これは、パフォーマンス ボトルネックの特定とデータベースの問題のトラブルシューティングに役立ちます。
簡単なクエリの場合、以下のようになります。
SELECT * FROM pg_wait_events LIMIT 5;
pg_wait_events
を pg_stat_activity
とともに効果的に使用することで、PostgreSQL データベースのパフォーマンスに関する価値ある分析情報を取得して、改善の余地を探ることができます。
例:
以下は、上記のコマンドの出力の例です(出力には、射影された列と切り捨てられた行が関連性を示すために含まれています)。
pg_stat_checkpointer システムビュー
pg_stat_checkpointer システムビューにはチェックポイント プロセスのパフォーマンスとアクティビティに関する情報が表示されるため、ここからチェックポイントの頻度、チェックポイント時に書き込まれたデータの量、チェックポイントの完了までに要した時間などに関する価値の高い分析情報を確認できます。
以下のクエリを実行して、チェックポインタ アクティビティに関する分析情報を取得します。
このクエリは、チェックポイント プロセスに関連するさまざまな指標を含むレコードを返します。これを利用して、PostgreSQL インスタンスのチェックポイントのパフォーマンスのモニタリングと分析を行うことが可能です。
まとめ
まとめると、Cloud SQL for PostgreSQL 17 では、セキュリティ、デベロッパー エクスペリエンス、パフォーマンス、ツール、オブザーバビリティに関しての大幅な改善が導入されています。これらの機能強化は、データベース オペレーションの合理化、データベース管理機能の改善を目的に設計されています。新機能の完全な一覧および詳細な情報については、公式のリリースノートをご確認ください。
Cloud SQL PostgreSQL 17 を今すぐ試して、これらの強力なアップデートがもたらすメリットを体験してください。Cloud SQL の詳細については、Cloud SQL for PostgreSQL マネージド データベースのセクションをご覧ください。Cloud SQL PostgreSQL 17 インスタンスを作成するには、こちらをクリックしてください。
ー Google Cloud PostgreSQL データベース エンジニア Naresh Gandi