MySQL  - 讨论区

标题:MySQL 参数浅析之 innodb_flush_log_at_trx_commit

2013年11月20日 星期三 18:16

innodb_flush_log_at_trx_commit参数对于InnoDB存储引擎写入操作的性能表现有重大影响。在MySQL默认的配置中,此参数被设置为1,这是最安全的选项,但也是性能最差的选项。有很多同学抱怨MySQL每秒钟才能写入几十条数据,这就很可能是这个默认选项引起的。

innodb_flush_log_at_trx_commit参数的意思是:是否在transaction提交时对日志文件进行flush操作。有三种选择:

0,在transaction提交时不会把log buffer的数据写入到日志文件,也不对日志文件进行flush操作。这是很不安全的,当MySQL程序或者操作系统崩溃后,最后一秒钟的交易数据就会丢失。

1,在transaction提交时把log buffer的数据写入到日志文件,并对日志文件进行flush操作。只要磁盘不损坏,即使MySQL程序或者操作系统崩溃,都不会丢失任何交易数据。

2,在transaction提交时,只是把log buffer的数据写入到日志文件,但并不对日志文件进行flush操作。在这种情况下,当MySQL程序崩溃,交易数据并不会丢失,但当操作系统崩溃时,就会丢失最后一秒钟的交易数据。

问题:为什么参数设置为0,却仅会丢失一秒钟的数据?

回答:无论这个参数如何设置,InnoDB都会每秒钟将log buffer的数据写入到日志文件,并且对日志文件进行flush操作。

综上所述:

如果交易数据非常重要(例如银行交易),那么这个参数必须设置为1。

如果是一般的互联网应该(例如社区讨论),那么可以设置为2,可以获得比较好的写入性能。

在生产环境中,一般没有理由将此参数这是为0。

 

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号