コプロセッサーキャッシュ
v4.0以降、TiDBインスタンスは、TiKV(コプロセッサーキャッシュ機能)にプッシュダウンされる計算結果のキャッシュをサポートします。これにより、一部のシナリオで計算プロセスを高速化できます。
Configuration / コンフィグレーション
コプロセッサーキャッシュは、TiDB構成ファイルのtikv-client.copr-cache
の構成項目を介して構成できます。コプロセッサー・キャッシュを使用可能にして構成する方法の詳細については、 TiDBConfiguration / コンフィグレーションファイルを参照してください。
機能の説明
SQLステートメントが単一のTiDBインスタンスで初めて実行されるとき、実行結果はキャッシュされません。
計算結果は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パネルが表示されます。このパネルは、クラスタ全体でのコプロセッサー・キャッシュのヒット、ミス、およびキャッシュ破棄の数を監視します。