查询的最小的单位是什么?
缓存的是结果集,不是一个Region,如果是缓存的Region,那内存消耗太大了。
比如tikv,如果缓存的是结果集,而不是region,就很难解决逻辑io的问题了,每次都要去扫描磁盘了吧
缓存的是结果集。
缓存的是结果集的键值对吧,应该包含主键
肯定不是一个region,应该是一个集合
tidb不缓存,tikv缓存的是原始数据键值对,不是结果吧
TiDB Server LRU缓存
TIKV是下推计算结果缓存
tidb-server 缓存内容之一是“下推计算结果”: 下推计算结果缓存 | PingCAP 文档中心
tikv-server
Block-cache 缓存的是数据块,os 磁盘的读取最小单位是 数据块
缓存以 Region 为单位。对 Region 的写入会导致涉及该 Region 的缓存失效。基于此原因,该功能主要会对很少变更的数据有效果。
这里的下推结果,文档还是说以region为单位,是吧
tidb是物理的4k块?而不是逻辑单位?
tikv-client.copr-cache默认并不会开
关掉的是因为碰到什么问题了吗?
region 是 tidb 数据库的,和 os 是两个角度
你说的是tidb的那个coprocessor cache吗?
如果是coprocessor cache 是这样工作的:
tidb的所有查询会以 region 为单位拆分开。假如说需要扫描一批数据,会下推到 扫描各个region的一批数据,那对应的过滤条件走完后就扫描到了这些数据。
这些结果如果超出了缓存从阈值,就缓存起来,下次直接去对应的reigon读取一下apply index,如果region没有过变更,cache就有效,可以继续用。否则就失效,从region中读取数据。
没关吧,我看默认是1G缓存啊。哪个版本关了?我一直用着很好的啊。
tikv-client.copr-cache 从 v4.0.0 版本开始引入
本部分介绍 Coprocessor Cache 相关的配置项。
capacity-mb
- 缓存的总数据量大小。当缓存空间满时,旧缓存条目将被逐出。值为 0.0 时表示关闭 Coprocessor Cache。
- 默认值:1000.0
- 单位:MB
- 类型:Float
缓存以 Region 为单位。对 Region 的写入会导致涉及该 Region 的缓存失效。基于此原因,该功能主要会对很少变更的数据有效果。
这句话很明显最小的单位是region吧?
不是整个region的数据都缓存上来,是针对一次扫描的结果缓存起来。这个我看过代码,没疑问。
至于缓存失效,毕竟几万个region,也不是每次都所有更新的。
另外每次查询都可以看到coprocessor的cache命中情况。explain看下就行
嗯好嗯好
下面是cache的代码和用cache的代码,逻辑很清晰。
https://github.com/pingcap/tidb/blob/master/pkg/store/copr/coprocessor_cache.go
https://github.com/pingcap/tidb/blob/master/pkg/store/copr/coprocessor.go#L1698
好的,感谢