ApsaraDB RDS for PostgreSQL の AP アクセラレーションエンジン (rds_duckdb) を使用すると、複雑なクエリから高速な結果を取得できます。このエンジンは、列指向テーブルとベクトル化実行を提供し、元のクエリ文を変更することなく複雑なクエリを大幅に高速化します。これにより、簡単かつ効率的に結果を取得できます。
ApsaraDB RDS for PostgreSQL エクステンションの DingTalk グループ (ID: 103525002795) に参加して、質問、アイデアの共有、フィードバックの提供、エクステンションに関する詳細情報の入手ができます。
概要
rds_duckdb は、効率的でリソースフレンドリな DuckDB を ApsaraDB RDS for PostgreSQL に統合し、分析クエリ機能を強化します。このエクステンションを使用すると、ApsaraDB RDS for PostgreSQL からローカルテーブルを列指向テーブルにエクスポートして、分析処理 (AP) クエリの高速化を有効にできます。この機能は、複雑なクエリの実行速度を大幅に向上させ、分析ワークロードの要求により効果的に応えます。
前提条件
ご利用のインスタンスのメジャーバージョンが 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 列指向テーブルのみが含まれる場合、DuckDB が SQL 文を実行します。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>;replication 権限を持つアカウントまたは特権アカウントを使用して、列指向テーブルを作成します。
列指向テーブルの同期ステータスとオフセット進捗の表示
SELECT * FROM rds_duckdb.duckdb_sync_stat;SQL 実行計画の表示
EXPLAIN 文を使用して、AP アクセラレーションを有効にした場合と無効にした場合の SQL 文の実行計画を表示します。例:
以下は、AP アクセラレーションを有効にした後の SQL 文の実行計画です。
以下は、AP アクセラレーションを無効にした後の SQL 文の実行計画です。
パフォーマンステスト
標準の TPC-H テストを Linux 環境で使用して、rds_duckdb が複雑なクエリに提供するパフォーマンス向上を評価します。詳細については、「AP アクセラレーションエンジン (rds_duckdb) のパフォーマンステスト」をご参照ください。