mysql load大表一直无法成功优化问题处理

  生产背景

生产环境为主从架构,每月业务都会load几千万的数据到同一张表,该表的数据是按月做了分区。

  现象

Mysql数据库中通过load向一张空表中导入5000万数据,总大小25G左右,分成87个文件依次导入,从第一个文件开始保持30秒左右,后续load时间持续增长一直到75个文件后每个load的市场基本都在1000s以上,一直到83个文件的几个小时都无法成功load数据到mysql数据库。

Mysql主机资源情况如下所示:

CPU:8

内存:32G

Innodb_buffer_pool_size:24G

慢查询日志中load时长情况如下所示:

mysql load大表一直无法成功优化问题处理

Showprocesslist状态如下所示:

mysql load大表一直无法成功优化问题处理

60多万数据load了一个多小时后直接kill回退了,如下所示:

mysql load大表一直无法成功优化问题处理

  分析过程

通过表结构查看该表:

mysql load大表一直无法成功优化问题处理

通过showcreate table table_nmae核实到该表有个联合主键和联合索引;

然后由于load的原理是跳过SQL解析,直接生成数据库的数据文件,导入前关闭索引,导入完成后更新索引;可以得出该表的索引是影响性能的主要原因。然后通过与前台业务沟通知道业务对该表的查询条件只有两个字段,然后与业务沟通后决定去掉索引重建一个联合主键保证业务的查询速度。

如下图所示:

mysql load大表一直无法成功优化问题处理

验证结果:

表结构优化load5000万数据分成68个文件后load时长都在40s以内,如下图日志记录所示:

mysql load大表一直无法成功优化问题处理

来源:IT那活儿,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/126257

发表评论

登录后才能评论
侵权联系
返回顶部