`
inosin
  • 浏览: 91094 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

innodb_flush_log_at_trx_commit和innodb_flush_method

阅读更多
innodb_flush_log_at_trx_commit:

    主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。0,表示当事务提交时,不做日志写入操作,而是每秒钟将log buffer中的数据写入日志文件并flush磁盘一次;1,则在每秒钟或是每次事物的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;设置为2,每次事务提交引起写入日志文件的动作,但每秒钟完成一次flush磁盘操作。显然,设置为0或2可以减小系统的io压力,特别是0时,速度最快,提高mysql写操作的吞吐量,但mysql或操作系统的崩溃、断电都可能会引起数据的丢失,设置为2时os的崩溃和断电可能会引起数据的丢失。

innodb_flush_method:


    影响了服务器flush数据或日志文件的方法。具体有三个选值:默认的default,innodb使用fsync()函数flush数据和日志文件;O_DIRECT,innodb使用O_DIRECT的方式打开数据文件,并使用fsync()函数flush数据和日志文件;O_DSYNC,innodb使用O_SYNC打开并flush日志文件,使用fsync()函数flush数据文件。

注:在类unix操作系统中,文件的打开方式为O_DIRECT会最小化缓冲对io的影响,该文件的io是直接在用户空间的buffer上操作的,并且io操作是同步的,因此不管是read()系统调用还是write()系统调用,数据都保证是从磁盘上读取的;O_SYNC方式表示以同步io的方式打开文件,任何写操作都将阻塞到数据写入物理磁盘后才返回。fsync(int filedes)函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fdatasync(int filedes)函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的元信息到磁盘。

sync_binlog:


    影响了binary log的fllush,当为1时,每个事物提交后,mysql将用fdatasync()函数将二进制日志同步到磁盘上;当为0时,mysql不会做额外的flush,而是依靠os的flush。

做过一些相应的测试,获得一些以上三参数搭配使用的结论:

1)O_DIRECT的flush_method更适合于操作系统内存有限的情况下(可以避免不必要的对交换空间的读写操作),否则,它会由于禁用了os的缓冲降低对数据的读写操作的效能。

2)Sync_binlog为1时,每个含有修改操作的事物提交后,mysql将把二进制日志同步到磁盘上,增大了io压力,引起相应瓶颈,会降低对数据写操作的效率。而select操作不写入binary log,所以不受任何影响。

3)对于innodb_flush_log_at_trx_commit与innodb_flush_method的不同组合(0|1|2,default|O_DSYNC)(对于O_DIRECT的情况特殊,已经在1)中单独做了总结在此不累述)分析得:

①(0, default)每秒钟调用fsync()同步一次innodb logfile,io压力小,性能高,但可能损失数据;

②(1, default)每秒钟和每次commit调用fsync()同步一次innodb logfile,保证数据完整的同时,加大了io压力,吞吐量相对低;

③(2, default)速度介于前两者之间,也不能完全保证数据的安全;

④(0,O_DSYNC)每秒同步日志及数据文件,吞吐量等情况应与(0, default)基本一致;

⑤(1,O_DSYNC)每秒钟和每次commit同步数据及日志文件,相应于(1, default)情况一致;

⑥(2,O_DSYNC)虽然innodb_flush_log_at_trx_commit设置为2,innodb被告知每次事务提交引起写入日志文件的动作,每秒钟完成一次flush磁盘操作,但由于O_DSYNC的设置使得os对日志自动做了同步工作,所以吞吐量等情况与(1, default)和(1,O_DSYNC)相一致。
分享到:
评论

相关推荐

    :innodb_flush_log_at_trx_commit 和 sync_binlog1

    MySQL 数据库中的 `innodb_flush_log_at_trx_commit` 和 `sync_binlog` 是两个非常重要的配置参数,它们直接影响到数据库的性能与数据安全性。理解并合理设置这两个参数对于优化数据库系统至关重要。 首先,`innodb...

    fupengfei058#blog#MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sy

    可以看到,只有1才能真正地保证事务的持久性,但是由于刷新操作 fsync() 是阻塞的,直到完成后才返回,我们知道写磁盘的速度是很慢的,因此 MySQL 的性能

    InnoDB_Log_Structures

    - `innodb_flush_log_at_trx_commit`:决定日志何时刷新到磁盘。 #### 5. 恢复和性能 InnoDB的重做日志对于数据库的恢复和性能至关重要。在数据库崩溃后,InnoDB可以重放日志来恢复未提交的事务和重做已提交的事务...

    my.cnf参数配置实现InnoDB引擎性能优化

    在网上看了无数的my....结果是只有innodb_flush_log_at_trx_commit可以提高性能,对于1,2,3参数无论是开其中某一个,还是三个同时调节都没有影响到测试性能。我想了下,可能是我的测试数据量还不够大造成的,后续有条

    可以改善mysql性能的InnoDB配置参数

    6. **innodb_flush_log_at_trx_commit**:此参数控制事务日志的持久化策略,影响事务的ACID特性。设置为1确保每次提交都同步到磁盘,牺牲速度以保证强一致性;设置为0或2则可能牺牲一些一致性以换取性能提升。 7. *...

    MySQL Innodb 参数详解与优化实践

    `innodb_flush_log_at_trx_commit` - **描述**:控制事务提交时是否同步写入日志文件,默认值为0。 - **应用场景**:设置为1可增强数据安全性,但可能会降低性能;设置为0则牺牲安全性换取更高性能。 ##### 9. `...

    数据库优化配置.doc

    [client] port=3306 [mysql] no-beep default-character-set=utf8 [mysqld] datadir=D:/Data port=3306 server-id=...log_file_size=1G innodb_log_buffer_size=8M innodb_flush_log_at_trx_commit=2 innodb_file_per_t

    事务已提交,数据却丢了,赶紧检查下这个配置!!!1

    对于那些要求高可用性和数据一致性的业务,通常会选择`innodb_flush_log_at_trx_commit=1`,而对性能要求较高、可以接受一定数据丢失的场景,则可能选择其他策略。 总之,MySQL的InnoDB存储引擎通过redo log来优化...

    MYSQL innodb性能优化学习总结

    - **innodb_flush_log_at_trx_commit**:控制日志写入磁盘的策略,对于实时业务交易,一般配置为2,既保证了事务的一致性又减少了性能损耗,而设置为0或2时在系统崩溃时可能会有数据丢失的风险。 - **innodb_read_...

    MySQL数据页功能性能测试innodb-page-size

    7. `innodb_log_files_in_group`、`innodb_flush_log_at_trx_commit`、`innodb_log_file_size` 和 `innodb_max_dirty_pages_pct` 与事务日志和脏页处理相关,确保事务安全性和性能平衡。 测试工具 Sysbench 被用来...

    mysql参数及其优化

    query_cache_size、query_cache_type、innodb_buffer_pool_size、innodb_log_file_size、innodb_log_buffer_size、innodb_flush_logs_at_trx_commit、transaction_isolation、innodb_file_per_table、innodb_open_...

    mysqlreport报告分析记录

    `innodb_flush_log_at_trx_commit` 是 InnoDB 存储引擎的一个重要参数,它直接影响着事务的日志处理策略和数据安全性。在 Windows 2003 操作系统上,配置了 8GB 内存和 4 核处理器的环境,通常需要对数据库性能进行...

    23.MySQL是怎么保证数据不丢的?1

    1. 当`innodb_flush_log_at_trx_commit=0`时,redo log仅保留在内存中,直到InnoDB后台线程定期刷新到磁盘,丢失数据的风险较高。 2. 当`innodb_flush_log_at_trx_commit=1`时,每次事务提交都会将redo log flush到...

    InnoDB性能优化参数详解.docx

    6. **innodb_flush_log_at_trx_commit**:这个参数决定事务日志何时被刷入磁盘。设置为1表示每次提交事务都会同步到磁盘,确保强一致性但可能影响性能;设置为0或2则牺牲一致性以提高性能,但可能导致数据丢失。 7....

    MySQL5.6基本优化配置

    - `innodb_flush_log_at_trx_commit` 设置为2,这意味着每次提交事务时,重做日志缓冲区会被写入日志文件,但不立即同步到磁盘,提供了一定的性能和数据安全平衡。 - `innodb_file_per_table` 开启,每个表的索引...

    XtraDB、InnoDB 内部结构示意图

    innodb_flush_log_at_trx_commit参数控制了InnoDB如何刷新事务日志。通常,InnoDB使用一个后台线程“log thread”在磁盘上通过fsync()命令来刷新日志。文章还提到了Redo日志文件组中文件的数量,通常是2到3个。 9. ...

    MySQL参数说明

    * innodb_flush_log_at_trx_commit:日志提交方式(关键参数) + 0 每秒写 1 次日志,将数据刷入磁盘,相当于每秒提交一次事务 + 1 每次提交事务写日志,同时将刷新相应磁盘,默认参数 + 2 每提交事务写一次日志...

    mysql-innodb

    lock_mode`控制自增列的锁定模式,`innodb_buffer_pool_size`设定缓冲池大小,以及`innodb_flush_log_at_trx_commit`决定事务日志何时写入磁盘等。这些变量可以根据系统需求进行优化。 7. **其他特性**: InnoDB还...

    MySQL零拷贝技术详解.pdf

    MySQL 提供了几个参数来控制 Page Cache 数据落盘的具体行为,例如 innodb_flush_log_at_trx_commit 参数用于控制基于 Page Cache 的 Redo Log Buffer 的数据落盘机制。 innodb_flush_log_at_trx_commit 参数有三个...

    MYSQL-innodb性能优化学习总结.pdf

    6. **innodb_flush_log_at_trx_commit**:决定事务日志何时写入磁盘。值为2时,保证ACID特性,但牺牲性能;值为0或1时,性能较高,但可能丢失部分事务数据。 7. **innodb_read_io_threads** 和 **innodb_write_io_...

Global site tag (gtag.js) - Google Analytics