innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数。本文从参数含义,性能,安全角度阐述两个参数为不同的值时对db 性能,数据的影响.
 
一 参数意义
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
场景1 41000
场景2 33000
场景3 26000
场景4 33000
由此可见,当两个参数设置为双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系统的性能达到最优化。
posted @ 2015-08-03 15:32 奔跑的小蜗牛 阅读(262) 评论(0) 推荐(0)
摘要: 今天用C++Builder6.0 调用三方lib文件时,编译的时候出现如下错误:“contains invalid OMF record, type 0x21 (possibly COFF)”才知道这个lib文件是别人用VC做的,要在C++Builder下面使用的,必须转换成CB格式的这才想起调用C... 阅读全文
posted @ 2015-05-05 16:03 奔跑的小蜗牛 阅读(1293) 评论(0) 推荐(0)
摘要: 随着处理器的多核化,为提高处理器的资源利用率应用程序的并发变应运而生了.现在的操作系统是多任务操作系统,多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的内存空间,一个进程可以启动多个线程。比如java.exe是一个进程,而java.exe中可以运行多个线程。进程... 阅读全文
posted @ 2014-06-22 23:19 奔跑的小蜗牛 阅读(282) 评论(0) 推荐(0)
摘要: 直入主题吧!开发中往往需要将代码转换成中文显示在表格中。如下图下面就直接贴代码了.C#代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using Syste 阅读全文
posted @ 2014-04-04 17:37 奔跑的小蜗牛 阅读(1696) 评论(0) 推荐(0)
摘要: 装好VC++ 6.0后,点打开文件时编译器会自动关闭掉,然后在网上找到各位大神写的资料,果然是因为之前有安装vs2010冲突的缘故,然后http://download.csdn.net/source/2373172下载了此dll,然后打开VC++6.0,选择菜单Tools,选择Customize,选择Add-ins and Macro Files,点击Browse,把下载回来的filetools.dll文件加载进去,点击Close,完后,可以看到有个小图标在桌面,拖动小图标放到工具栏上,有两个字母里,一个是A,一个是O,O是OPEN,也就是打开。 阅读全文
posted @ 2014-03-03 15:25 奔跑的小蜗牛 阅读(620) 评论(0) 推荐(0)
摘要: 本人不才啊,折腾2个多小时才把数据绑定好。现在把折腾过程记录一下来以帮助更多的朋友,自己也温习一下。直接上代码了哈。。。。WPF哈xaml文件 ... 阅读全文
posted @ 2014-01-17 17:07 奔跑的小蜗牛 阅读(3941) 评论(1) 推荐(0)
摘要: 最近在学习WebService开始了:一:服务端的编写与发布1. 工具准备: java的开发环境(这里就不多说了)。 axis2官网上下载最新的就可以了(我这里用的是axis2-1.4.1-war)把文件解压,然后把axis2.war文件放到apache-tomcat-7.0.26\webapps目录下。并启动 tomcat,启动完成后可以在webapps目录中看到axis2这个目录;并在浏览器中输入:http://localhost:8080/axis2/ 地址后显示如下页面说明成功了 axis2-1.6.2-bin.zip(解压)。写客户端要用。... 阅读全文
posted @ 2014-01-13 15:29 奔跑的小蜗牛 阅读(1164) 评论(0) 推荐(0)
摘要: 采用的工具VS2010生成工程1. 生成webservice工程:建 ASP.NET 空WEB 应用程序。2. 在建好的ASP.NET 空WEB应用程序中新建项“web 服务”。完成上述内容工程结构如下图下面主要的操作就是在webservice1.asmx.cs文件中进行,里面写了几个服务,两个简单服务两个查询数据库服务;using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;using System.Data.SqlClient;usi 阅读全文
posted @ 2013-12-17 22:50 奔跑的小蜗牛 阅读(44932) 评论(11) 推荐(13)
摘要: 1 /*socket->bind->listen->accept->recv/recvfrom->send/sendto->close 2 3 客户端:socket->connect->send/sendto->recv/recvfrom->close 4 5 其中服务器端首先建立起socket,然后调用本地端口的绑定,接着就开始与客服端建立联系,并接收客户端发送的消息。 6 客户端则在建立socket之后调用connect函数来建立连接。 7 8 服务器端的源代码如下所示:*/ 9 10 /*"server.c" 阅读全文
posted @ 2013-10-31 17:22 奔跑的小蜗牛 阅读(734) 评论(0) 推荐(0)
摘要: 首先是解决图片无缝连接问题、然后由于要显示整行但图片的宽度又与各个电脑屏幕宽度不一致而显示不全问题,第一个td和第三个td的宽度都是不能变的,那么只有第二个图片的宽度要随页面的宽度变化而变化了;第二张图片的宽度只有1px; 阅读全文
posted @ 2013-10-08 10:46 奔跑的小蜗牛 阅读(4741) 评论(0) 推荐(0)
点击右上角即可分享
微信分享提示