Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >提高mysql插入速度的方法

提高mysql插入速度的方法

原创
作者头像
杨漆
修改于 2021-09-07 10:07:55
修改于 2021-09-07 10:07:55
5.8K0
举报
文章被收录于专栏:TidbTidb

**导读**

> 作者:杨漆

> 16年关系型数据库管理,从oracle 9i 、10g、11g、12c到Mysql5.5、5.6、5.7、8.0 到TiDB获得3个OCP、2个OCM;运维路上不平坦,跌过不少坑、熬过许多夜。把工作笔记整理出来分享给大伙儿,希望帮到大家少走弯路、少熬夜。

干货:

一般情况下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秒,效率得到极大的提升!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL修改数据类型的问题总结(r10笔记第74天)
昨天快下班的时候,突然开发的同事找我说有个紧急需求,负责这个业务的DBA同事回家了,想让我帮忙看看,运行个SQL语句,几秒钟就好。我一听,就本着人道主义的精神留下来处理,但是发现似乎留给我的是一个大坑。 了解了问题之后,让我有些后背发凉,这个表根据开发同事反馈有20亿的数据,这得多大的一个表啊,当前的问题是这个表里的主键id数据类型是int,因为数据类型的限制已经达到了最大值,现在插入不了数据了。希望我帮忙处理一下,把数据类型修改为bigint. 我们简单来了解一下MySQL的数据类型。 对于数据类型有下面
jeanron100
2018/03/20
7190
MySQL修改数据类型的问题总结(r10笔记第74天)
MySQL谬误集02: DDL锁表
导语 | 本文是MySQL谬误集系列文章的第二篇,该系列旨在纠正一系列似是而非的说法。比如关于MySQL DDL操作,有很多同学认为会锁表,那是不是一定会锁表呢?是锁读还是锁写呢?锁多长时间?不同的DDL操作有差别吗?MySQL从5.5到8.0,对这个问题有什么改进呢?本文做了一个简单的总结。
DBA成江东
2023/08/19
1.6K0
MySQL谬误集02: DDL锁表
数据库-表的操作
**语法一:**create table 新表 select 字段 from 旧表
cwl_java
2020/03/27
6740
MYSQL回顾(表操作相关)
数据库表的操作主要包括修改表名、查看表结构、添加字段、删除字段、修改字段类型、修改字段名、给表设置主键、设置自增长字段、删除表、清空表。下面会一一举例。
VV木公子
2020/02/18
5.4K0
技术分享 | 可能是目前最全的 MySQL 8.0 新特性解读(上)
系统表全部换成事务型的innodb表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。
爱可生开源社区
2023/03/23
1.6K0
Oracle12c修复GAP新方法
12c可以通过Server name直连主库,Online修复,省去Rman基于scn备份后再传输到备库恢复的冗繁步骤
杨漆
2021/07/25
8720
Oracle12c修复GAP新方法
centos7.5上部署redis3(单体)
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
杨漆
2021/07/25
4330
centos7.5上部署redis3(单体)
Mysql 基础篇
存储引擎是mysql的特性之一,使用者可以根据自己的业务场景选择自己适合的存储引擎,是不是要支持事物,如何选择存储,如何选择索引数据,当然你也可以定制自己的存储引擎,如果你们公司有能力,mysql支持支持很多种存储引擎,如 Myisam ,Innodb,MEMORY,MERGE,BDB,EXAMPLE,CSV等等,mysql 5.5之前默认的存储引擎是Myisam,之后就是Innodb,今天我们只讲常见的存储引擎。
小土豆Yuki
2020/06/15
7230
7天快速掌握MySQL-DAY3
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
披头
2019/12/26
6950
MySQL5.7主从同步--点位方式及GTID方式
MySQL5.6加入了GTID的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。主从同步时GTID_Event和事务的Binlog都会传递到从库,从库在执行的时候也是用同样的GTID写binlog,这样主从同步以后,就可通过GTID确定从库同步到的位置了。也就是说,无论是级联情况,还是一主多从情况,都可以通过GTID自动找到需要进行复制的点位,而无需像之前版本那样通过File_name和File_position来进行位置点的主从复制。
俊才
2019/08/07
2.5K0
MySQL5.7主从同步--点位方式及GTID方式
MySQL反连接的优化总结(r10笔记第51天)
今天同事有一个环境发现一条语句执行时间很长,感到非常奇怪。刚好有些时间,就抽空琢磨了下这个问题。 总体来看这个环境还是相对比较繁忙的,线程大概是200多个。 # mysqladmin pro|less|wc -l 235 带着好奇查看慢日志,马上定位到这个语句,已做了脱敏处理。 # Time: 161013 9:51:45 # User@Host: root[root] @ localhost [] # Thread_id: 24630498 Schema: test Last_errno: 1160
jeanron100
2018/03/20
7200
MySQL反连接的优化总结(r10笔记第51天)
故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题的总结
经过排查分析得出,这是由于改表系统解析改表需求得出错误的改表方案导致,即这类改表可以满足快速改表操作(直接使用 ALTER TABLE),理论上任务下发后能马上改完,但是工单结果是执行触发 10 秒超时,最终工单失败。
爱可生开源社区
2024/01/31
3790
故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题的总结
MySQL数据insert测试
本地Mac安装的MySQL(8.0.30)服务,性能数据仅作为参考,但对于不同索引情况下的结果,还是能看出有区别。
胖五斤
2022/12/25
1.6K0
第29期:索引设计(监测全文索引)
MySQL 有很完整的元数据表来监测全文索引表的插入,更新,删除;甚至全文索引表以及辅助表的数据追踪。
爱可生开源社区
2021/06/16
5630
MySQL Online DDL(二)(r11笔记第88天)
对于Online DDL,之前简单分析了一些场景MySQL中的Online DDL(第一篇)(r11笔记第3天),其实有一个很关键的点没提到,那就是online DDL的算法,目前有三个操作选项,default,inplace,copy可选 具体可以参考 https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html > select count(*) from newtest; +----------+ | count(*) | +-----
jeanron100
2018/03/21
6870
技术分享 | MySQL VARCHAR 最佳长度评估实践
有客户反馈,他们对一个 VARCHAR 类型的字段进行长度扩容。第一次很快就可以修改好,但是第二次却需要执行很久。比较疑惑明明表中的数据量是差不多的,为什么从 VARCHAR(20) 调整为 VARCHAR(50) 就比较快,但是从 VARCHAR(50) 调整为 VARCHAR(100) 就需要执行很久呢? 于是我们对该情况进行场景复现并进行问题分析。
爱可生开源社区
2024/05/11
4810
技术分享 | MySQL VARCHAR 最佳长度评估实践
技术分享 | MariaDB 10.1.9 迁移到 MySQL 5.7.25
爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查,对数据库有兴趣,对技术有想法。一入 IT 深似海,从此节操是路人。
爱可生开源社区
2020/06/12
2.1K0
技术分享 | MariaDB 10.1.9 迁移到 MySQL 5.7.25
Tokudb安装测试初探
TokuDB 是一个高性能、支持MVCC的MySQL 和 MariaDB 的存储引擎。TokuDB 的主要特点是数据压缩功能出色,对高写压力的支持,由美国TokuTek公司(http://www.tokutek.com/) 研发,该公司于2015年4月份被Percona收购,理所当然地提供了TokuDB版本的Percona Server。本文使用Peronca server 5.6.30 版本进行测试安装。
用户1278550
2018/08/09
5690
Centos7安装MySQL8.0 - 操作手册
MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!
洗尽了浮华
2019/05/25
1.9K1
MySQL 表空间加密插件 Keyring
MySQL支持对InnoDB单表空间、通用表空间、系统表空间和Redo、Undo文件进行静态加密。从8.0.16开始支持对Schema和通用表空间设置加密默认值,这就允许对在这些Schema和表空间中的表是否加密进行统一控制;静态加密功能依赖于Keyring组件或插件,MySQL社区版提供的Keyring file插件会将Keyring数据存储在服务器主机的本地文件系统中。
数据和云
2021/09/22
3.7K0
相关推荐
MySQL修改数据类型的问题总结(r10笔记第74天)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档