📣

TiDB Cloud Serverless 现已更名为
Starter
!此页面由 AI 自动翻译,英文原文请见
此处。

Coprocessor Cache

从 v4.0 版本开始,TiDB 实例支持缓存下推到 TiKV 的计算结果(Coprocessor Cache 功能),在某些场景下可以加快计算过程。

配置

Coprocessor Cache 功能默认启用。可缓存的数据最大大小为 1000 MB。

特性描述

  • 当在单个 TiDB 实例上首次执行某个 SQL 语句时,执行结果不会被缓存。

  • 计算结果会被缓存到 TiDB 的内存中。如果 TiDB 实例重启,缓存将失效。

  • 该缓存不在 TiDB 实例之间共享。

  • 只缓存下推计算的结果。即使命中缓存,TiDB 仍需执行后续计算。

  • 缓存以 Region 为单位。向 Region 写入数据会导致该 Region 的缓存失效。因此,Coprocessor Cache 主要在数据变化较少的场景下生效。

  • 当下推计算请求相同时,缓存会命中。通常在以下场景中,下推计算请求相同或部分相同:

    • SQL 语句相同。例如,反复执行相同的 SQL 语句。

      在这种场景下,所有的下推计算请求是一致的,所有请求都可以使用下推计算缓存。

    • SQL 语句包含变化条件,其他部分保持一致。变化条件为表的主键或分区。

      在这种场景下,部分下推计算请求与之前的请求相同,这些请求可以使用缓存的(之前的)下推计算结果。

    • SQL 语句包含多个变化条件,其他部分保持一致。变化条件与复合索引列完全匹配。

      在这种场景下,部分下推计算请求与之前的请求相同,这些请求可以使用缓存的(之前的)下推计算结果。

  • 该特性对用户是透明的。启用或禁用该特性不会影响计算结果,只会影响 SQL 执行时间。

查看缓存效果

你可以通过执行 EXPLAIN ANALYZE 或查看 Grafana 监控面板来检查 Coprocessor Cache 的效果。

使用 EXPLAIN ANALYZE

你可以在 Operators for accessing tables 中通过 EXPLAIN ANALYZE statement 查看缓存命中率。示例如下:

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 信息,表示 Coprocessor Cache 的命中率。上例中的 0.75 表示命中率大约为 75%。

查看 Grafana 监控面板

在 Grafana 中,你可以在 tidb 命名空间下的 distsql 子系统中看到 copr-cache 面板。该面板监控整个集群中 Coprocessor Cache 的命中次数、未命中次数和缓存丢弃情况。

文档内容是否有帮助?