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

提高mysql插入速度的方法

干货:

一般情况下mysql在百万级数据时读取、插入、更新速度较快,客户体验良好,但到了两千万级以上就会出现很慢

解决案例:将MySQL插入速度从2000条/分钟 提高到 12000条/秒。

核心思想:

1、尽量使数据库一次性写入Data File

2、减少数据库的checkpoint次数

3、程序上尽量缓冲数据,进行批量式插入与提交

4、减少系统的IO冲突

1. innodb_flush_log_at_trx_commit 配置设定为0 (插入速度会有很大提高,但Sever断电时有丢失数据风险)

2. innodb_autoextend_increment  从8M修改为256M (减少tablespace自动扩展次数,避免频繁自动扩展Data File导致 MySQL 的checkpoint 操作)

3. innodb_log_buffer_size 从8M修改为16M (根据1秒钟内的事务量情况 适度增大,太大会浪费,因为每1秒钟总会flush一次)

4. innodb_log_file_size 从8M修改为256M (根据服务器内存大小与具体情况设置适合自己环境的值)

5. innodb_log_files_in_group  从2修改为8 (增加Log File数量。此修改主要满足第1、2点)

6. innodb_file_per_table=on & alter table table_name engine=innodb 将大表转变为独立表空并且进行分区,然后将不同分区下挂在多个不同硬盘阵列中,分散IO

7. innodb_write_io_threads & innodb_read_io_threads  从4修改为64 (根据自己的Server CPU核数来更改相应的参数值)

8. innodb_io_capacity & innodb_io_capacity_max  从200修改为10000 (提升 innodb刷脏页的能力,根据自己的的存储IOPS进行对应调整)

获取测试结果:

Query OK, 3840000 rows affected (5 min 20.11 sec)

Records: 3840000 Duplicates: 0 Warnings: 0

Query OK, 3840000 rows affected (6 min 47.28 sec)

Records: 3840000 Duplicates: 0 Warnings: 0

Query OK, 3840000 rows affected (7 min 36.11 sec)

Records: 3840000 Duplicates: 0 Warnings: 0

Query OK, 3840000 rows affected (7 min 59.21 sec)

Records: 3840000 Duplicates: 0 Warnings: 0

结果:完成了以上修改操作后;384万行数据的插入速度从30小时缩减到了5分20秒,效率得到极大的提升!

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

评论