暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

IT那活儿 2021-04-10
594

  生产背景

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

  现象

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

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

CPU8

内存:32G

Innodb_buffer_pool_size24G

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

Showprocesslist状态如下所示:

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

  分析过程

通过表结构查看该表:

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

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

如下图所示:

验证结果:

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

END

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论