Hologres バージョン 3.1 以降では、クエリ結果をメモリ上にキャッシュする「クエリキャッシュ」機能が利用可能です。システムが同一または類似のクエリを受信した場合、キャッシュから該当する結果を返します。このプロセスにより、データ読み取りおよび計算処理のオーバーヘッドが回避され、クエリパフォーマンスが向上します。クエリキャッシュは、ストレステストや BI レポートなど、高並列・反復的なクエリが発生するシナリオで特に効果的です。これは、クエリ効率を大幅に向上させ、リソースの無駄を削減できるためです。
注意事項
クエリキャッシュは、Hologres バージョン 3.1 以降でのみサポートされます。
説明ご利用のインスタンスがそれより前のバージョンを実行している場合、「インスタンスのアップグレード」を実行するか、Hologres DingTalk グループに参加してアップグレードをリクエストしてください。オンラインサポート用 DingTalk グループへの参加方法については、「オンラインサポートを受けるには?」をご参照ください。
クエリキャッシュはデフォルトで無効化されています。使用前に有効化する必要があります。
-- クエリキャッシュを有効化します。スーパーユーザ権限が必要です。有効化後、新規接続に対して適用されます。 ALTER DATABASE <database_name> SET hg_experimental_enable_query_cache=on;クエリキャッシュの結果は弱い一貫性(weak consistency)を保証します。キャッシュの保存期間中にデータが書き込まれた場合、返される結果が不正確になる可能性があります。
RANDOM 関数を含むクエリはキャッシュされません。
クエリキャッシュの使用方法
Hologres のメモリは、主にクエリ実行、キャッシュ、メタデータの 3 つのカテゴリに分割されます。キャッシュ領域は、インスタンス全体のメモリの最大 30 % を使用できます。たとえば、ワーカーのメモリ制限が 64 GB の場合、そのキャッシュ領域は最大 20 GB まで使用可能です。クエリキャッシュは、このキャッシュメモリの一部を使用します。
query_cache_percentage:クエリキャッシュに割り当てるメモリの設定
クエリキャッシュが有効に機能するには、専用のメモリ割り当てが必要です。
ワーカーあたりのメモリ量 = 20 GB × query_cache_percentage × 0.01
全ワーカー合計のメモリ量 = ワーカーあたりのメモリ量 × ワーカー数
-- 例:query_cache_percentage=2(2%)。割り当てメモリ量 = 20 GB × 2 × 0.01 = 400 MB
SELECT hg_admin_command('set_global_flag', 'query_cache_percentage=2');キャッシュ済み結果ごとの最大メモリ量の設定
単一のキャッシュ済み結果に対するデフォルトの最大メモリ量は 10 MB です。以下のパラメーターでこの値を変更できます。最大値は 20 GB です。
-- キャッシュ済み結果ごとの最大メモリ量を調整(デフォルト:10 MB)
ALTER DATABASE <database_name> SET hg_experimental_query_cache_max_kb_per_item=10240;クエリキャッシュの生存時間(TTL)の調整
Hologres のキャッシュは、メモリ制限や保存期間などの要因に基づくエビクションポリシーを採用しています。詳細については、「ストレージ技術の詳細解説」をご参照ください。以下のパラメーターでクエリキャッシュの TTL を調整できます。
デフォルトの TTL は 60 秒です。
TTL は秒単位で指定します。
-- クエリキャッシュの TTL を秒単位で調整(デフォルト:60 秒)
ALTER DATABASE <database_name> SET hg_experimental_query_cache_expire_time_sec=60;