TiDB v6.0.0 (DMR) :缓存表初试丨TiDB Book Rush

点击上方?蓝字
关注我们了解更多
TiDB v6.0.0 (DMR) 版本推出了缓存表的功能,以应对很少新增记录项的小表上频繁的读请求。在金融场景的订单表、汇率表,银行分行或者网点信息表,物流行业的城市、仓号库房号表,电商行业的地区、品类相关的字典表等等场景下能够很大程度地提高效率。本文通过测试验证了 TiDB?缓存表的性能表现。
本文作者:啦啦啦啦啦,TiDB 老粉,目前就职于京东物流,社区资深用户,asktug 主页。
背景
缓存表的使用场景
表的数据量不大 只读表,或者几乎很少修改 表的访问很频繁,期望有更好的读性能
测试环境
1. 硬件配置及集群拓扑规划

2. 软件配置

3. 参数配置
server_configs:
tidb:
log.slow-threshold:?300
new_collations_enabled_on_first_bootstrap:?true
tikv:
readpool.coprocessor.use-unified-pool:?true
readpool.storage.use-unified-pool:?false
pd:
replication.enable-placement-rules:?true
????replication.location-labels:
????-?host
由于硬件条件受限,只有 2 台普通性能的云主机混合部署的集群(实际上和单机部署也差不多了)。单机 CPU 核数较少且 TiDB Server 没有做负载均衡所以并发无法调整太高。以下测试均使用一个 TiDB Server 节点进行压测,因此不用特别关注本次测试的测试数据,可能会跟其他测试结果有所出入,不代表最佳性能实践和部署,测试结果仅限参考。
性能测试
CREATE?TABLE?sbtest1?(
id?int(11)?NOT?NULL?AUTO_INCREMENT,
k?int(11)?NOT?NULL?DEFAULT?'0',
c?char(120)?NOT?NULL?DEFAULT?'',
pad?char(60)?NOT?NULL?DEFAULT?'',
PRIMARY?KEY?(id),
KEY?k_1?(k)
)?ENGINE?=?InnoDB?CHARSET?=?utf8mb4?COLLATE?=?utf8mb4_bin?AUTO_INCREMENT?=?1
读性能测试
sysbench?--mysql-host=10.0.0.1??--mysql-port=4000??--mysql-db=sbtest?--mysql-user=root?--time=600?\
--threads=8?--report-interval=10?--db-driver=mysql??oltp_point_select?--tables=1?--table-size=5000?run
sysbench?--mysql-host=10.0.0.1??--mysql-port=4000??--mysql-db=sbtest?--mysql-user=root?--time=600?\
--threads=8?--report-interval=10?--db-driver=mysql??oltp_read_only?--tables=1?--table-size=5000?run
sysbench?--mysql-host=10.0.0.1??--mysql-port=4000??--mysql-db=sbtest?--mysql-user=root?--time=600?\
--threads=8?--report-interval=10?--db-driver=mysql??select_random_points?--tables=1?--table-size=5000?run
sysbench?--mysql-host=10.0.0.1??--mysql-port=4000??--mysql-db=sbtest?--mysql-user=root?--time=600?\
--threads=8?--report-interval=10?--db-driver=mysql??select_random_ranges?--tables=1?--table-size=5000?run
一、使用普通表


二、使用缓存表


三、性能对比




读写混合性能测试
sysbench?--mysql-host=10.0.0.1??--mysql-port=4000??--mysql-db=sbtest?--mysql-user=root?--time=600?--threads=8?--report-interval=10?--db-driver=mysql??oltp_read_write?--tables=1?--table-size=5000???--point_selects=10?--non_index_updates=0?--delete_inserts=10?--index_updates=0?run
一、使用普通表


二、使用缓存表


三、性能对比




遇到的问题
尝试将 30w 数据的表改为缓存表时报错 。ERROR 8242 (HY000): 'table too large' is unsupported on cache tables。
测试过程中缓存表性能出现了不稳定的情况,有些时候缓存表反而比普通表读取性能差,使用 trace 语句(TRACE SELECT * FROM sbtest1;)查看发现返回结果中出现了regionRequest.SendReqCtx,说明 TiDB 尚未将所有数据加载到内存中,多次尝试均未加载完成。把?tidb_table_cache_lease?调整为 10 后没有出现该问题。
根据测试结果,写入较为频繁的情况下缓存表的性能是比较差的。在包含写请求的测试中,缓存表相较于普通表的性能几乎都大幅下降。
测试总结
读性能


读写混合



关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 中央经济工作会议在北京举行 7903975
- 2 紧急提醒:请在日中国公民进行登记 7807860
- 3 中央定调明年继续“国补” 7713294
- 4 “九天”无人机成功首飞 7618774
- 5 断崖式降温!今冬最强寒潮来了 7524122
- 6 中央经济工作会议释信号:3件事不做 7428233
- 7 网警:男子AI生成车展低俗视频被拘 7329135
- 8 4人喝近120瓶啤酒惊呆老板 7236857
- 9 人民空军中日双语发文:大惊小怪 7138766
- 10 寒潮来袭 “速冻”模式如何应对 7039919







PingCAP
