你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

MySQL基准测试的基本概念

[复制链接]
gaosmile 发布时间:2021-1-9 20:43
作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的。本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法。3 s; _2 t/ I; Q% H8 a" Q. N
微信图片_20210109204239.jpg
: c$ F" C6 q& k3 l. l

( G! Z/ e) H$ {& w9 S1 m什么是基准测试
, d$ W  ]" [8 I' H数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。基准测试与压力测试 基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。- h6 U& f. s# O- H, x+ U
基准测试的作用
4 K+ c) n/ D5 v' [对于多数Web应用,整个系统的瓶颈在于数据库;原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于MySQL,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出MySQL的性能阈值,并根据实际系统的要求调整配置。
, H  m+ q) k5 E7 N& Y. ^基准测试的指标/ e, a. @0 l( w+ B" r
常见的数据库指标包括:TPS/QPS:衡量吞吐量。响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。并发量:同时处理的查询请求的数量。8 e2 C# K5 o  n/ A
基准测试的分类" f% \( S' o8 W! p+ V/ e
对MySQL的基准测试,有如下两种思路:
* |/ r* X  P( m1 o( s8 k2 m(1)针对整个系统的基准测试:通过http请求进行测试,如通过浏览器、APP或postman等测试工具。该方案的优点是能够更好的针对整个系统,测试结果更加准确;缺点是设计复杂实现困难。
! R  |! Q' D9 g) c8 b(2)只针对MySQL的基准测试:优点和缺点与针对整个系统的测试恰好相反。在针对MySQL进行基准测试时,一般使用专门的工具进行,例如mysqlslap、sysbench等。其中,sysbench比mysqlslap更通用、更强大,且更适合Innodb(因为模拟了许多Innodb的IO特性),下面介绍使用sysbench进行基准测试的方法。
& @6 ^0 W: w3 ~! H# u1 d$ rsysbench简介0 L* l! l& \9 _7 z
sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库;主要包括以下几种测试:
1 n2 ]9 T7 L, _& Z
1.cpu性能2.磁盘io性能3.调度程序性能4.内存分配及传输速度5.POSIX线程性能6.数据库性能(OLTP基准测试)7.本文主要介绍对数据库性能的测试。
; p2 H, g* B/ F' E( h# M
sysbench安装
+ t2 T  I2 W& F4 F" I本文使用的环境是CentOS 6.5;在其他Linux系统上的安装方法大同小异。MySQL版本是5.6。+ w. E. ^& ~' s) z2 s' a) a
1.下载解压5 E* P4 _8 J+ K% F

  1. ( @& M' g* m  b0 M% A! j
  2. wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"0 C# G/ b( `9 V+ f# q
  3. unzip sysbench-1.0.zip
    / Z: ^7 G  {) N: W3 j& k  [
  4. cd sysbench-1.0
复制代码
2.安装依赖
6 e+ A* U0 Q# e' L9 L
  1. / R9 L" |# M+ ?
  2. yum install automake libtool –y
复制代码
3.安装 安装之前,确保位于之前解压的sysbench目录中。/ v/ [  s4 z2 v

  1. ; w: [7 H, Q! M9 U7 t/ i  Y
  2. ./autogen.sh1 Q4 b  m/ L$ O( |  y
  3. ./configure4 I+ ]3 U  q2 l7 i5 G1 B
  4. export LD_LIBRARY_PATH=/usr/local/mysql/include #这里换成机器中mysql路径下的include5 v  S8 ~; V+ m8 ^6 O
  5. make
    ! f8 e% x* a/ b/ D. Q' I" h) U
  6. make install
复制代码
4.安装成功. B* N- U3 h) F* n% [/ ?3 \& V

  1. , `6 m+ x+ c( G( ~+ [
  2. [root@test sysbench-1.0]# sysbench --version. I; t3 A- }, z3 U
  3. sysbench 1.0.9
复制代码
sysbench语法1 D; G  z' |9 G
执行sysbench –help,可以看到sysbench的详细使用方法。sysbench的基本语法如下:# M8 l' q9 c! p1 s

  1. ' P" |( n+ q! P
  2. sysbench [options]...[testname][command]
复制代码
下面说明实际使用中,常用的参数和命令。
% a2 S: p7 R* G& V: }1.command command是sysbench要执行的命令,包括prepare、run和cleanup,顾名思义,prepare是为测试提前准备数据,run是执行正式的测试,cleanup是在测试完成后对数据库进行清理。
3 o  ~2 k: O: t2.testname testname指定了要进行的测试,在老版本的sysbench中,可以通过--test参数指定测试的脚本;而在新版本中,--test参数已经声明为废弃,可以不使用--test,而是直接指定脚本。例如,如下两种方法效果是一样的:
) X& U2 ?% {- ?' y9 d0 T
  1. " o" ]8 A6 H2 z# a2 [* |9 F( M
  2. sysbench --test=./tests/include/oltp_legacy/oltp.lua, _9 O3 A+ O8 Z  P% h
  3. sysbench ./tests/include/oltp_legacy/oltp.lua
复制代码
测试时使用的脚本为lua脚本,可以使用sysbench自带脚本,也可以自己开发。对于大多数应用,使用sysbench自带的脚本就足够了。不同版本的sysbench中,lua脚本的位置可能不同,可以自己在sysbench路径下使用find命令搜索oltp.lua。P.S.:大多数数据服务都是oltp类型的,如果你不了解什么是oltp,那么大概率你的数据服务就是oltp类型的。
% |( d, {6 s3 O* X$ n3.options sysbench的参数有很多,其中比较常用的包括:MySQL连接信息参数:
: Y) M4 k. z9 i, S, s6 o: ?( }5 j

% E1 h* l2 j3 {5 g% r
1.--mysql-host:MySQL服务器主机名,默认localhost;如果在本机上使用localhost报错,提示无法连接MySQL服务器,改成本机的IP地址应该就可以了。2.--mysql-port:MySQL服务器端口,默认33063.--mysql-user:用户名4.--mysql-password:密码

/ I: G. V* u2 P* A% n+ I
MySQL执行参数:

- [$ T" b% R7 ~9 z9 q
1.--oltp-test-mode:执行模式,包括simple、nontrx和complex,默认是complex。simple模式下只测试简单的查询;nontrx不仅测试查询,还测试插入更新等,但是不使用事务;complex模式下测试最全面,会测试增删改查,而且会使用事务。可以根据自己的需要选择测试模式。2.--oltp-tables-count:测试的表数量,根据实际情况选择3.--oltp-table-size:测试的表的大小,根据实际情况选择4.--threads:客户端的并发连接数5.--time:测试执行的时间,单位是秒,该值不要太短,可以选择1206.--report-interval:生成报告的时间间隔,单位是秒,如10
: Z2 }- B% y% h" M
sysbench使用举例4 a9 Q9 c$ i" s+ u+ B6 k1 i
在执行sysbench时,应该注意:

5 u: I: L5 P) z& s  V$ U
1.尽量不要在MySQL服务器运行的机器上进行测试,一方面可能无法体现网络(哪怕是局域网)的影响,另一方面,sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现。2.可以逐步增加客户端的并发连接数(--thread参数),观察在连接数不同情况下,MySQL服务器的表现;如分别设置为10,20,50,100等。3.一般执行模式选择complex即可,如果需要特别测试服务器只读性能,或不使用事务时的性能,可以选择simple模式或nontrx模式。4.如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。

9 {& q) U+ w. h- ~
下面是sysbench使用的一个例子:
2 X; J7 y/ ?6 K* s* }' V4 {/ c1.准备数据
: c3 J8 }. r8 r) x( c( G' d; R0 d" }- Y
  1. $ A8 D9 ^4 h% ]8 V$ G
  2. sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10--mysql-port=3306--mysql-user=root --mysql-password=123456--oltp-test-mode=complex --oltp-tables-count=10--oltp-table-size=100000--threads=10--time=120--report-interval=10 prepare
复制代码
其中,执行模式为complex,使用了10个表,每个表有10万条数据,客户端的并发线程数为10,执行时间为120秒,每10秒生成一次报告。
, \6 e. d4 q% h* Y/ K' l 微信图片_20210109204243.jpg
/ W& _) A) O4 C- ?$ y7 C6 e2.执行测试 将测试结果导出到文件中,便于后续分析。
- F; \; r2 i. v; d0 `( W- S
  1. , U3 D1 N# R0 U; s1 y6 u
  2. sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10--mysql-port=3306--mysql-user=root --mysql-password=123456--oltp-test-mode=complex --oltp-tables-count=10--oltp-table-size=100000--threads=10--time=120--report-interval=10 run >>/home/test/mysysbench.log
复制代码
3.清理数据 执行完测试后,清理数据,否则后面的测试会受到影响。* d3 S, U$ J5 X/ D- Z1 V7 V, y# ^

  1. 7 p8 r* w/ o" d8 j7 h& w$ J
  2. sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10--mysql-port=3306--mysql-user=root --mysql-password=123456 cleanup
复制代码
测试结果测试结束后,查看输出文件,如下所示:3 y) M/ p3 S% Y- U; H
微信图片_20210109204247.jpg 6 P$ e7 {' c2 @" |* D( u, g
其中,对于我们比较重要的信息包括:queries:查询总数及qps transactions:事务总数及tps Latency-95th percentile:前95%的请求的最大响应时间,本例中是344毫秒,这个延迟非常大,是因为我用的MySQL服务器性能很差;在正式环境中这个数值是绝对不能接受的。2 M5 o, [2 b# P+ F: ^( l
建议
. [% k$ P4 Z9 h, w+ |下面是使用sysbench的一些建议。

! R, R+ B7 S9 z/ \" L  }2 b
1.在开始测试之前,应该首先明确:应采用针对整个系统的基准测试,还是针对MySQL的基准测试,还是二者都需要。2.如果需要针对MySQL的基准测试,那么还需要明确精度方面的要求:是否需要使用生产环境的真实数据,还是使用工具生成也可以;前者实施起来更加繁琐。如果要使用真实数据,尽量使用全部数据,而不是部分数据。3.基准测试要进行多次才有意义。4.测试时需要注意主从同步的状态。5.测试必须模拟多线程的情况,单线程情况不但无法模拟真实的效率,也无法模拟阻塞甚至死锁情况。/ q2 x' V0 N$ g+ E- E. O

  X* b1 D- K3 s2 B# T* _
赞 收藏 评论0 发布时间:2021-1-9 20:43

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版