コンテンツに移動
データベース

Cloud SQL で利用可能になった PostgreSQL 17 の新機能の紹介

2024年11月6日
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 権限が導入されており、VACUUMANALYZEREINDEXCLUSTER などのメンテナンス オペレーションをデータベース オブジェクトに対して、オブジェクトのオーナーではない場合でも実行できるようになります。これにより、データベース メンテナンスのタスクをよりきめ細かく制御できるようになります。

また、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_dumppg_dumpallpg_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

投稿先