导读
作者:杨漆
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冲突
-
innodb_flush_log_at_trx_commit 配置设定为0 (插入速度会有很大提高,但Sever断电时有丢失数据风险)
-
innodb_autoextend_increment 从8M修改为256M (减少tablespace自动扩展次数,避免频繁自动扩展Data File导致 MySQL 的checkpoint 操作)
-
innodb_log_buffer_size 从8M修改为16M (根据1秒钟内的事务量情况 适度增大,太大会浪费,因为每1秒钟总会flush一次)
-
innodb_log_file_size 从8M修改为256M (根据服务器内存大小与具体情况设置适合自己环境的值)
-
innodb_log_f