以前项目遇到过 insert很慢,当时是修改mysql的my.cnf 配置
innodb_flush_log_at_trx_commit 从 1 改成 2, 性能会好些。
最近的项目,本地电脑centos环境,发现insert还是很慢 插入一条 要30~40ms
查资料 看到有一个 sync_binlog 参数
如果改成0 ,则1ms不到, 测试insert命令基本可以插入7~8条/ms。
命令行格式 | --sync-binlog=# |
---|---|
系统变量 | sync_binlog |
范围 | 全球的 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 1 |
最小值 | 0 |
最大值 | 4294967295 |
控制 MySQL 服务器将二进制日志同步到磁盘的频率。
-
sync_binlog=0:禁用 MySQL 服务器将二进制日志同步到磁盘。相反,MySQL 服务器依赖操作系统不时将二进制日志刷新到磁盘,就像它对任何其他文件所做的那样。此设置提供了最佳性能,但如果发生电源故障或操作系统崩溃,服务器可能已提交尚未同步到二进制日志的事务。
-
sync_binlog=1:在提交事务之前启用二进制日志到磁盘的同步。这是最安全的设置,但由于磁盘写入次数增加,可能会对性能产生负面影响。在电源故障或操作系统崩溃的情况下,二进制日志中丢失的事务仅处于准备状态。这允许自动恢复例程回滚事务,从而保证不会从二进制日志中丢失事务。
-
sync_binlog=N, 其中是 0 或 1 以外的值:在收集到二进制日志提交组
N
后,将二进制日志同步到磁盘 。N
在电源故障或操作系统崩溃的情况下,服务器可能已经提交了尚未刷新到二进制日志的事务。由于磁盘写入次数增加,此设置可能会对性能产生负面影响。较高的值会提高性能,但会增加数据丢失的风险。
InnoDB
为了在与事务一起使用 的复制设置中获得最大可能的持久性和一致性,请使用以下设置: