【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库Sysbench测试最佳实践

引言mysql

做为一名DBA,时常须要对某些数据库进行一些基准测试,进而掌握数据库的性能状况。本文就针对sysbench展开介绍,帮助你们了解sysbench的通常使用方法。git

sysbench简介github

  • 什么是基准线测试

所谓基准测试,就是经过对数据库的性能指标进行定量的、可重复的和可对比的测试。基准线测试能够理解为一种针对系统的压力测试。但该测试并不关心业务逻辑,所以测试相对简单和直接。经过测试可分析在当前配置下(包括硬件配置,OS,及数据库参数设置等)应用的性能表现,实现不一样应用之间的比较。sql

具体而言,可使用以下指标来进行比对:数据库

  • TPS/QPS:衡量数据库的吞吐量;
  • 响应时间:包括平均响应时间,最小响应时间以及不一样百分位数的响应时间(如p90,p95);
  • 并发量: 同时处理请求的数量。
  • sysbench介绍

sysbench是开源的,基于LuaJIT框架,可自定义脚本的多线程基准线测试工具。服务器

sysbench下载连接:https://github.com/akopytov/s...多线程

该工具可进行以下方面的测试:并发

  • 数据库性能测试(OLTP基准线测试)
  • CPU运算性能测试
  • 磁盘IO性能测试
  • 内存分配及传输速度测试
  • POSIX线程性能测试
  • sysbench 安装

1.  操做系统系统安装依赖包框架

yum -y install make automake libtool pkgconfig libaio-devel

Note:

如需测试数据库性能,还须要另外安装数据库相关软件,本文以mysql为例工具

2. 从 https://github.com/akopytov/s...

上下载sysbench安装包

3.  解压zip包

zip master.zip

4. 进入被解压的文件夹,执行以下命令:

​​​​​​​

./autogen.sh

Note:

  • --prefix 参数定义 sysbench编译后安装的路径
  • --with-mysql-libs和--with-mysql-includes 定义的是mysql相关文件的路径

编译并安装sysbench:

make && make install

  • sysbench命令介绍

sysbench的命令格式以下:

sysbench [options]... [testname] [command]

  • testname: 能够指定一个lua的脚本进行测试,或是指定关键字(fileio, cpu,memory)来使用sysbench内置的方法测试相关项目
  • command: 定义了测试须要执行的行为。下表描述了command包含的通常命令:

命令样例:

​​​​​​​

./sysbench  --mysql-host=127.0.0.1 --mysql-db=sbtest --table-size=500000

其中:

options: --mysql-host , --mysql-db, --table-size, --mysql-user, --mysql-password

testname:/data/sysbench1.1/share/sysbench/oltp_read_only.lua 脚本

command: prepare

sysbench 测试

如上所述,sysbench能针对数据库,cpu,磁盘I/O, 内存性能等方面进行基准测试。现就这几方面分别讲解。

  • 数据库性能测试

当sysbench用于测试数据库性能时,能够经过使用sysbench内置相关lua脚原本快速测试数据库(另外因为sysbench支持自定义脚本,也能够自定义数据库测试脚本,自定义功能本文中不做展开)。

 

 这些内置脚本存放在 $SYSBENCH_HOME/share/sysbench目录下,该目录下包含以下文件:

经过以下命令查看这些脚本的输入参数说明:

./sysbench  $SYSBENCH_HOME/share/sysbench /share/sysbench /oltp_xxxx.lua  help 

Note:

  • $SYSBENCH_HOME为sysbench的安装目录.    
  • oltp_xxx.lua 为lua相关脚本

数据库测试主要分为三步:

Step1:链接Mysql数据库,建立相关用户并赋予相应权限

mysql> create  database sbtest;

Step2: 使用lua脚本,初始化数据库(prepare)

​​​​​​​

./sysbench --mysql-host=127.0.0.1  --mysql-port=3306 --mysql-db=sbtest

上述命令中--mysql_storage_engine和--create_table_options 指定了建表时使用巨杉数据库引擎建立了hash分区表。若是只是想建立普通表,去除这两个选项便可。

在此阶段sysbench按照指令建立了10张表(--tables参数指定建立表的个数),这些表均有相同的表结构,其结构以下:

​​​​​​​

| Field | Type      | Null | Key | Default | Extra          |

同时每张表插入了80万条数据(--table_size参数指定了每张表的数据量)。

​​​​​​​

mysql> select count(1) from sbtest1;

并在每张表的id列建立主键索引。k列建立b-tree索引:

​​​​​​​

+---------+------------+----------+--------------+-------------+

Step3: 使用lua脚本执行测试(run)

​​​​​​​

./sysbench --mysql-host=192.168.56.101,192.168.56.102  --time=600

本次测试,链接了两个mysql数据库实例(--mysql-host参数指定了两个地址),开启了10个线程(--threads参数指定),并运行300秒(--time参数指定),每5秒打印一次报告(--report-interval)。

在真实测试环境中建议测试时间不要小于30分钟。数据表建议不低于10个,单表数据量不低于500万行,若是配备了SSD设备的话,则建议单表数据量不低于1亿行。

结果解析:

SQL statistics:

queries performed:

这些测试报告中,须要特别注意几项:

  • transactions中的TPS,本报告中TPS为153.99
  • queries中的QPS,本报告中的QPS为2771.84
  • 95th percentile,本报告中为125.52

如还需测试别的场景,只需修改testname和options相关参数便可。

Note: 

  • QPS: (Queries-per-second)每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准 
  • TPS: (Transaction-Per-Second) 每秒事务处理量,是一个表达系统处理能力的性能指标,每秒处理的消息数
  • CPU测试

sysbench的CPU测试,主要是经过生成特定数量的质数所须要的时间来判断CPU的性能。

这里能够经过两步来完成CPU的测试。

Step1:确认CPU的线程数

cat /proc/cpuinfo|grep processor|wc -l

Step2: 执行CPU的测试命令

./sysbench cpu --cpu-max-prime=20000 --threads=2

--cpu-max-prime :指定质数的个数,默认为10000

--threads:指定开启的线程数,这和第一步的cpu查询得到的cpu线程数保持一致

结果解析:

CPU speed:

events per second:   425.11

结果中的execution time为所须要关注的数据,本例中结果为 9.9947。

  • 磁盘I/O测试

以下命令能够查看I/O测试选项:

/sysbench fileion help

在众多参数中经常使用到的一些参数为:

--file-num: 建立的文件数,默认为128个,若是想测试io的最大性能,该参数需设置为1

--file-total-size: 每一个文件的大小,默认是2GB

--file-io-mode: 文件测试模式,包含seqwr(顺序写)、seqrewr(顺序读写)、seqrd(顺序读)、rndrd(随机读)、rndwr(随机写)、rndrw(随机读写)

sysbench测试磁盘I/O测试主要分为三步:

Step1:准备数据

./sysbench  fileio --file-num=1 --file-total-size=2G --file-test-mode=rndrw prepare

此时在当前目录下sysbench会产生一些用于测试的文件。

Step2:测试速度

./sysbench  fileio --file-num=1 --file-total-size=2G --file-test-mode=rndrw run

Step3:  删除文件

./sysbench  fileio --file-num=1 --file-total-size=2G --file-test-mode=rndrw cleanup

结果分析:Throughput:

read:  IOPS=2025.48 31.65 MiB/s (33.19 MB/s)

这里须要关注的是读写的IOPS,以及fsync。IOPS值越高说明,磁盘读写越快。

Note:

  • IOPS(Input/OutputOperations Per Second)是一个用于定义存储设备性能的指标,能够视为是每秒的读写次数。 
  • fsync把全部已修改的内容已经正确同步到硬盘上,该调用会阻塞等待直到设备报告IO完成
  • 内存测试

当testname指定为memory时,用户可使用sysbench来测试内存访问的性能。

首先来看一下测试内存有哪些选项。

./sysbench memory help

 

经常使用选项为:

--memory-block-size: 测试时使用的内存块大小,默认为1K。实际测试建议使用1M

--memory-total-size: 测试时使用的的数据总大小

--memory-oper: 内存操做类型。{read, write, none} 默认是write

--memory-access-mode: 指定内存访问方式,seq: 为顺序访问,rnd:为随机访问

内存测试相对简单,用户只需肯定好参数直接执行便可。

./sysbench memory --memory-block-size=1M --memory-total-size=100G --threads=1 --memory-access-mode=rnd run

结果分析:​​​​​​​

Throughput:

测试结果能够关注Throughput里的几项:eps, time elapsed 和 total number of events

本文对内存的写进行了测试,若是比较关注读性能(数据库中主从分离后,从库对读性能要求较高),能够修改参数memory-oper为read,进行测试。

总结

整体来讲sysbench是一款功能比较丰富的基准线测试工具。平常工做中较常使用的是数据库oltp能力的测试功能。本文就sysbench的一些经常使用方法作了介绍,并重点对其内置的测试方法进行了用法演示,但愿能对你们有所帮助。

相关文章
相关标签/搜索