コプロセッサ キャッシュ

v4.0 以降、TiDB インスタンスは、TiKV (コプロセッサ キャッシュ機能) にプッシュされる計算結果のキャッシュをサポートしており、一部のシナリオでは計算プロセスを高速化できます。

Configuration / コンフィグレーション

Coprocessor Cache は、TiDB 構成ファイルのtikv-client.copr-cache構成項目を介して構成できます。コプロセッサー・キャッシュを有効にして構成する方法の詳細については、 TiDBConfiguration / コンフィグレーションファイルを参照してください。

機能説明

  • 単一の TiDB インスタンスで SQL ステートメントが初めて実行されるとき、実行結果はキャッシュされません。

  • 計算結果は TiDB のメモリにキャッシュされます。 TiDB インスタンスを再起動すると、キャッシュが無効になります。

  • キャッシュは TiDB インスタンス間で共有されません。

  • プッシュダウンの計算結果のみキャッシュされます。キャッシュにヒットした場合でも、TiDB は引き続き後続の計算を実行する必要があります。

  • キャッシュはリージョン単位です。リージョンリージョンが無効になります。このため、コプロセッサ キャッシュ機能は、ほとんど変更されないデータに対して主に効果を発揮します。

  • プッシュダウン計算要求が同じ場合、キャッシュにヒットします。通常、次のシナリオでは、プッシュダウン計算要求は同じか、部分的に同じです。

    • SQL ステートメントは同じです。たとえば、同じ SQL ステートメントが繰り返し実行されます。

      このシナリオでは、すべてのプッシュダウン計算要求が一貫しており、すべての要求がプッシュダウン計算キャッシュを使用できます。

    • SQL ステートメントには変化する条件が含まれており、他の部分は一貫しています。変更条件は、テーブルまたはパーティションの主キーです。

      このシナリオでは、プッシュダウン計算要求の一部が以前の要求と同じであり、これらの計算要求はキャッシュされた (以前の) プッシュダウン計算結果を使用できます。

    • SQL ステートメントには複数の変化する条件が含まれており、他の部分は一貫しています。変化する条件は、複合インデックス列と完全に一致します。

      このシナリオでは、プッシュダウン計算要求の一部が以前の要求と同じであり、これらの計算要求はキャッシュされた (以前の) プッシュダウン計算結果を使用できます。

  • この機能はユーザーに対して透過的です。この機能を有効または無効にしても、計算結果には影響せず、SQL の実行時間のみに影響します。

キャッシュ効果を確認する

EXPLAIN ANALYZEを実行するか、Grafana監視パネルを表示することで、コプロセッサのキャッシュ効果を確認できます。

EXPLAIN ANALYZEを使用する

EXPLAIN ANALYZEステートメントを使用して、 テーブルにアクセスするための演算子のキャッシュ ヒット率を表示できます。次の例を参照してください。

EXPLAIN ANALYZE SELECT * FROM t USE INDEX(a); +-------------------------------+-----------+---------+-----------+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+-----------------------+------+ | id | estRows | actRows | task | access object | execution info | operator info | memory | disk | +-------------------------------+-----------+---------+-----------+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+-----------------------+------+ | IndexLookUp_6 | 262400.00 | 262400 | root | | time:620.513742ms, loops:258, cop_task: {num: 4, max: 5.530817ms, min: 1.51829ms, avg: 2.70883ms, p95: 5.530817ms, max_proc_keys: 2480, p95_proc_keys: 2480, tot_proc: 1ms, tot_wait: 1ms, rpc_num: 4, rpc_time: 10.816328ms, copr_cache_hit_rate: 0.75} | | 6.685169219970703 MB | N/A | | ├─IndexFullScan_4(Build) | 262400.00 | 262400 | cop[tikv] | table:t, index:a(a, c) | proc max:93ms, min:1ms, p80:93ms, p95:93ms, iters:275, tasks:4 | keep order:false, stats:pseudo | 1.7549400329589844 MB | N/A | | └─TableRowIDScan_5(Probe) | 262400.00 | 0 | cop[tikv] | table:t | time:0ns, loops:0 | keep order:false, stats:pseudo | N/A | N/A | +-------------------------------+-----------+---------+-----------+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+-----------------------+------+ 3 rows in set (0.62 sec)

実行結果の列execution infoには、コプロセッサ キャッシュのヒット率を示すcopr_cache_hit_ratioの情報が表示されます。上記の例の0.75は、ヒット率が約 75% であることを意味します。

Grafana モニタリング パネルをビューする

Grafana では、 tidb名前空間の下のdistsqlサブシステムにcopr-cacheパネルが表示されます。このパネルは、クラスター全体のコプロセッサー・キャッシュのヒット、ミス、およびキャッシュ破棄の数をモニターします。