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参数对性能的影响的更多相关文章

  1. 05:Sysbench压测-innodb_deadlock_detect参数对性能的影响

    目录 sysbench压测-innodb_deadlock_detect参数对性能的影响 一.OLTP测试前准备 二.进行OLTP测试 三.测试结果解读: 四.关于测试后的结论: 五.关于测试后的性能 ...

  2. sysbench对MySQL的压测,使用sysbench压测磁盘io

    QPS - query per secondTPS - transaction per second 不是特别关注,每个业务场景中事务标准是不一样的 Ⅰ.sysbench测试框架 Ⅱ.常用测试脚本 [ ...

  3. sysbench压测过程

    1.sysbench安装(sysbench1.1.0)  [root@master soft]# ls sysbench1.1.0.zip sysbench1.1.0.zip 解压: [root@ma ...

  4. 用sysbench压测MySQL,通过orzdba监控MySQL

    1.1 安装sysbench wget https://codeload.github.com/akopytov/sysbench/zip/0.5 unzip 0.5 cd sysbench-0.5/ ...

  5. 【MySQL】sysbench压测服务器及结果解读

    主要压测范围包括CPU测试.磁盘IO测试.线程测试.OLTP测试等,那么sysbench就可以满足我们的压测需求.下面我们简单来看下sysbench的安装使用以及压测结果的解读. 一.sysbench ...

  6. sysbench压测自装MySQL数据库

    压测准备 测试机器 2vCPUs | 4GB | s6.large.2 CentOS 7.6 64bit 建立测试库 create database test_db character set utf ...

  7. sysbench 压测

    IP架构 sysbench部署服务器:172.17.100.107 压测服务器:172.17.100.100 MySQL部署目录:/usr/local/mysql 前置工作 1.完成MySQL的安装( ...

  8. 使用sysbench压测磁盘io

    Ⅰ.sysbench安装 cd /usr/local/src yum -y install make automake libtool pkgconfig libaio-devel git clone ...

  9. 技术分享|sysbench 压测工具用法浅析

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 介绍 新业务上线的时候通常需要对数据库性能进行压力测试,以确认是否满足需要,今天简单介绍下sysbench的用法: 1.s ...

随机推荐

  1. MoreEffectiveC++Item35(基础议题)(条款1-4)

    条款1:区别指针和引用 条款2:最好使用C++转换操作符 条款3: 绝对不要以多态的方式处理数组 条款4: 避免无用的缺省构造函数 条款1:区别指针和引用 1.指针(pointer) 使用[*/-&g ...

  2. Java -- 使用阻塞队列(BlockingQueue)控制线程通信

    BlockingQueeu接口是Queue的子接口,但是它的主要作用并不是作为容器,而是作为线程同步的工具. 特征: 当生产者线程试图向BlockingQueue中放入元素时,如果该队列已满,则该线程 ...

  3. 利用sklearn的LabelEncoder对标签进行数字化编码

    from sklearn.preprocessing import LabelEncoder def gen_label_encoder(): labels = ['BB', 'CC'] le = L ...

  4. 在tableView中设置cell的图片和文字

    // 设置UITableViewCellEditingStyle的 accessoryType UITableViewCellAccessoryNone,                   // d ...

  5. 【剑指offer】10矩阵覆盖

    原创博文,转载请注明出处! 0.简介 # 本文是牛客网<剑指offer>刷题笔记,笔记索引链接 1.题目 # 用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地 ...

  6. 利用索引与不用索引区别(profiles)

    1.定义 对数据库表的一列或多列的值进行排序的一种结构(Btree方式)=(相当于二分查找法) 2.优点 加快数据检索速度 3.缺点 1.占用物理存储空间 2.当对表中数据更新时,索引需要动态维护,降 ...

  7. daemon Thread

    1.概念 守护进程(daemon)是指在UNIX或其他多任务操作系统中在后台执行的电脑程序,并不会接受电脑用户的直接操控.此类程序会被以进程的形式初始化.守护进程程序的名称通常以字母“d”结尾:例如, ...

  8. WebStorm的下载与安装

    百度搜索: 链接:http://www.jetbrains.com/webstorm/ 链接:http://www.jetbrains.com/student/ 学生免费授权计划 请从正规来源下载软件 ...

  9. CMDB

    一.CMDB CMDB --Configuration Management Database 配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧 ...

  10. np.random 的使用

    random 有很多地方会用到. 参考这篇: http://www.cnblogs.com/CheeseZH/p/4593349.html