MySQL 分区表性能测试

Keeper 任务调度工具中,任务实例表是访问比较频繁的表,且数据增量较大。为了测试在大数据量的访问效率,特意做了这个实验。这个实验分别测试 MySQL 大表分区和不分区下的常用 3 种查询的速度。关于如何分担大表的负载,可以查看另一篇文章:MySQL 中大数据量高访问量的表负载分担策略

测试表数据结构

分为两个表test1test2,其中test1表不分区,test2表使用主键id分区,共分为 10 个区。其中 job_id 为索引。

测试数据

实验过程中,每 500 万数据测试一下,最大数据量 5000 万数据。假如 Keeper 共有 2000 个调度任务,这 2000 个调度任务每天生成 5000 个实例,如果不使用任务自动清理的话,达到 5000 万数据量需要 1 万天。嗯,足够了。

数据表中 job_id 取 1 ~ 2000 之间的随机数,title 字段为 32 位随机字符,title字段和create_time字段与测试基本无关。

硬件环境

两种方案均在工作机上进行测试,16G 内存,6 核 12 线程 CPU,SSD 硬盘。测试过程中尽量不使用电脑,保证不同测试的硬件无差异。

测试方法

每种方案下共进行三种查询,第一种为按 job_id 进行分组计数,每二种查询为按 job_id 取前 100 条数据,第三种查询为按主键id查找单条数据。job_idid均按其值范围随机生成对应的数字。每种查询进行 100000 次,最后取均值,最多保留小数点后 3 位,时间单位为毫秒。

测试结果

数据量 COUNT 计数 SELECT 100 主键查询
不分区 分区 不分区 分区 不分区 分区
500万 1.287 1.962 3.408 4.233 0.298 0.341
1000万 1.833 2.705 3.095 3.842 0.641 0.637
1500万 2.894 3.494 3.561 4.536 0.735 0.758
2000万 3.216 4.251 3.202 5.117 0.771 0.682
2500万 4.072 5.43 3.27 4.616 0.765 0.796
3000万 4.73 6.356 3.23 5.384 0.84 0.922
3500万 5.515 7.852 3.622 5.586 0.925 0.88
4000万 6.905 9.683 3.013 6.499 0.898 0.914
4500万 6.36 14.171 3.043 4.878 0.749 0.809
5000万 7.271 9.016 2.808 5.101 0.785 0.781

测试结论分析如下:

插入数据源代码

源代码使用 Scala 编写,其中用到了 Qross PQL 中相关的类。

查询计数源代码

源代码使用 Scala 编写,其中用到了 Qross PQL 中相关的类。


参考链接


微信公众号
码农老吴  |  星源工作室  |  开发月志  |  问题反馈
联系我们:wu@qross.io     手机/微信:18618171102
京 ICP 备 20027445 号
$(h1)!