美文网首页
二、MySql 基准测试

二、MySql 基准测试

作者: 这个程序猿不太冷 | 来源:发表于2020-07-13 22:40 被阅读0次

目录
[toc]

概述

基准测试,是针对系统设计的一种压力测试。通常的目标是为了掌握系统的行为。是mysql新手和专家都需要掌握的一项基本技能。为什么需要基准测试。因为基准测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。基准测试可以观察系统在不同压力下的行为,评估系统的容量,掌握哪些是重要的变化,或者观察系统如何处理不同的数据。

2.1基准测试的两种策略

  1. 针对整个系统的整体测试
  • mysql并非总是应用的瓶颈,通过整体的测试可以揭示这一点
  • 只有对应用做整体的测试,才能发现各部分之间缓存带来的影响
  • 整体应用的集成式测试更能揭示应用的真实表现,而单独组件测试无法做到这一点
  1. 单独测试Mysql
  • 需要比较不同的schema或查询的性能
  • 针对应用中的某个问题进行测试
  • 避免漫长的基准测试过程

2.2基准测试相关指标

  • 吞吐量(TPS)
    指的是单位时间内事务处理数。
  • 响应时间或者延迟
    这个指标用于测试任务所需的整体时间。根据具体的应用,测试的时间单位可能是微秒、毫秒、秒或者分钟。根据不同的时间单位可以计算出平均响应时间、最小响应时间、最大响应时间和所占百分比。最大响应时间通常意义不大,因为测试时间越长,最大响应时间也可能变长。因此通常可以通过百分比响应时间来替代最大响应时间。例如:如果95%以上的响应时间是5毫秒,则表示人物在95%的时间段内完成。
  • 并发性
    并发性基准测试需要关注的是正在工作中的并发操作,或者是同时工作中的线程数或者连接。当并发性增加是,需要测量吞吐量是否下降,响应时间是否变长,如果是这样,应用可能就无法处理峰值压力。并发性测试通常不是为了测试应用能达到的并发度,而是为了测试应用在不同并发下的性能。
  • 可扩展性
    在系统的业务压力可能发生变化的情况下,测试可扩展性就非常必要了。可扩展性指的是,给系统增加一倍的工作,在理想情况下就能获得两倍的结果(吞吐量增加一倍)。当然,同时性能(响应时间)也必须在可以接受的范围内。大多数系统是无法达到如此理想的线性扩展的。随着压力的变化,吞吐量和性能都可能越来越差。

2.3基准测试方法

基准测试的第一步是提出问题并明确目标。然后决定是采用标准的基准测试,还是设计专用的测试。设计专用的基准测试很复杂,需要有一个迭代的过程。首先,需要获得生产数据集的快照,并且该快照是很容易还原的,以便后续进行测试。然后,针对数据运行查询。可以建立一个单元测试集作为初步的测试,并运行多遍。更好的办法是选择一个有代表性的时间段,比如高峰期的一个小时,或者一整天,记录生产上的所有查询。如果时间段比较小,可以选择多个时间段,这样有助于覆盖整个系统的活动状态。
基准测试的时间应该运行足够长,这一点很重要。有时候无法确认测试需要运行多长时间才足够,可以让测试一致运行,持续观察直到确认系统以及稳定。

2.4 基准测试工具

2.4.1 集成式测试工具

  • http_load
    Web服务器测试工具,可以通过一个输入文件提供多个URL,在这些URL中随机进行选择进行测试。也可以定制http_load,使其按照时间比率进行测试,而不是仅仅测试最大请求处理能力。
  • JMeter
    JMeter是一个Java应用程序,它被设计成用来测试web应用,但也可以用于测试其他诸如FTP服务器,或者通过jdbc进行数据库查询测试。

2.4.2 单组件测试工具

基于Mysql的性能测试工具

  • sysbench
    sysbench是一款多线程系统压测工具。它可以根据影响数据库性能的各种因素来评估系统的性能。例如可以用来测试文件I/O,操作系统调度器,内存分配和传输速度,以及数据库服务器等。支持lua脚本,lua对于各种测试场景的设置非常灵活。

sysbensh是一个非常通用的benchmark工具,

  • 其提供多种方面的测试:
  1. cpu :提供一个简单的cpu benchmark测试
  2. fileio:文件磁盘io的benchmark测试
  3. memory:内存访问 benchmark测试
  4. thread:线程调度 benchmark测试mutex:POSIX的锁 benchmark测试
  5. OLTP:数据库 benchmark测试,支持MySQL,Pgsql
  • sysbench安装
    sysbench的安装非常简单,其支持各类操作系统。安装的主要过程见github因为我这里使用的是ubuntu系统,所以直接使用:curl -s
https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench

进行安装。

  • sysbench使用
    为了更加熟悉使用sysbench,我们需要熟悉一些通用的 options参数
--threads=N  线程数目,默认使用1、
--events=N   默认为0
--time=N     默认为0
--forced-shutdown=STRING  默认为‘off’,另一个选项为‘on’
--thread-stack-size=SIZE  默认为64K
--rate=N     平均transactions率,默认为0,不限制
--report-interval=N  周期性(periodically)汇报统计信息,单位seconds,默认为0,表示disable interval report
--debug[=on|off]  print debug 信息,默认为off

还有一些其他的参数,因为很少使用所有就不介绍了。
语法表达式sysbench [options]... [testname] [command]

其中testname,可以是fileio,memory等,或者是一个lua script或者是lua script的path。command表示prepare,run,cleanup或者help具体详细的每一个options参数的含义,参考github。bench file/iofileio 有一些独有的参数,可以直接使用sysbench fileio help查看。
主要使用的参数为--file-num=N 默认为128--file-block-size=N 默认为16384bytes
--file-total-size=SIZE 默认为2G
--file-test-mode=STRING test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}--file-io-mode=STRING file operations mode {sync,async,mmap} [sync]
等参数

在设置file-total-size的时候应该比内存的大小大,来确保内存的cache不会影响workload太多。
这里主要说明一下file-test-mode中几个参数的含义:
seqwr:顺序写
seqrewr:顺序重写
seqrd:顺序读
rndrd:随机读
rndwr:随机写
rndrw:混合随机读、写
bench cpu
cpu 参数比较简单,只有一个就是:--cpu-max-prime=N upper limit for primes generator [10000]

表示需要计算的prime的数量;还有一些参数就是general options,比如线程数等。
bench memory
memory的访问参数:

  --memory-block-size=SIZE    size of memory block for test [1K]
  --memory-total-size=SIZE    total size of data to transfer [100G]
  --memory-scope=STRING       memory access scope {global,local} [global]
  --memory-hugetlb[=on|off]   allocate memory from HugeTLB pool [off]
  --memory-oper=STRING        type of memory operations {read, write, none} [write]
  --memory-access-mode=STRING memory access mode {seq,rnd} [seq]

bench threads参数有:

  --thread-yields=N number of yields to do per request [1000]
  --thread-locks=N  number of locks per thread [8]

bench mutex参数有:

  --mutex-num=N   total size of mutex array [4096]
  --mutex-locks=N number of mutex locks to do per thread [50000]
  --mutex-loops=N number of empty loops to do outside mutex lock [10000]

Sysbench-OLTP数据库测试
使用sysbench进行oltp测试之前,需要核对一下sysbench的版本,因为不同版本在使用的参数时,会有一定的差异。mysql dba这本书中的sysbench使用的是0.5的版本,ubuntu中默认apt-get安装的是0.4.12版本,在执行数据准备时,参数不同,会报错->不知道的选项,不知道的参数,文件路径找不到所以,建议在测试之前,确认一下版本的一致性,或者使用提供的help命令,确认提供的参数。 此次测试环境以及工具版本为:CentOS Linux release 7.3.1611 (Core) sysbench 0.5 mysql Ver 14.14 Distrib 5.6.37, for Linux (x86_64) using EditLine wrapper在oltp测试中,
基本分为三个阶段:
1、初始化数据    需要在数据库中提前创建好sbtest数据库,若不创建,也可使用参数指定对应的数据库,进行数据插入准备   根据自己电脑的实际情况拼写参数,如,mysql-user和mysql-password分别对应的是数据库的登录名和密码,mysql-socket需要指定mysql.sock文件的位置【查看my.cnf配置文件】 sysbench --test=oltp.lua --mysql-table-engine=innodb --oltp-tables-count=3 --oltp-table-size=1000000 --mysql-user=root --mysql-password=123456 --mysql-socket=/var/lib/mysql/mysql.sock prepare 参数:

--mysql-db=test          //测试数据库
--mysql-user=root        //用户名
--myssql-password=123456   //密码
--oltp-tables-count=8      //表的数量
--oltp-table-size=100000    //每张表记录为10万
--mysql-sock=/var/lib/mysql/mysql.sock     //mysql.sock路径,本地连接时可指定host ip连接,也可直接使用Mysql.sock连接

 执行完建表语句后,生成一下数据执行结果:在使用root账户登录数据库,在sbtest数据库中插入三张表,每张表1000000条数据[图片上传失败...(image-20e96c-1594651216060)]
2、执行测试
sysbench --test=oltp.lua --mysql-table-engine=innodb --oltp-tables-count=3 --oltp-table-size=1000000 --mysql-user=root --mysql-password=123456 --mysql-socket=/var/lib/mysql/mysql.sock --max-time=60 --max-requests=0 --num-threads=8 --report-interval=10 run 新增的几个参数选项:

--num-threads=8    //线程数为8
--max-time=60      //测试时间为60s
--report-interval=10    //报告打印周期为10s,每10s打印一次
--oltp-read-only=off    //非只读操作测试最

重要的参数指标:总的事务数,每秒事务数,时间统计信息(最大、最小、平均、95%以上语句响应时间)  
3、清理数据
sysbench --test=oltp.lua --mysql-table-engine=innodb --oltp-tables-count=3 --oltp-table-size=1000000 --mysql-user=root --mysql-password=123456 --mysql-socket=/var/lib/mysql/mysql.sock cleanup [图片上传失败...(image-39f85a-1594651216060)]
 测试过程中的问题:1、oltp的位置指定,报错找不到对应的oltp.lua文件注:此处需要指定oltp.lua脚本位置,sysbench5默认已经指定,如果按照网上或者树上的语句,提示如下报错,找不到对应的文件,发现自己写的路径前又追加了sysbench自带的路径,直接指定到了sysbench子文件夹。[图片上传失败...(image-bbe30-1594651216060)]
    需要改变路径,直接指定oltp.lua即可
sysbench --test=oltp.lua --mysql-table-engine=innodb --oltp-tables-count=3 --oltp-table-size=1000000 --mysql

相关文章

  • mysql 基准测试

    mysql 基准测试 基准测试策略 基准测试指标 基准测试工具 基准测试样例

  • 二、MySql 基准测试

    目录[toc] 概述 基准测试,是针对系统设计的一种压力测试。通常的目标是为了掌握系统的行为。是mysql新手和专...

  • 什么是MySQL的基准测试

    1.MySQL基准测试 什么是基准测试: 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以...

  • Mysql基准测试

    简介:基准测试(benchmark)是针对系统设计的一种压力测试,通常为了掌握系统的行为,或重现某个系统状态,或做...

  • MYSQL基准测试

    1.关于什么是OLTP,OLAP? OLTP:联机事务处理,侧重于存储数据,指的是传统的关系型数据库对即时数据的增...

  • MySQL基准测试

    一、定义: 基准测试是一种测量和评估软件性能指标的活动,用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新...

  • Mysql基准测试

    应用的性能很多时候都取决于数据库的性能,数据库的基准测试可以让我们知道数据库的性能怎样,瓶颈在哪。 基准测试的策略...

  • MySQL基准测试

    MySQL基准测试 原因 测试评估出当前系统的运行情况,建立性能基准线; 模拟更高负载,找出扩展性瓶颈; 规划未来...

  • Mysql基准测试

    什么是基准测试   是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进...

  • 高性能MySQL第二章 读书笔记

    第2章 MySQL基准测试 基准测试可以在系统的实际负载之外创造一些虚构场景进行测试。 基准测试的一个主要问题在于...

网友评论

      本文标题:二、MySql 基准测试

      本文链接:https://www.haomeiwen.com/subject/spkthktx.html