PolarDB for PostgreSQL(Oracle 互換) 2.0 は、バージョン 1.0 と比較して、まったく新しい互換性アーキテクチャを備えており、Oracle 構文互換性を開発ベースラインとしています。バージョン 2.0 は、高同時実行性、高書き込み負荷、パラレルクエリ、および分散負荷条件下での論理レプリケーションにおいて、バージョン 1.0 よりも大幅なパフォーマンス向上を実現しています。このトピックでは、2 つのバージョンの具体的な違いについて詳しく説明します。現在リリースされている PolarDB for PostgreSQL(Oracle 互換) 2.0 バージョン(20250630)を参照してください。一部の機能は、後続のバージョンで順次サポートされる予定です。
大幅なパフォーマンスの向上
読み取り専用シナリオ(select-only)と読み書きシナリオ(tpcb-like)のパフォーマンステストは、polar.o.x8.xlarge クラスタ仕様で pgbench を使用して実施されました。テスト結果は次のとおりです。
シナリオ | PolarDB for PostgreSQL(Oracle 互換)1.0 | PolarDB for PostgreSQL(Oracle 互換)2.0 | パフォーマンスの向上 |
読み取り専用シナリオ(select-only) | 109141.30 | 120803.95 | 10.69% |
読み書きシナリオ(tpcb-like) | 49226.71 | 64752.41 | 31.54% |
PolarDB for PostgreSQL(Oracle 互換) 2.0 は、バージョン 1.0 と比較して大幅なパフォーマンスの向上を示しており、特に tpcb-like 読み書きシナリオでは 30% 以上向上しています。さらに、多数の接続があるシナリオでは、PolarDB for PostgreSQL(Oracle 互換) 2.0 はトランザクションのスループットを大幅に向上させており、テストシナリオでは最大 100% の向上を実現しています。
パフォーマンスをさらに向上させるために、バージョン 2.0 では多数のパラレルクエリ機能が追加されています。たとえば、PL/pgSQL 関数の RETURN QUERY は、結果を返す際に並列計算をサポートするようになり、REFRESH MATERIALIZED VIEW コマンドもパラレルクエリを使用できるようになりました。さらに、チャンクの並列シーケンシャルスキャンがサポートされ、大規模データスキャンの I/O スループットが向上し、ブロックデバイスの I/O スループット制限に近づきました。
インデックスの強化
PolarDB for PostgreSQL(Oracle 互換) 2.0 は、B-tree インデックス(標準データベースインデックス)の重複データの処理を効果的に最適化し、B-tree インデックスの全体的なスペース使用量を削減すると同時に、全体的なクエリパフォーマンスを向上させました。具体的には、重複排除テクノロジーのインデックス圧縮ポリシーを導入して、B-tree インデックスの重複データを自動的に重複排除および圧縮し、インデックスが占有するスペースを削減します。同時に、バージョン 2.0 は、頻繁なインデックス更新によって発生するテーブルの肥大化の問題など、B-tree インデックスのリソース消費の問題にも対処しています。
さらに、このバージョンでは、構築プロセス中にデータを事前にソートする GiST インデックスを提供し、GiST および SP-GiST インデックスの作成速度を大幅に向上させ、インデックスサイズを削減します。
パーティションテーブルの改善
PolarDB for PostgreSQL(Oracle 互換) 2.0 はパーティションシステムを改善し、パーティションテーブルをクエリする際のパフォーマンスが向上しました。より柔軟なパーティションプルーニングとインテリジェントな JOIN 操作を使用できるようになりました。さらに、このバージョンではトリガーのサポートが強化され、論理レプリケーションのサポートが追加されたため、データレプリケーションと同期がより効率的かつ信頼性の高いものになっています。
さらに、バージョン 2.0 はパーティションプルーニング機能を最適化し、子パーティションの SubPlan と重複するキャッシュプランを削減することで、クエリの実行速度を向上させました。同時に、パーティションを追加または削除する際に、alter table detach|attach PARTITION concurrently モードを使用することでロックの競合を回避し、データベースの可用性と安定性を向上させます。
並列 VACUUM(ガベージコレクション)
PolarDB for PostgreSQL(Oracle 互換) 2.0 では、VACUUM メカニズムはデータベース管理において非常に重要です。これは、使用されなくなったテーブルスペースを解放して、一般的なテーブルの肥大化の問題を軽減できるためです。ガベージコレクションの効率とパフォーマンスをさらに最適化するために、バージョン 2.0 では並列インデックスリカバリメカニズムが導入されています。さらに、ニーズに合わせて並列ワーカーの数を指定できます。
これらの最適化により、PolarDB for PostgreSQL(Oracle 互換) 2.0 のデータベース管理は、効率、信頼性、安定性が向上し、データの管理と保守が容易になります。
クエリの最適化
増分ソートが導入されました。これにより、クエリの初期ステップでソートされたデータを使用して、後続ステップのソートを高速化できます。この最適化により、クエリのパフォーマンスと効率が大幅に向上します。
PostgreSQL の効率的なハッシュ集約機能を活用できる、より多くの種類の集約クエリとグルーピングセットクエリが追加されました。これは、大規模な集約を含むクエリをメモリに完全にロードする必要がないことを意味し、メモリ使用量と I/O オーバーヘッドを大幅に削減します。
linear search TO hash table probeがサポートされ、IN 文の処理パフォーマンスが大幅に向上します。特に、複数の条件を持つ SQL や大量のデータのフィルタリングが必要な SQL では、パフォーマンスの向上が顕著になります。
LZ4 圧縮アルゴリズムのサポートとセキュリティ機能の強化
PolarDB for PostgreSQL(Oracle 互換) 2.0 では、データ列圧縮に LZ4 アルゴリズムを選択して圧縮パフォーマンスを向上させるためのサポートなど、いくつかの新機能が導入されています。また、元の pglz 圧縮方式も引き続きサポートされています。さらに、事前定義されたロール pg_read_all_data と pg_write_all_data を使用して、テーブル/ビュー/シーケンスオブジェクトに対する読み取り専用または書き込み専用の権限を一度に付与できるため、より柔軟なデータ管理オプションが提供されます。
バージョン 2.0 は、クラウドベースの権限管理にオブジェクト権限の粒度を採用しており、データのセキュリティと信頼性を確保します。この最適化により、機密データが保護され、データリークやセキュリティ侵害を防ぎます。
コア機能
データ型の互換性
関数と演算子の互換性
SQL 構文の互換性
DDL 構文の互換性
パーティションテーブル機能
トランザクション処理機能
トリガー機能
DDL システムトリガーをサポートしており、DDL 操作関連のトリガーの処理を容易にします。
ALTER TRIGGER ENABLE/DISABLEをサポートしてシステムトリガーを管理し、トリガー動作の制御を容易にします。スキーマ/データベースレベルで DDL システムトリガーをサポートしており、対応するレベルでの DDL 操作の処理を容易にします。トリガーサブ関数用に
updating('col')構文をサポートしており、複雑なトリガーロジックの処理を容易にします。
PL/SQL プログラミングのサポート
パッケージ機能
カスタムパッケージ機能の作成と削除をサポートします。
連想配列、ネストテーブル、可変長配列などの一般的なコレクションタイプをサポートします。
コレクションタイプの基本的な初期化、呼び出し、および割り当て操作をサポートします。
パッケージ内の 1 次元
SUBTYPEをサポートし、パッケージのデータモデルサポートを拡張します。パッケージ
recordはconstraintをサポートし、データの整合性を確保します。大文字と小文字を区別しないパッケージアクセスをサポートします。
後続で定義された型に依存するパッケージ関数をサポートします。
デフォルト値を無視するパッケージ関数ストアドプロシージャをサポートします。
パッケージ変数を使用してパッケージ関数パラメータ型を指定することをサポートします。
ストアドプロシージャ変数およびサブ関数パラメータのデフォルト値としてパッケージ変数をサポートします。
コレクション型のサポート
連想配列をパラメーターおよび戻り値として使用することをサポートし、複雑なデータ構造の処理を容易にします。
可変長データ等価宣言をサポートし、コレクション型スペース管理ロジックを簡素化します。
コレクション型の有効値を削除できます。
組み込みパッケージの組み込み連想配列をサポートします。
3 次元連想配列をサポートし、コレクション型機能を拡張します。
連想配列要素を 2 次元の
レコードとしてサポートし、複合型の式を強化し、レコードとのネストをサポートします。fetch bulk intoからcoll(idx).recfieldコレクション型へのサポートにより、DML 実行効率を最適化します。DML 文で高次元コレクション型を使用することをサポートします。
コレクション型関数パラメーターのデフォルト値をサポートします。
連想配列コンストラクターをサポートします。
コレクション型の変換操作と集合演算をサポートします。
組み込みパッケージエコシステム
PolarDB for PostgreSQL(Oracle 互換) 2.0 は、エンタープライズ アプリケーションのさまざまな側面を網羅する、Oracle 互換の豊富な組み込みパッケージセットを提供します。
DBMS_AQ: メッセージキューのエンキューおよびデキュー操作のための関数を提供します。
DBMS_AQADM: メッセージキューの構成および管理関数を提供します。
DBMS_ALERT: アラートの登録、送信、および受信のための一連のストアドプロシージャを提供します。
DBMS_APPLICATION_INFO: パフォーマンス追跡とデバッグのためにデータベースで実行されているモジュールまたはトランザクションの名前を記録します。
DBMS_CRYPTO: 格納データの暗号化および復号機能を提供し、AES、DES、ハッシュ、およびメッセージダイジェスト関数をサポートします。
DBMS_DDL: DDL 関連の操作を容易にします。
DBMS_JOB: スケジュールされたタスクを作成および管理するために使用され、ユーザーはスケジュールされた時間にデータベースで実行されるスケジュールされたタスクを送信できます。
DBMS_LOB:
BLOBおよびCLOBを含む、ラージオブジェクトへのアクセスおよび操作メソッドを提供します。DBMS_LOCK: 現在のセッションを一定期間一時停止するための組み込み
SLEEP関数を提供します。DBMS_METADATA: データベースオブジェクトのメタデータ情報を取得するためのメソッドを提供し、データベース内のオブジェクトの再構築に使用されます。
DBMS_MVIEW: 依存オブジェクトを含まない
REFRESHをサポートします。DBMS_OUTPUT: ストアドプロシージャ、パッケージ、またはトリガーからメッセージを送信できます。
DBMS_XMLGEN: XML データ変換を処理するための
convert関数を提供します。DBMS_XMLPARSER: XML ドキュメントの解析メソッドを提供し、ドキュメントオブジェクトの生成に使用できます。
DBMS_PIPE: 同じインスタンス内の異なるセッション間のパイプ通信をサポートします。
DBMS_RANDOM: 一連のランダム関数とストアドプロシージャを提供します。
DBMS_REDACT: 権限の低いユーザーまたはアプリケーションによるクエリのデータマスキング機能を提供し、データベースデータのセキュリティを保護します。
DBMS_RLS: 仮想プライベートデータベース(VPD)が特定の PolarDB データベースオブジェクトで実行できるようにします。
DBMS_SESSION: PL/SQL からセッション、ユーザー、およびその他の情報にアクセスするためのインターフェイスを提供します。
DBMS_SPACE: 空間管理関連の操作を容易にします。
DBMS_SQL: 動的 SQL を使用した DML および DDL 文の実行、PL/SQL 匿名ブロックの実行、および PL/SQL ストアドプロシージャと関数の呼び出しのためのインターフェイスを提供します。
DBMS_TRANSACTION: トランザクション関連の操作に使用されます。
DBMS_UTILITY: さまざまなユーティリティサブルーチン、パッケージ依存関係の取得を提供します。
DBMS_XMLDOM: XML ドキュメントの DOM アクセスインターフェイスを提供し、さまざまな DOM オブジェクトの定義と生成をサポートします。
UTL_ENCODE: データのエンコードとデコードのための一連の関数を提供し、異なるホスト間のデータ転送を容易にします。
UTL_I18N:
ESCAPE_REFERENCE関数とUNESCAPE_REFERENCE関数で構成されるサービスを提供し、PL/SQL で記述されたアプリケーションに追加のグローバリゼーション機能を提供します。UTL_MATCH: 文字列パターンマッチング機能を強化し、テキスト操作プロセスを簡素化します。
UTL_HTTP: Web 相互作用機能を拡張します。
UTL_RAW: RAW タイプのデータを操作するための関数を提供します。
UTL_TCP: TCP 通信機能を強化し、ネットワーク転送シナリオを拡張します。
UTL_URL: URL 内の無効な文字と予約文字を変換するためのメソッドを提供します。
システムビューの互換性
ALL_PART_KEY_COLUMNS、USER_PART_KEY_COLUMNS、DBA_PART_KEY_COLUMNS、DBA_ROLE_PRIVS、USER_ROLE_PRIVSなどの Oracle 共通ビューをサポートします。列コメント情報の表示と管理のための
DBA_COL_COMMENTSビューをサポートします。nlsパラメータービューをサポートし、国際化パラメーターのサポートを拡張し、多言語構成管理を強化します。すべてのパラメーターを含む
DBA_TAB_COLUMNSビューをサポートし、より包括的なテーブル列情報を提供します。SESSION_ROLE組み込みビューをサポートし、セッションロール管理機能を拡張します。USER_TAB_PARTITIONSビューのHIGH_VALUEフィールドをサポートし、パーティションテーブルの高い値の管理を最適化します。DBA_OBJECTSビューのCREATEDフィールドをサポートし、オブジェクトの作成時刻を表示します。
その他の高度な機能
構文の互換性の違い
PolarDB for PostgreSQL(Oracle 互換) 2.0 とバージョン 1.0 との間には、次の違いがあります。
タイプ | 説明 |
データ型 |
|
DDL 構文 |
|
ビューとパーティションテーブル |
|
関数、ストアドプロシージャ、およびトリガー |
|
トランザクション | 自律型トランザクションで書き込み操作が発生した場合、トランザクションを明示的にコミットまたはロールバックする必要があります。そうでない場合、トランザクションは失敗します。 |
SQL クエリ |
|
パッケージ |
|
PL/SQL およびコレクション型 |
|