rds_duckdb 拡張は、ApsaraDB RDS for PostgreSQL における複雑な分析クエリを高速化します。列指向テーブルとベクトル化を提供することで、ご利用の SQL ステートメントを変更することなく、クエリパフォーマンスを大幅に向上させます。
この拡張に関する質問、ディスカッション、フィードバックについては、ApsaraDB RDS for PostgreSQL 拡張 DingTalk グループ (ID: 103525002795) にご参加ください。
概要
rds_duckdb 拡張は、効率的でリソースに優しい DuckDB を ApsaraDB RDS for PostgreSQL に統合し、分析クエリ機能を強化します。この拡張を使用すると、ローカルテーブルを列指向テーブルにエクスポートし、AP クエリアクセラレーションを有効化できます。
前提条件
ご利用の ApsaraDB RDS for PostgreSQL インスタンスは、PostgreSQL メジャーバージョン 13 以降を実行している必要があります。
お客様のインスタンスは、マイナーエンジンバージョン 20260130 以降を実行しています。
shared_preload_libraries パラメーターの 実行中値 に rds_duckdb を追加済みである必要があります。
パラメーターの設定方法の詳細については、「インスタンスパラメーターの設定」をご参照ください。たとえば、実行中値 を次のように変更できます。
'pg_stat_statements,auto_explain,rds_duckdb'。
マイナーエンジンバージョン 20250228 以降では、列指向テーブルの自動増分同期がデフォルトで有効になっています。
拡張の作成および削除
特権アカウント を使用して、拡張を作成または削除します。
拡張の作成
CREATE EXTENSION rds_duckdb;DuckDB のバージョン確認
SELECT rds_duckdb.duckdb_version();拡張を削除
DROP EXTENSION rds_duckdb;列指向テーブルの管理
列指向テーブルの作成
次のコマンドを実行して、ご利用の ApsaraDB RDS for PostgreSQL インスタンスからローカルテーブルを列指向テーブルにエクスポートします。ローカルテーブルには、ユーザーテーブル、マテリアライズドビュー、外部テーブルが含まれます。
インスタンスが PostgreSQL 15 かつマイナーエンジンバージョン 20250228 以降の場合、列指向テーブルの自動増分同期がデフォルトで有効になります。列指向テーブルを作成する前に、この機能向けにターゲットの ApsaraDB RDS for PostgreSQL インスタンスおよびローカルテーブルを構成してください。詳細については、「列指向テーブルの自動増分同期の構成」をご参照ください。
SELECT rds_duckdb.create_duckdb_table('local_table_name');列指向テーブルのリフレッシュ
次のコマンドを実行して、ソースのローカルテーブルから最新データでエクスポート済みの列指向テーブルを更新します。このコマンドは、テーブルスキーマとデータの両方を更新します。
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 列指向テーブルに対応するテーブルのみを使用するクエリは、DuckDB にオフロードされます。DML や DDL などの未対応操作を含むクエリ、または列指向テーブルに対応しないテーブルを参照するクエリは、自動的に標準の ApsaraDB RDS for PostgreSQL エンジンにフォールバックします。
PostgreSQL エンジンにフォールバックするクエリに対して、システムは次のような形式の警告を返します。WARNING: Trying to execute an operation with non-duckdb tables(test), fallback to PG。括弧内に記載されているテーブルは、対応する DuckDB 列指向テーブルを持たないものです。
読み取り専用以外のクエリも、次のような警告をトリガーします。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 |
|
rds_duckdb.memory_limit | AP クエリアクセラレーションのメモリ制限です。 単位:MB。パラメーター値を設定する際は、単位を含めないでください。 有効値:1 ~ INT32_MAX デフォルト値:100(100 MB を示します) |
|
DuckDB パラメーターの詳細については、公式 DuckDB ドキュメント をご参照ください。
AP アクセラレーションの無効化
SET rds_duckdb.execution = off;列指向テーブルの自動同期の構成
インスタンスが PostgreSQL 15 かつマイナーエンジンバージョン 20250228 以降の場合、列指向テーブルの自動増分同期がデフォルトで有効になります。列指向テーブルを作成する前に、次の手順を完了してください。
拡張機能管理 で
rds_duckdbのバージョンを確認し、1.3 以降にスペックアップします。インスタンスパラメーターの設定 で、wal_level パラメーターの実行中値を logical に変更します。
(オプション)ターゲットのローカルテーブルにプライマリキーがない場合は、次のコマンドを実行して、レプリケーションキーとして REPLICA IDENTITY インデックスを設定します。
ALTER TABLE <local_table_name> REPLICA IDENTITY USING INDEX <index_name>;レプリケーション権限 を持つアカウントまたは 特権アカウント を使用して、列指向テーブルを作成します。
列指向テーブルの同期ステータスおよび進行状況の確認
SELECT * FROM rds_duckdb.duckdb_sync_stat;SQL 実行計画の表示
EXPLAIN 文を使用して、AP クエリアクセラレーションの有効/無効時における SQL クエリの実行計画を比較します。例:
次の例は、AP クエリアクセラレーションが有効な場合の実行計画を示しています。
次の例は、AP クエリアクセラレーションが無効な場合の実行計画を示しています。
パフォーマンステスト
rds_duckdb が複雑なクエリに対して提供するパフォーマンス向上を評価するには、Linux 環境で実施した標準 TPC-H ベンチマークテストをご参照ください。詳細な手順および結果については、「rds_duckdb 拡張のパフォーマンステスト」をご参照ください。