为什么别人能用好 MySQL?万字详解其复杂原理( 八 )

  • Repeatable Read:可重复读 。它基于的是事务开始时的读视图,直到事务结束 。不读取其他新的事务对该记录的修改,保证同一个事务内的可重复读取 。InnoDB提供了 next-key lock来解决幻读问题,不过在一些特殊场景下,可重复读还是可能出现幻读的情况 。在实际开发中影响不大,就不赘述了 。
  •  5、InnoDB 和 ACID 模型事务有 ACID 四个属性,InnoDB 是支持事务的,它实现 ACID 的机制如下:
    Atomicityinnodb的原子性主要是通过提供的事务机制实现,与原子性相关的特性有:
    Autocommit 设置 。
    COMMIT 和 ROLLBACK 语句(通过 Undo Log实现) 。
    Consistencyinnodb的一致性主要是指保护数据不受系统崩溃影响,相关特性包括:
    InnoDB 的双写缓冲区(doublewrite buffer) 。
    InnoDB 的故障恢复机制(crash recovery) 。
    Isolation
    innodb的隔离性也是主要通过事务机制实现,特别是为事务提供的多种隔离级别,相关特性包括:
    • Autocommit设置 。
    • SET ISOLATION LEVEL 语句 。
    • InnoDB 锁机制 。
    Durabilityinnodb的持久性相关特性:
    • Redo log 。
    • 双写缓冲功能 。可以通过配置项 innodb_doublewrite 开启或者关闭 。
    • 配置 innodb_flush_log_at_trx_commit 。用于配置innodb如何写入和刷新 redo 日志缓存到磁盘 。默认为1,表示每次事务提交都会将日志缓存写入并刷到磁盘 。innodb_flush_log_at_timeout 可以配置刷新日志缓存到磁盘的频率,默认是1秒 。
    • 配置 sync_binlog 。用于设置同步 binlog 到磁盘的频率,为0表示禁止MySQL同步binlog到磁盘,binlog刷到磁盘的频率由操作系统决定,性能最好但是最不安全 。为1表示每次事务提交前同步到磁盘,性能最差但是最安全 。MySQL文档推荐是 sync_binlog 和 innodb_flush_log_at_trx_commit 都设置为 1 。
    • 操作系统的 fsync 系统调用 。
    • UPS设备和备份策略等 。

    【为什么别人能用好 MySQL?万字详解其复杂原理】


    推荐阅读