zoukankan      html  css  js  c++  java
  • MySQL核心之双一原则

    所谓的双一就是指:

    sync_binlog=1;
    
    innodb_flush_log_at_trx_commit=1

    innodb_flush_log_at_trx_commit和sync_binlog这两个参数是控制MySQL磁盘写入策略以及数据安全性的关键参数。

    innodb_flush_log_at_trx_commit表示log buffer写入log file以及刷新到磁盘的过程,

    sync_binlog表示事务写入binary log并使用fdatasync()函数同步到磁盘的过程。

    1、对于innodb_flush_log_at_trx_commit来说

    取值为0:log buffer每秒写入日志文件log file并刷新flush到磁盘。这种情况下,MySQL的日志刷写操作和事务提交操作没有关系。因此MySQL的性能是最好的时刻。不过不安全

    取值为1:每次事务提交时,log buffer会被写入到日志文件并且还要刷写到磁盘上。由于每次事务都要提交到I/O设备,因此会慢一点,不过是最安全的。

    取值为2:0和1的中间效果,即每次的事务提交会写入log buffer,而刷写到磁盘则是一秒进行一次。性能属于一般。

    2、对于sync_binlog来说:

    取值为0:MySQL自己不主动同步,依赖操作系统本身不定期把文件内容刷新到磁盘。性能最佳

    取值为1:每次事务提交后将binlog_cache中的数据强制写入磁盘bin log日志中,是最慢的,但是最安全

    取值 >1:当进行n次事务提交后,MySQL将binlog_cache中的数据强制写入磁盘中。

    当两个参数都设为1,这适用于那些数据安全要求比较高的场合,同时要求磁盘等也比较好才行。

    对于重做日志redo log和二进制bin log的区别是什么,我们有必要说一下:

    1)二进制日志会记录所有与mysql有关的日志记录,包括InnoDB等其他存储引擎的日志,而InnoDB存储引擎的重做日志只记录有关其本身的事务日志,
    
    2)记录的内容不容,不管你将二进制日志文件记录的格式设为哪一种,其记录的都是关于一个事务的具体操作内容,而InnoDB存储引擎的重做日志文件记录的关于每个页的更改的物理情况;
    
    3)写入的时间也不同,二进制日志文件是在事务提交前进行记录的,而在事务进行的过程中,不断有重做日志条目被写入重做日志文件中。

    转载于:https://www.cnblogs.com/FengGeBlog/p/10246238.html

  • 相关阅读:
    codeforces 814B An express train to reveries
    codeforces 814A An abandoned sentiment from past
    codeforces 785D D. Anton and School
    codeforces 785C Anton and Fairy Tale
    codeforces 791C Bear and Different Names
    AOP详解
    Spring集成JUnit测试
    Spring整合web开发
    IOC装配Bean(注解方式)
    IOC装配Bean(XML方式)
  • 原文地址:https://www.cnblogs.com/twodog/p/12135524.html
Copyright © 2011-2022 走看看