千家信息网

优化系列 | 游戏数据表拆分优化经典案例

发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,1. 目的通过对比测试,分析某数据表tabC拆分方案前后性能对比,确定拆分方案的可行性。2. 方法对拆分方案前后两种类型进行对比测试。同时,每次测试中采用两种更新方式:1. 和原来类似,对数据表所有字
千家信息网最后更新 2024年11月12日优化系列 | 游戏数据表拆分优化经典案例

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. 结果


全表分表
多次update02:56:4900:16:06
一次update00:54:0200:08:56


5. 结论
从测试结果很明显看到,分表后的并发更新效率远比比分表前高,而且,如果对tblC表的多次更新能合并到一起的话,更能获得很大提高。

因此建议:
1. 对类似tblC表的其他表实施同样的拆分方案;
2. 对数据表的更新最好一次性完成,而不是多个字段分多次,将一个事务变成多个事务;


分表原则:
1. 从原表中分离出text字段;
2. 将分离出的text字段重新组合,确保每个分表的实际行长度不高于8KB;
3. 可能的话,不使用text,实际长度小于255的,直接转成varchar;


--------------------------------------分割线--------------------------------------

知数堂 (http://zhishuedu.com)培训是由资深MySQL专家叶金荣、吴炳锡联合推出的专业优质培训品牌,主要有MySQL DBA实战优化和Python运维开发课程,是业内最有良心、最有品质的培训课程。

0