04:Sysbench压测-innodb_flush_log_at_trx_commit,sync_binlog参数对性能的影响
sysbench压测-innodb_flush_log_at_trx_commit,sync_binlog参数对性能的影响
一、OLTP测试前准备
基本信息:
- 主机信息
| CPU | 内存 | 硬盘 | 系统版本 | MySQL版本 | sysbench版本 |
|---|---|---|---|---|---|
| Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz *2 | 2G | 虚拟机硬盘 | CentOS release 6.9 (Final) | 5.7.18 | 1.1.0-76 |
- sysbench 目录(/software/sysbench)
二、MySQL 数据落盘的过程
- 确认数据从InnoDB的内存到真正写到存储设备的介质上到底有哪些缓冲在起作用

从上图中,我们可以看到,数据InnoDB到磁盘需要经过
1.InnoDB buffer pool,Redo log buffer。这个是InnoDB应用系统本身的缓冲。
2.page cache /Buffer cache(可通过o_direct绕过)。这个是vfs层的缓冲。
3.Inode cache/directory buffer。这个也是vfs层的缓冲。需要通过O_SYNC或者fsync()来刷新。
4.Write-Back buffer。(可设置存储控制器参数绕过)
5.Disk on-borad buffer。(可通过设置磁盘控制器参数绕过)
这里我们使用术语“缓冲”(一般为buffer)来表示对数据写的暂存,使用术语“缓存”(一般为cache)来表示对数据读的暂存。顾名思义,由于底层存储设备和内存之间速率的差异,缓冲是用来暂“缓”对底层存储设备IO的“冲”击。缓存主要是在内存中暂“存”从磁盘读到的数据,以便接下来对这些数据的访问不用再次访问慢速的底层存储设备。
三、参数说明
innodb_flush_log_at_trx_commit
innodb_flush_log_at_trx_commit目前支持3种不同的参数值0,1,2
innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.在事务提交时不执行从日志缓冲区到日志文件的写入.该模式下,由于进程调度策略问题,这个“每秒执行一次flush(刷到磁盘)操作”并不是保证100%的“每秒”.
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.
innoDB日志刷新频率由控制 innodb_flush_log_at_timeout,它允许用户设置记录flush频率为N秒(其中 N是1 ... 2700,为1的默认值)。但是,任何mysqld进程崩溃都可以丢失多达N几秒的事务。
安全问题
当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,只有在操作系统崩溃或者系统掉电的情况下,上一秒钟所有事务数据才可能丢失。

- sync_binlog
- sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
- 当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
- 注意:
- 如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。
- innodb_flush_method
目前支持4种不同的参数值:
fdatasync 、O_DSYNC 、O_DIRECT 、O_DIRECT_NO_FSYNC
日志刷新对应表

- innodb_flush_method数据文件和日志刷新对应表

四、Test性能
场景说明

所有场景图



- note:sync_binlog=1时,QPS和TPS性能明显比其他的弱5%-10%
innodb_flush_log_at_trx_commit={0,1,2} ;sync_binlog=0 场景图



- note: innodb_flush_log_at_trx_commit=1时;性能最差
innodb_flush_log_at_trx_commit={0,1,2} ;sync_binlog=1 场景图



- note:innodb_flush_log_at_trx_commit=1;sync_binlog=1 性能最差
innodb_flush_log_at_trx_commit=2 ;sync_binlog={0,1,2} 场景图



- note:innodb_flush_log_at_trx_commit=2;sync_binlog={0,1,100} 这个需要根据业务来进行压测。
五、总结
- 对数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如订单,交易,充值,支付消费系统。配置双1模式
- 当对数据安全性要求低和并发要求也不高时,可以配置innodb_flush_log_at_trx_commit=2,sync_binlog=0,让系统开决定刷新频率
- 当磁盘IO无法满足业务需求时,推荐的做法是 innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N为500 或1000) 且使用带蓄电池后备电源的缓存cache,防止系统断电异常。
04:Sysbench压测-innodb_flush_log_at_trx_commit,sync_binlog参数对性能的影响的更多相关文章
- 05:Sysbench压测-innodb_deadlock_detect参数对性能的影响
目录 sysbench压测-innodb_deadlock_detect参数对性能的影响 一.OLTP测试前准备 二.进行OLTP测试 三.测试结果解读: 四.关于测试后的结论: 五.关于测试后的性能 ...
- sysbench对MySQL的压测,使用sysbench压测磁盘io
QPS - query per secondTPS - transaction per second 不是特别关注,每个业务场景中事务标准是不一样的 Ⅰ.sysbench测试框架 Ⅱ.常用测试脚本 [ ...
- sysbench压测过程
1.sysbench安装(sysbench1.1.0) [root@master soft]# ls sysbench1.1.0.zip sysbench1.1.0.zip 解压: [root@ma ...
- 用sysbench压测MySQL,通过orzdba监控MySQL
1.1 安装sysbench wget https://codeload.github.com/akopytov/sysbench/zip/0.5 unzip 0.5 cd sysbench-0.5/ ...
- 【MySQL】sysbench压测服务器及结果解读
主要压测范围包括CPU测试.磁盘IO测试.线程测试.OLTP测试等,那么sysbench就可以满足我们的压测需求.下面我们简单来看下sysbench的安装使用以及压测结果的解读. 一.sysbench ...
- sysbench压测自装MySQL数据库
压测准备 测试机器 2vCPUs | 4GB | s6.large.2 CentOS 7.6 64bit 建立测试库 create database test_db character set utf ...
- sysbench 压测
IP架构 sysbench部署服务器:172.17.100.107 压测服务器:172.17.100.100 MySQL部署目录:/usr/local/mysql 前置工作 1.完成MySQL的安装( ...
- 使用sysbench压测磁盘io
Ⅰ.sysbench安装 cd /usr/local/src yum -y install make automake libtool pkgconfig libaio-devel git clone ...
- 技术分享|sysbench 压测工具用法浅析
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 介绍 新业务上线的时候通常需要对数据库性能进行压力测试,以确认是否满足需要,今天简单介绍下sysbench的用法: 1.s ...
随机推荐
- vue.js 源代码学习笔记 ----- 工具方法 debug
import config from '../config' import { noop } from 'shared/util' let warn = noop let tip = noop let ...
- Linux:col命令详解
col 经常用于将说明文件转存为纯文本以方便阅读 语法 col(选项) 选项 -b:过滤掉所有的控制字符,包括RLF和HRLF: -f:滤掉RLF字符,但允许将HRLF字符呈现出来: -x:以多个空格 ...
- tomcat的localhost-config is missing 错误的解决方法
运行项目时报错,错误信息为: The tomcat server configuration at /sever/tomcat v7.0 localhost-config is missing 解决方 ...
- Synchronized之一:基本使用
目录: <Java并发编程之三:volatile关键字解析 转载> <Synchronized之一:基本使用> Synchronized作用 1.Synchronized可以保 ...
- HDU 1806
http://acm.hdu.edu.cn/showproblem.php?pid=1806 非常玄妙的rmq问题,这个st算法有点神 #include <iostream> #inclu ...
- 人生苦短之我用Python篇(XML模块)
XML模块 http://baike.baidu.com/link?url=-mBgvMdEDU7F05Pw7h_hBt7A0ctYiPm5a_WvKVLknydnRXKRIyydcVZWRjd_5H ...
- arduino 编程基础
0. setup() 与 loop() 函数 void setup(): // put your setup code here, to run once: 仅执行一次: void loop(): / ...
- BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换
BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换 http://www.cnphp6.com/archives/24822 by root ⋅ Leave a ...
- WebStorm的下载与安装
百度搜索: 链接:http://www.jetbrains.com/webstorm/ 链接:http://www.jetbrains.com/student/ 学生免费授权计划 请从正规来源下载软件 ...
- 重温CLR(十三) 定制特性
利用定制特性,可宣告式为自己的代码构造添加注解来实现特殊功能.定制特性允许为几乎每一个元数据表记录项定义和应用信息.这种可扩展的元数据信息能在运行时查询,从而动态改变代码的执行方式.使用各种.NET技 ...