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 ...
随机推荐
- 判断Git是否有新的提交
公司要搭建CI,有这样一个需求:判断Git是否有新的提交,如果有的话拉取代码构建,如果没有不构建,Jenkins的搭建这里就不赘述了,主要讲一下判断这里. Jenkins需要安装插件Condition ...
- Linux:tr命令详解
tr tr命令可以对来自标准输入的字符进行替换.压缩和删除 语法 tr(选项)(SET1 SET2) 选项 -c或——complerment:取代所有不属于第一字符集的字符: -d或——delete: ...
- three.js入门系列之光源
首先创建场景来试验各种光源带来的不同效果: 一.锥形光源(聚光灯) SpotLight 接下来缩小范围(π/7): 二.基础光源(环境光) AmbientLight 上例中没有添加环境光,使得周围黑漆 ...
- 【跟着stackoverflow学Pandas】Renaming columns in pandas-列的重命名
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 解决tensorflow的Session Exception问题
Exception ignored in: <bound method BaseSession.__del__ of <tensorflow.python.client.session.S ...
- 利用层序遍历(含空节点)和中序遍历重建二叉树 python
给定一颗二叉树的层序遍历(不含None的形式)和中序遍历序列,利用两个序列完成对二叉树的重建. 还是通过一个例子来说明整个过程,下图所示的二叉树,层序遍历结果为[a,b,c,d,e],中序遍历结果为[ ...
- kd树 求k近邻 python 代码
之前两篇随笔介绍了kd树的原理,并用python实现了kd树的构建和搜索,具体可以参考 kd树的原理 python kd树 搜索 代码 kd树常与knn算法联系在一起,knn算法通常要搜索k近邻, ...
- python基础(二)----数据类型
Python基础第二章 二进制 字符编码 基本数据类型-数字 基本数据类型-字符串 基本数据类型-列表 基本数据类型-元组 可变.不可变数据类型和hash 基本数据类型-字典 基本数据类型-集合 二进 ...
- windows命令行工具
winver 检查Windows版本 wmimgmt.msc 打开Windows管理体系结构(wmi) wupdmgr Windows更新程序 wscript Windows脚本宿主设置 write ...
- 深入理解java虚拟机-第13章-线程安全与锁优化
第十三章 线程安全与锁优化 线程安全 java语言中的线程安全 1 不可变.Immutable 的对象一定是线程安全的 2 绝对线程安全 一个类要达到不管运行时环境如何,调用者都不需要额外的同步措施, ...