[MySQL优化案例]系列 -- 经典游戏数据表拆分优化案例
1. 目的
通过对比测试,分析某数据表tabC拆分方案前后性能对比,确定拆分方案的可行性。
2. 方法
对拆分方案前后两种类型进行对比测试。
同时,每次测试中采用两种更新方式:
1. 和原来类似,对数据表所有字段的更新分多次
2. 对数据表所有字段的更新一次性完成
3. 环境
本次测试采用线上实际数据导入。tabC表共有132万行记录,全表共100G。
将所有字段重新组合,确保每个分表的实际行长度不高于8KB,拆分成3个子表,大小分别是:
tabC_1.ibd 796M
tabC_2.ibd 10.2G
tabC_3.ibd 8.4G
之后再进行全表随机更新,每轮测试都在脚本中并发调用存储过程来完成,最大10个并发进程。
每次测试之前都重启mysqld,且无其他额外压力,确保环境公平。
4. 结果
全表 | 分表 | |
多次update | 02:56:49 | 00:16:06 |
一次update | 00:54:02 | 00:08:56 |
5. 结论
从测试结果很明显看到,分表后的并发更新效率远比比分表前高,而且,如果对tblC表的多次更新能合并到一起的话,更能获得很大提高。
因此建议:
1. 对类似tblC表的其他表实施同样的拆分方案;
2. 对数据表的更新最好一次性完成,而不是多个字段分多次,将一个事务变成多个事务;
分表原则:
1. 从原表中分离出text字段;
2. 将分离出的text字段重新组合,确保每个分表的实际行长度不高于8KB;
3. 可能的话,不使用text,实际长度小于255的,直接转成varchar;
评论
游客 (未验证)
周四, 2012/10/25 - 10:30
Permalink
老叶多讲讲分表的策
老叶多讲讲分表的策略吧,例如这个tabc,能不能把详细的步骤分享给我们?谢谢
游客 (未验证)
周一, 2012/12/24 - 18:09
Permalink
如何进行分表
如何进行分表 ?分表的维度是什么 ?怎么分呢 ?这个我很想知道。。
yejr
周二, 2012/12/25 - 17:16
Permalink
更新了下内容,增加
更新了下内容,增加‘分表原则’
游客 (未验证)
周二, 2013/01/22 - 14:14
Permalink
分出来的text怎么和原表关联呢,一般是怎么做的
分出来的text怎么和原表关联呢,一般是怎么做的
yejr
周三, 2013/01/23 - 08:39
Permalink
用和业务相关的唯一索引或主键关联,例如:user_id
用和业务相关的唯一索引或主键关联,例如:user_id,order_id之类的,主表上自增生成,子表的ID和主表一致。
游客 (未验证)
周四, 2013/02/21 - 21:11
Permalink
要是能有具体的测试过程 以及更多的数据展示就更好了!
要是能有具体的测试过程 以及更多的数据展示就更好了!