一、innodb_flush_log_at_trx_commit (存储引擎层 innodb特有)
--查看参数
select @@innodb_flush_log_at_trx_commit;
innodb_flush_log_at_trx_commit=0 表示当事务提交时,不做日志写入操作,而是每秒钟将log buffer中的数据写入文件系统缓存并且秒fsync磁盘一次;
innodb_flush_log_at_trx_commit=1 每次事物的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;flush 到操作系统的文件系统缓存 fsync到物理磁盘.(默认)
innodb_flush_log_at_trx_commit=2 每次事务提交引起写入文件系统缓存,但每秒钟完成一次fsync磁盘操作。
二、sync_binlog ( Server 层 日志指 bin_log 二进制日志 保证数据恢复 主从)
该参数表示事务写入 binary log 并同步到磁盘的过程。
取值为0:存储引擎不进行binlog的刷新到磁盘,而由操作系统的文件系统控制缓存刷新。性能最佳(默认)
取值为1:每次事务提交后存储引擎调用文件系统的sync操作进行一次缓存的刷新,是最慢的,但是最安全
取值 =n:当进行n次事务提交后,存储引擎调用文件系统的sync操作进行一次缓存的刷新。
三、Innodb_flush_method(存储引擎层 innodb特有 刷写策略 日志指redo日志 突然发生意外 及时回滚数据 恢复内存中的脏页 )
page buffer刷写通过Innodb_flush_method控制
Innodb_flush_method=fsync 日志和数据缓冲区写磁盘,都走OS buffer(默认)
Innodb_flush_method=O_DIRECT 数据缓冲区写磁盘,不走OS buffer 日志走os buffer
Innodb_flush_method=O_DSYNC 日志缓冲区写磁盘,不走 OS buffer 数据走osbuffer
三、使用建议
--最高安全模式
innodb_flush_log_at_trx_commit=1
Innodb_flush_method=O_DIRECT
--最高性能:
innodb_flush_log_at_trx_commit=0
Innodb_flush_method=fsync