複雑なクエリを実行し、高速な結果が必要な場合は、ApsaraDB RDS for PostgreSQL の AP アクセラレーションエンジン (rds_duckdb) を使用できます。このエンジンは、列指向テーブルとベクトル化された実行機能を提供します。元の SQL 文を変更することなく複雑なクエリを大幅に高速化し、便利かつ効率的に結果を取得できます。
RDS PostgreSQL 拡張機能の DingTalk グループ (ID: 103525002795) に参加して、質問、ディスカッションへの参加、フィードバックの提供、または拡張機能に関する詳細情報の入手ができます。
機能
rds_duckdb 拡張機能は、効率的でリソース効率の高い DuckDB を ApsaraDB RDS for PostgreSQL に統合し、分析クエリ機能を強化します。この拡張機能を使用すると、ApsaraDB RDS for PostgreSQL からローカルテーブルを列指向テーブルにエクスポートし、分析処理 (AP) クエリ高速化機能を有効にできます。これにより、複雑なクエリの実行速度が大幅に向上し、分析ビジネス要件をより満たすことができます。
このドキュメントで説明されている拡張機能の使用方法は、概念実証 (POC) テストにのみ適しています。本番環境については、「DuckDB 分析インスタンス」をご参照ください。
前提条件
インスタンスのメジャーバージョンが ApsaraDB RDS for PostgreSQL 12 以降であること。
インスタンスのマイナーエンジンバージョンが 20241030 以降であること。
shared_preload_libraries パラメーターの [実行中のパラメーター値] に rds_duckdb を追加済みであること。
パラメーターの設定方法の詳細については、「インスタンスパラメーターの設定」をご参照ください。たとえば、[実行中のパラメーター値] を
'pg_stat_statements,auto_explain,rds_duckdb'に設定します。
ApsaraDB RDS for PostgreSQL のメジャーバージョン 15 およびマイナーバージョン 20250228 を実行するインスタンスでは、列指向テーブルのデータの自動増分同期がデフォルトで有効になっています。
拡張機能の作成と削除
特権アカウントを使用して、拡張機能を作成および削除できます。
拡張機能の作成
CREATE EXTENSION rds_duckdb;拡張機能が使用する DuckDB エンジンバージョンの表示
SELECT rds_duckdb.duckdb_version();拡張機能の削除
DROP EXTENSION rds_duckdb;列指向テーブルの管理
列指向テーブルの作成
次のコマンドを使用して、ApsaraDB RDS for PostgreSQL のローカルテーブルを列指向テーブルにエクスポートできます。ローカルテーブルには、ユーザーテーブル、マテリアライズドビュー、または外部テーブルを指定できます。結果として得られる列指向テーブルは、分析クエリの高速化に使用されます。
ApsaraDB RDS for PostgreSQL のメジャーバージョン 15 およびマイナーバージョン 20250228 を実行するインスタンスでは、列指向テーブルの自動増分データ同期がデフォルトで有効になっています。列指向テーブルを作成する前に、ターゲットの ApsaraDB RDS for PostgreSQL インスタンスとローカルテーブルを構成して、この機能を有効にできます。詳細については、「列指向テーブルの自動増分同期の設定」をご参照ください。
SELECT rds_duckdb.create_duckdb_table('local_table_name');列指向テーブルのリフレッシュ
次のコマンドを使用して、エクスポートされた列指向テーブルを ApsaraDB RDS for PostgreSQL のローカルテーブルの最新データでリフレッシュできます。このコマンドは、テーブルスキーマとデータの両方を更新します。
SELECT rds_duckdb.refresh_duckdb_table('local_table_name');列指向テーブルのサイズの表示
SELECT rds_duckdb.duckdb_table_size('local_table_name');現在のデータベース内のすべてのエクスポート済みテーブルの合計サイズの表示
SELECT rds_duckdb.duckdb_database_size();列指向テーブルの削除
SELECT rds_duckdb.drop_duckdb_table('local_table_name');AP アクセラレーションの管理
rds_duckdb 拡張機能は、読み取り専用クエリの高速化のみをサポートします。AP アクセラレーションを有効にすると、クエリに関与するすべてのテーブルに対応する DuckDB の列指向テーブルがある場合、SQL クエリは DuckDB によって実行され高速化されます。SQL 文にサポートされていない DML または DDL 操作が含まれている場合、または対応する列指向テーブルがないテーブルが含まれている場合、その文は実行のために ApsaraDB RDS for PostgreSQL にフォールバックします。
ApsaraDB RDS for PostgreSQL にフォールバックする SQL 文の場合、システムは次の形式で警告を返します: WARNING: Trying to execute an operation with non-duckdb tables(test), fallback to PG。括弧内のテーブル名は、対応する DuckDB の列指向テーブルがない ApsaraDB RDS for PostgreSQL テーブルです。
読み取り専用でない SQL クエリに対しても警告が返されます。警告は次のとおりです: WARNING: Modification operations on DuckDB tables are currently not supported, fallback to PG。
AP アクセラレーションの有効化
SET rds_duckdb.execution = on;AP アクセラレーションパラメーターの設定
セッションでパラメーターを調整することで、AP アクセラレーションのパフォーマンスを制御できます。例:
SET rds_duckdb.worker_threads = 32;
SET rds_duckdb.memory_limit = 16384;パラメーター | 説明 | 推奨値 |
rds_duckdb.worker_threads | AP アクセラレーションに使用するワーカースレッドの数。 有効な値: 1~255。 デフォルト値: 1。これは、1 つのワーカースレッドのみが使用されることを意味します。 |
|
rds_duckdb.memory_limit | AP アクセラレーションのメモリ制限。 単位: MB。パラメーターを設定する際に単位を追加しないでください。 有効な値: 1~INT32_MAX。 デフォルト値: 100。これは、制限が 100 MB であることを意味します。 |
|
DuckDB パラメーターの詳細については、「DuckDB」をご参照ください。
AP アクセラレーションの無効化
SET rds_duckdb.execution = off;列指向テーブルの自動増分同期の設定
ApsaraDB RDS for PostgreSQL のメジャーバージョン 15 およびマイナーバージョン 20250228 を実行するインスタンスでは、列指向テーブルの自動増分データ同期がデフォルトで有効になっています。列指向テーブルを作成する前に、次の手順を実行して、ターゲットの ApsaraDB RDS for PostgreSQL インスタンスとローカルテーブルを構成する必要があります。
[拡張機能の管理] で、rds_duckdb のバージョンを確認し、1.3 にアップグレードします。
[インスタンスパラメーターの設定] を使用して、wal_level パラメーターの値を logical に変更します。
(オプション) ターゲットのローカルテーブルにプライマリキーがない場合は、次のコマンドを実行して、REPLICA IDENTITY インデックスをテーブルのレプリケーションキーとして設定できます。
ALTER TABLE <local_table_name> REPLICA IDENTITY USING INDEX <index_name>;レプリケーション権限を持つアカウントまたは特権アカウントを使用して、列指向テーブルを作成します。
列指向テーブルの同期ステータスと LSN の進行状況の表示
SELECT * FROM rds_duckdb.duckdb_sync_stat;SQL 実行計画の表示
EXPLAIN 文を使用して、AP アクセラレーションが有効な場合と無効な場合の SQL 文の実行計画を表示できます。例:
次の実行計画は、AP アクセラレーションが有効な SQL 文のものです。
次の実行計画は、AP アクセラレーションが無効な SQL 文のものです。
パフォーマンステスト
Linux 環境での標準的な TPC-H テストを例として使用し、rds_duckdb が複雑なクエリに対して提供するパフォーマンス向上を評価します。詳細については、「AP アクセラレーションエンジン (rds_duckdb) のパフォーマンステスト」をご参照ください。