7.tidb缓存
7.1虽然结果都是从tikv中读出,但是执行计划中使用了表连接、hash join、子查询,做不到从某个tikv中得到数据,可能散落在多个tikv中。从多个tikv中汇聚到tidb server的缓存中,汇聚成2个表,然后两表再做连接。
7.2事务(比如要改3g的数据)要先放缓存中,然后提交。
7.3线程池需要缓存。
7.4解析、编译中用到的元数据也放在tidb 缓存中
tidb server缓存管理:
tidb_mem_quota_query(每个sql语句或者查询默认能使用的缓存量)(比如2表关联就是这个来限制)
oom-action(sql超过上面阈值后,是中断显示error,还是记录日志行为,还是如何)
8.热点小表缓存
热点小表概述:
大量读业务、非频繁修改、小于64m的表为热点表。
造成影响:
而如果一个表只占一个region,这样的话,那个tikv非常繁忙,造成性能瓶颈。
语法:
将这张小表(haha表)缓存到cache table中的语句(要求小于64m)
alter table haha cache;
参数:
tidb_table_cache_lease=5
这个参数默认5秒。
5秒内,用户可以从tidb缓存中读表。
原理:
租约时间中,能读,不能写。租约到了,缓存表过期,缓存表不可读了。
可对表进行写操作(对tikv,而不是缓存表),此时读也是对tikv中的表读。
当写操作完成后,下一次的租约开始,从tikv中将数据重新缓存到缓存表中(cache table的refresh)。