当前位置: 首页 > news >正文

sync_binlog innodb_flush_log_at_trx_commit 浅析

一 参数意义
innodb_flush_log_at_trx_commit

如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去.
如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

 
注意:
  由于进程调度策略问题,这个“每秒执行一次 flush(刷到磁盘)操作”并不是保证100%的“每秒”。
  
sync_binlog
sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
注:
   如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。
   根据上述描述,我做了一张图,可以方便大家查看。
  
二 性能
    两个参数在不同值时对db的纯写入的影响表现如下:
    
 测试场景1 
  innodb_flush_log_at_trx_commit=2 
  sync_binlog=1000
 测试场景2 
  innodb_flush_log_at_trx_commit=1 
  sync_binlog=1000
 测试场景3 
  innodb_flush_log_at_trx_commit=1 
  sync_binlog=1
 测试场景4
  innodb_flush_log_at_trx_commit=1
  sync_binlog=1000
 测试场景5 
  innodb_flush_log_at_trx_commit=2 
  sync_binlog=1000 
 
场景TPS
场景141000
场景233000
场景326000
场景433000
由此可见,当两个参数设置为双1的时候,写入性能最差,sync_binlog=N (N>1 ) innodb_flush_log_at_trx_commit=2 时,(在当前模式下)MySQL的写操作才能达到最高性能。

三 安全
当innodb_flush_log_at_trx_commit和sync_binlog  都为 1 时是最安全的,在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。但是鱼与熊掌不可兼得,双11 会导致频繁的io操作,因此该模式也是最慢的一种方式。
当innodb_flush_log_at_trx_commit设置为0,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
当innodb_flush_log_at_trx_commit设置为2,只有在操作系统崩溃或者系统掉电的情况下,上一秒钟所有事务数据才可能丢失。
 
双1适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如订单,交易,充值,支付消费系统。双1模式下,当磁盘IO无法满足业务需求时 比如11.11 活动的压力。推荐的做法是 innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N为500 或1000) 且使用带蓄电池后备电源的缓存cache,防止系统断电异常。
 
 
四 小结
    系统性能和数据安全是业务系统高可用稳定的必要因素。我们对系统的优化需要寻找一个平衡点,合适的才是最好的,根据不同的业务场景需求,可以将两个参数做组合调整,以便是db系统的性能达到最优化。
 
参考文章
http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
http://dev.mysql.com/doc/refman/5.1/en/replication-options-binary-log.html#sysvar_sync_binlog

转载于:https://www.cnblogs.com/conanwang/p/5986018.html

相关文章:

  • 昂靠的由来[本博作者爆料]
  • js 中 空值赋值运算符 的用法
  • node学习系列之简单文件上传
  • 前端 关于汇率的计算
  • mongoDB 文档查询
  • 安装了python报错 或者执行 npm install 时报node-sass的各种相关错误 解决办法
  • 今天打开一个网站 FSO对象实例创建失败
  • 【LeetCode】5. Longest Palindromic Substring 最大回文子串
  • vu2响应式原理 代码分析
  • 希尔排序
  • vu3响应式原理 代码分析
  • Java Tomcat SSL 服务端/客户端双向认证(一)
  • vue3中 setup注意点
  • redis简介
  • 《Spark GraphX in Action》书评及作者访谈
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 「译」Node.js Streams 基础
  • angular学习第一篇-----环境搭建
  • Babel配置的不完全指南
  • Logstash 参考指南(目录)
  • PHP CLI应用的调试原理
  • React Transition Group -- Transition 组件
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 安卓应用性能调试和优化经验分享
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 入门级的git使用指北
  • 我与Jetbrains的这些年
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • ${factoryList }后面有空格不影响
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (9)STL算法之逆转旋转
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • .NET Core Web APi类库如何内嵌运行?
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 的字符串暂存池
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET文档生成工具ADB使用图文教程
  • @Repository 注解
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [CISCN2019 华东南赛区]Web11
  • [codeforces]Recover the String
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍
  • [Django开源学习 1]django-vue-admin
  • [Docker]十.Docker Swarm讲解
  • [HTML]HTML5实现可编辑表格
  • [HUBUCTF 2022 新生赛]
  • [json]定义、读写