一,innodb_flush_log_at_trx_commit 默认值1
0 事务提交不做操作,每秒钟把日志缓存(innodb_log_buffer_size控制)write os cache并flush到日志文件,
1 每次提交都将日志缓存write os cache并flush到日志文件,该操作不丢失已经提交的事务,除非磁盘或者操作系统是‘伪’刷新,这也有另外参数确定sync_binlog,最安全的一种设置,但是代价大
2 每次提交都将日志缓存write os cache,不flush,每秒做一次刷新。跟0的唯一却别是如果在mysql进程挂掉2已经写到磁盘cache;如果这时服务器挂了,那就也丢失数据了
二, sync_binlog 默认值是1
0 像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
N 当sync_binlog =N (N>0) ,MySQL 在每写N次二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去
三,场景
双1适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如订单,交易,充值,支付消费等高性能事务处理系统。双1模式下,当磁盘IO无法满足业务需求时 比如11.11 活动的压力。
推荐的做法是 innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N为500 或1000) 且使用带蓄电池后备电源的缓存cache,防止系统断电异常。
0 事务提交不做操作,每秒钟把日志缓存(innodb_log_buffer_size控制)write os cache并flush到日志文件,
1 每次提交都将日志缓存write os cache并flush到日志文件,该操作不丢失已经提交的事务,除非磁盘或者操作系统是‘伪’刷新,这也有另外参数确定sync_binlog,最安全的一种设置,但是代价大
2 每次提交都将日志缓存write os cache,不flush,每秒做一次刷新。跟0的唯一却别是如果在mysql进程挂掉2已经写到磁盘cache;如果这时服务器挂了,那就也丢失数据了
二, sync_binlog 默认值是1
0 像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
N 当sync_binlog =N (N>0) ,MySQL 在每写N次二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去
三,场景
双1适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如订单,交易,充值,支付消费等高性能事务处理系统。双1模式下,当磁盘IO无法满足业务需求时 比如11.11 活动的压力。
推荐的做法是 innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N为500 或1000) 且使用带蓄电池后备电源的缓存cache,防止系统断电异常。