mysql配置参数innodb_flush_log_at_trx_commit和sync_binlog

innodb_flush_log_at_trx_commit
0(延迟写): log_buff --每隔1秒–> log_file —实时—> disk
1(实时写,实时刷): log_buff —实时—> log_file —实时—> disk
2(实时写,延迟刷): log_buff —实时—> log_file --每隔1秒–> disk
sync_binlog
默认,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。
如果sync_binlog>0,表示每sync_binlog次事务提交,MySQL调用文件系统的刷新操作将缓存刷下去。最安全的就是sync_binlog=1了,表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置。这样的话,在数据库所在的主机操作系统损坏或者突然掉电的情况下,系统才有可能丢失1个事务的数据。但是binlog虽然是顺序IO,但是设置sync_binlog=1,多个事务同时提交,同样很大的影响MySQL和IO性能。虽然可以通过group commit的补丁缓解,但是刷新的频率过高对IO的影响也非常大。对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。
推荐做法:
innodb_flush_log_at_trx_commit=2
sync_binlog=100

你可能感兴趣的:(MySQL)