mysql开启binlog的情况下运行速度缓慢的原因

事件起因: 由于自建MySQL运维成本过高,包括内存使用不稳定硬盘适用不稳定以及性能问题(相当于是虚拟机上面又加了一层服务),于是决定将一部分数据库迁移到云上服务商提供的MySQL,迁移完成后同事在扫库的过程中发现,新的数据库速度会比老的慢大概7倍左右。在查看了数据量、引擎、index、explain执行语句之后发现没有大的差别,于是只好求助于云服务商的DBA,得出来的结论是:由于他们的后台服务逻辑原因导致数据库配置默认是开启了binlog,并且不可关闭,同时!!!同时!!sync_binlog他们默认是为1,表示有binlog立即写入硬盘!!!所以可想而知效率下降的是多么厉害,将其改为0表示缓存然后同步到硬盘后性能恢复!!
ps:*sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。*

关于binlog后续还会有更多的精彩后续 > <