V3.1 以降、Hologres はクエリキャッシュ機能をサポートしています。この機能により、クエリ結果をメモリにキャッシュできます。システムが後で同一または類似のクエリに遭遇した場合、最初にメモリから集約結果を照合できるため、データの読み取りと計算のオーバーヘッドを回避し、クエリのパフォーマンスを向上させることができます。クエリキャッシュは、高い同時実行性と反復的なクエリ(ストレステスト、BI レポートなど)のシナリオに適しており、クエリ効率を大幅に最適化し、リソースの浪費を削減できます。
注意事項
クエリキャッシュ機能は、Hologres V3.1 以降のバージョンでのみサポートされています。
説明インスタンスのバージョンが古すぎる場合は、インスタンスのスペックアップを使用するか、Hologres コミュニケーショングループに参加してインスタンスのスペックアップをリクエストしてください。 オンラインサポート DingTalk グループに参加するには、「オンラインサポートを受けるには?」をご参照ください。
クエリキャッシュはデフォルトで無効になっています。使用する前に、以下の操作に従って有効にする必要があります。
-- クエリキャッシュ機能を有効にするには、スーパーユーザーの実行が必要であり、新しい接続に対して有効になります ALTER DATABASE <database_name> SET hg_experimental_enable_query_cache=on;クエリキャッシュの結果には弱い整合性があります。キャッシュ期間中にデータが書き込まれた場合、結果の正確性は保証されません。
RANDOM 関数を含むクエリ結果はキャッシュされません。
クエリキャッシュの使用
Hologres のメモリは、クエリ、キャッシュ、メタの 3 つの部分に大別されます。キャッシュで使用される合計メモリは、インスタンスの合計メモリの約 30% を占めます。単一 Worker のメモリ割り当てを例にとると、単一 Worker のメモリ制限が 64 GB の場合、キャッシュに割り当てられるメモリ制限は 30% で、約 20 GB です。クエリキャッシュで使用されるメモリは、キャッシュの一部です。
クエリキャッシュメモリ割り当てを設定するための query_cache_percentage
クエリキャッシュを使用する場合は、対応するメモリリソースを割り当てる必要があります。そうしないと、クエリキャッシュ機能を十分に活用できません。
単一 Worker に割り当てられるメモリ = 20 GB × query_cache_percentage × 0.01
インスタンス内の合計割り当てメモリ = 単一 Worker に割り当てられるメモリ × Worker の数
-- 例:割り当てられるメモリは 20 GB * query_cache_percentage * 0.01 = 400 MB
SELECT hg_admin_command('set_global_flag', 'query_cache_percentage=2');単一キャッシュ結果の最大メモリ制限の設定
単一キャッシュ結果の最大メモリ制限は、デフォルトで 10 MB です。次のパラメーターを使用して変更できますが、上限は 20 GB です。
-- 単一キャッシュ結果の最大メモリ制限を調整する(デフォルト 10M)
ALTER DATABASE <database_name> SET hg_experimental_query_cache_max_kb_per_item=10240;クエリキャッシュの有効期限の調整
Hologres のキャッシュにはエビクションポリシーがあり、メモリ制限、保存期間などのアルゴリズムがあります。詳細については、「ストレージテクノロジーの概要」をご参照ください。次のパラメーターを使用して、クエリキャッシュの有効期限を変更できます。
クエリキャッシュのデフォルトの有効期限は 60 秒です。
有効期限の設定単位は秒です。
-- クエリキャッシュの有効期限を秒単位で調整する(デフォルト 60 秒)
ALTER DATABASE <database_name> SET hg_experimental_query_cache_expire_time_sec=60;