すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Query Cache for version 6.0

最終更新日:Mar 29, 2026

クエリキャッシュは、頻繁に繰り返されるクエリの実行結果を保存し、その後の同一クエリ要求に対して、クエリの完全な実行をバイパスして結果を直接返します。これにより、短時間ウィンドウ内で同一クエリが繰り返し実行される読み取り中心のワークロードにおいて、クエリ遅延を低減できます。

前提条件

クエリキャッシュを有効化する前に、以下の点を確認してください。

制限事項

構成要件

要件詳細
トランザクション分離レベルREAD COMMITTED に設定する必要があります
GUC パラメーター rds_uppercase_colnameオフ
GUC パラメーター gp_select_invisible「off」に設定する必要があります。off
libpq ライブラリフロントエンドプロトコルバージョン 3.0 以降である必要があります
テーブル単位での有効化クエリに含まれるすべてのテーブルについて、クエリキャッシュを有効化する必要があります

対応していないクエリタイプ

クエリキャッシュは、以下のクエリには適用されません。

  • 一時テーブル、ビュー、マテリアライズドビュー、システムテーブル、unlogged テーブル、外部テーブルに対するクエリ

  • volatile 関数または immutable 関数を呼び出すクエリ

  • パーティションに対するクエリ

  • 拡張クエリでカーソルを使用するクエリ

  • 同一トランザクションブロック内でデータ変更後に実行されるクエリ

  • 結果セットが 7.5 KB を超えるクエリ

  • 32 個を超えるテーブルを結合するクエリ

対応していない構成

  • 複数のコーディネーターノードを持つインスタンス

インスタンス単位でのクエリキャッシュの有効化

クエリキャッシュは、クエリの反復率が高いワークロードにのみ有効であるため、デフォルトでは無効化されています。有効化するには、チケットを起票してください。

重要

クエリキャッシュを有効化した後は、設定を有効にするためにインスタンスを再起動する必要があります。サービスへの影響を最小限に抑えるため、非ピーク時間帯に再起動を実施してください。

セッション単位でのクエリキャッシュの有効化または無効化

セッションレベルでクエリキャッシュを制御するには、rds_session_use_query_cache パラメーターを使用します。

現在のセッションでクエリキャッシュを有効化するには:

SET rds_session_use_query_cache = on;

現在のセッションでクエリキャッシュを無効化するには:

SET rds_session_use_query_cache = off;

テーブル単位でのクエリキャッシュの有効化または無効化

テーブルレベルでクエリキャッシュを制御するには、querycache_enabled ストレージパラメーターを使用します。

テーブル作成時にクエリキャッシュを有効化するには:

CREATE TABLE table_name (c1 int, c2 int) WITH (querycache_enabled=on);

既存のテーブルでクエリキャッシュを有効化するには:

ALTER TABLE table_name SET (querycache_enabled=on);

テーブルでクエリキャッシュを無効化するには:

ALTER TABLE table_name SET (querycache_enabled=off);
説明

クエリキャッシュは、そのクエリに含まれるすべてのテーブルで有効化されている場合にのみ適用されます。

キャッシュの有効性管理

デフォルトでは、キャッシュされた結果は 10 分後に有効期限切れになります。10 分のタイムウィンドウを経過後に同一クエリが実行された場合、システムはキャッシュされた結果ではなく、クエリを再実行します。

書き込みによるキャッシュ無効化: テーブルに対する DDL または DML 文は、当該テーブルのキャッシュされた結果を無効化し、書き込み後の古くなったデータが返却されるのを防ぎます。

AnalyticDB for PostgreSQL はマルチバージョン同時実行制御 (MVCC) を採用しており、各キャッシュエントリには最新のクエリ結果のみを格納します。読み取りと書き込みのトランザクションが同時にコミットされる高同時実行環境では、有効期間内であってもキャッシュが最新のコミット済みデータを反映しない場合があります。

デフォルトの 10 分間の有効期間を変更するには、チケットを起票してください。

パフォーマンス

キャッシュヒット率が高い場合、クエリキャッシュは顕著なパフォーマンス向上を実現します。一方、ヒット率が低い場合にはオーバーヘッドは極めて小さいです。

説明

以下に示す TPC-H および TPC-DS のテストは、TPC-H および TPC-DS のベンチマーク手法に基づいていますが、公式ベンチマークのすべての要件を満たすものではありません。そのため、公開されている TPC-H や TPC-DS のベンチマーク結果との比較はできません。

OLTP(オンライントランザクション処理)

キャッシュヒット率が 100 % の場合、クエリキャッシュによりポイントクエリのパフォーマンスが約 6.5 倍向上し、1,718 TPS(1 秒あたりのトランザクション数)から 11,219 TPS になります。

キャッシュヒット率が 0 % の場合、オーバーヘッドは極めて小さく、キャッシュ置き換えを含めてもクエリ遅延は 20 ms 未満に収まり、ベースラインとなる約 10 ms と比べて大きな増加はありません。

シナリオキャッシュ無効時キャッシュ有効時
ヒット率 0 %、1 文1,718 TPS置き換えなし:1,399 TPS;置き換えあり:915 TPS
ヒット率 50 %、2 文807 TPS置き換えなし:1,367 TPS;置き換えあり:877 TPS
ヒット率 100 %、1 文1,718 TPS11,219 TPS

OLAP(オンライン分析処理)

10 GB のデータに対する分析ワークロードにおいて、繰り返し実行されるクエリがキャッシュにヒットした場合、クエリキャッシュにより総クエリ時間が短縮されます。

ベンチマークキャッシュ無効時キャッシュ有効時
TPC-H 10 GB1,255 秒522 秒
TPC-DS 10 GB2,813 秒1,956 秒

キャッシュされた結果と一致する個別のクエリでは、極端な高速化が見られます。たとえば、TPC-H Q1 はキャッシュヒット時に 1,000 倍以上の性能向上を実現します。ただし、結果セットが 7.5 KB を超えるクエリはキャッシュされないため、フルベンチマーク実行全体における改善効果は限定的です。

クエリキャッシュの利用タイミング

クエリキャッシュは、以下のワークロード特性がある場合に最も効果的です。

ワークロードの特性推奨事項
数分以内に同一クエリが繰り返し実行される(高い時間的局所性)キャッシュを有効化し、クエリの反復ウィンドウに合わせて有効期間を設定してください
読み取り中心であり、キャッシュ対象テーブルへの書き込みが稀な場合キャッシュを有効化してください。DML 操作が稀なほど、恩恵が最大化されます
結果セットが小さい(7.5 KB 未満)キャッシュを有効化してください。大規模な結果セットは自動的にキャッシュをバイパスします
固定レポートクエリを用いる BI ダッシュボードキャッシュを有効化し、BI ツール内のクエリ文字列を標準化して完全に一致するよう調整してください

以下のケースでは、クエリキャッシュの恩恵は限定的です。

  • キャッシュヒットが稀なアドホックまたはユニークな分析クエリ

  • 頻繁に書き込みが行われるテーブル — DML 操作によりキャッシュされた結果が無効化されるため

  • 7.5 KB を超える大規模な結果セットを返すクエリ