• 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)写入的时间也不同,二进制日志文件是在事务提交前进行记录的,而在事务进行的过程中,不断有重做日志条目被写入重做日志文件中。
  • 相关阅读:
    第四节课-反向传播&&神经网络1
    第三节课-损失函数和优化
    Logistic回归python实现
    第二节课-Data-driven approach:KNN和线性分类器分类图片
    在Java项目中部署使用Memcached[转]
    Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
    Django object filter查询[转]
    Linux查看文件编码格式及文件编码转换<转>
    Django 模板标签[转]
    linux下java unrecognized class file version错误的解决
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10246238.html
Copyright © 2020-2023  润新知