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

引言

作为一名DBA,时常需要对某些数据库进行一些基准测试,进而掌握数据库的性能情况。本文就针对sysbench展开介绍,帮助大家了解sysbench的一般使用方法。

?

sysbench简介

  • 什么是基准线测试

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

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

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

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

sysbench下载链接:https://github.com/akopytov/sysbench

该工具可进行如下方面的测试:

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

1.  操作系统系统安装依赖包

yum -y install make automake libtool pkgconfig libaio-devel

Note:

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

2. 从 https://github.com/akopytov/sysbench/archive/master.zip

上下载sysbench安装包

3.  解压zip包

zip master.zip

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

???????

./autogen.sh./configure --prefix=/usr/local/sysbench --with-mysql-libs=/usr/local/mysql/lib/  --with-mysql-includes=/usr/local/mysql/include/

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 --mysql-user=root --mysql-password=root/data/sysbench1.1/share/sysbench/oltp_read_only.lua  prepare

其中:

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;Query OK, 1 row affected (0.00 sec)mysql> grant all privileges on sbtest.* to ‘sdbadmin‘@‘%‘ identified by ‘xxxxxx‘;Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> flush privileges;Query OK, 0 rows affected (0.01 sec)

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

???????

./sysbench --mysql-host=127.0.0.1  --mysql-port=3306 --mysql-db=sbtest --mysql-user=sdbadmin --mysql-password=xxxxxx --tables=10 --table_size=800000 --threads=10 --mysql_storage_engine=sequoiadb  --create_table_options="comment=\"sequoiadb:{table_options:{ShardingType:‘hash‘,ShardingKey:{id:1},Compressed:false,EnsureShardingIndex:false}}\"" /data/sysbench1.1/share/sysbench/oltp_read_write.lua  prepare

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

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

???????

| Field | Type      | Null | Key | Default | Extra          |+-------+-----------+------+-----+---------+----------------+| id     | int(11)    | NO   | PRI | NULL    | auto_increment || k      | int(11)    | NO   | MUL | 0       |                || c      | char(120) | NO    |     |         |                || pad    | char(60)  | NO    |     |         |                |+-------+-----------+------+-----+---------+----------------+

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

???????

mysql> select count(1) from sbtest1;+----------+| count(1) |+----------+|   800000 |+----------+

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

???????

+---------+------------+----------+--------------+-------------+| Table   | Non_unique | Key_name | Seq_in_index | Column_name |+---------+------------+----------+--------------+-------------+| sbtest1 |          0   | PRIMARY   |            1   | id          || sbtest1 |          1   | k_1        |            1   | k           |+---------+------------+----------+--------------+-------------+

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

???????

./sysbench --mysql-host=192.168.56.101,192.168.56.102  --time=600 --report-interval=5 --mysql-port=3306 --mysql-db=sbtest --mysql-user=sdbadmin --mysql-password=xxxxxx --tables=10 --table_size=80000 --threads=10  /data/sysbench1.1/share/sysbench/oltp_read_write.lua  run > ./run.log

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

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

结果解析:

SQL statistics:

    queries performed:        read:                            646870    --读总数        write:                           184819    --写总数        other:                           1        total:                           831690    transactions:                        46205  (153.99 per sec.)  --总事务数(每秒事务数tps)    queries:                             831690 (2771.84 per sec.) –查询总数(每秒查询数qps)    ignored errors:                      0      (0.00 per sec.)    reconnects:                          0      (0.00 per sec.)
Throughput:    events/s (eps):                      153.9911    time elapsed:                        300.0497s    total number of events:              46205
Latency (ms):         min:                            17.24   --最小耗时(毫秒)         avg:                            64.93   --平均耗时(毫秒)         max:                            652.50   --最大耗时(毫秒)         95th percentile:                125.52  -- 95%的操作响应耗时(毫秒)         sum:                            3000048.67
Threads fairness:    events (avg/stddev):           4620.5000/20.08    execution time (avg/stddev):   300.0049/0.01

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

  • 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
Throughput:    events/s (eps):                      425.1147    time elapsed:                        10.0020s    total number of events:              4252
Latency (ms):         min:                                    2.24         avg:                                    2.35         max:                                   17.93         95th percentile:                        2.52         sum:                                 9994.74
Threads fairness:    events (avg/stddev):           4252.0000/0.00    execution time (avg/stddev):   9.9947/0.00    --完成计算所需要的时间(秒)

结果中的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)         write: IOPS=1350.32 21.10 MiB/s (22.12 MB/s)         fsync: IOPS=33.79
Latency (ms):         min:                                  0.00         avg:                                  0.29         max:                                 19.59         95th percentile:                      0.87         sum:                               9950.40

这里需要关注的是读写的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:    events/s (eps):                      362.1440    time elapsed:                        10.0015s    total number of events:              3622
Latency (ms):         min:                                    2.22         avg:                                    2.76         max:                                    6.31         95th percentile:                        3.02         sum:                                 9995.78
Threads fairness:    events (avg/stddev):           3622.0000/0.00execution time (avg/stddev):   9.9958/0.00

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

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

总结

总体来说sysbench是一款功能比较丰富的基准线测试工具。日常工作中较常使用的是数据库oltp能力的测试功能。本文就sysbench的一些常用方法做了介绍,并重点对其内置的测试方法进行了用法演示,希望能对大家有所帮助。

原文地址:https://www.cnblogs.com/sequoiadbsql/p/12096805.html

时间: 2024-08-12 10:14:57

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

对话巨杉核心研发团队:分布式数据库自研之路

一直以来,数据库的核心研发团队都十分神秘,作为隐藏在幕后的隐士高人,他们对数据库发展以及数据库研发团队的看法是什么呢?本文我们就由巨杉数据库核心技术研发团队的"老司机",向大家分享他分布式数据库的自研之路. Q:作为数据库行业的"老司机",您能否先介绍一下自己?A:我叫Danny,是巨杉数据库核心研发团队的成员,是一名数据库资深工程师和架构师,有超过20年的数据库核心研发经验,曾经作为DB2 内核研发团队成员参与了DB2 ,DPF等产品的架构设计和研发工作.目前,我

Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践

参考赵班长的unixhot以及马亮blog 笔者QQ:572891887 Linux架构交流群:471443208 1.1Mesos简介 Mesos是Apache下的开源分布式资源管理框架,它被称为分布式系统的内核.Mesos最初是由加州大学伯克利分校的AMPLab开发,后在Twitter得到广泛使用. Mesos-Master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework. Mesos-Slave:负责管理本节点上的各个mesos-task

干货|Mesos分布式集群管理最佳实践

Mesos最开始由加州大学伯克利分校开发,推广于美国版的微博Twitter 是Apache下的开源分布式资源管理框架, 它被称为分布式系统的内核,相当于人的大脑. Mesos-Master是整个系统的"大脑",负责管理接入Mesos的各个framework(由frameworks_manager管理)和slave(由slaves_manager管理),并将slave上的资源按照某种策略分配给framework(由独立插拔模块Allocator管理). 示意图 Mesos-Slave负责

巨杉Tech | 使用 SequoiaDB 分布式数据库搭建JIRA流程管理系统

介绍 JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.很多企业与互联网公司都在使用Jira作为内部流程管理系统,进行团队协作与问题单管理. JIRA的后台数据库可以选择使用嵌入式数据库或MySQL/PGSQL等专业数据库.一般来说,大部分企业选择MySQL作为底层的数据存储.但是,随着问题工单的不断积累,对于较大型企业来说MySQL所支撑的数据量可能很快达到瓶颈.用户可以选择使用SequoiaD

【巨杉数据库SequoiaDB】点燃深秋,巨杉数据库亮相DTC数据技术嘉年华大会

2019年11月15日,第九届数据技术嘉年华大会在北京隆重召开,本次大会以 "开源 ? 智能 ? 云数据 - 自主驱动发展 创新引领未来" 为主题,探索数据价值,共论智能未来.SequoiaDB 巨杉数据库作为领先的金融级分布式关系型数据库,为大家带来新一代分布式数据库的发展趋势和特性,也通过分享巨杉的丰富金融级实践经验,帮助大家充分了解分布式数据库当前的应用场景. ****分布式数据库发展趋势 在上午主会场的分享中,巨杉数据库联合创始人王涛,为大家带来了题为"新一代分布式数

【巨杉答疑】巨杉数据库和mongodb有什么关系吗?

哈罗,艾瑞巴蒂~巨杉答疑栏目今日上线啦! 巨杉数据库作为商业化开源软件,已经拥有大量社区用户.开源至今,大到分布式数据库原理.架构问题,小到SDB巨杉数据库的安装使用问题,大家似乎都有很多问题想要和我们交流,所以我们邀请技术大咖和大家好好聊聊,有啥问题尽管放马过来! 昨天,我们就请到巨杉数据库的两位技术大咖在巨杉官方微信群针对分布式数据库的相关内容对于群友的提问进行解答.来淘点干货吧! 1.官方数据说巨杉很多性能超过mongoDB,前者是否可以替代后者,不能完全替代的话,在哪些性能方面巨杉能力不

大数据将促进分布式数据库发展及去Oracle

2015-09-13 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 分布式数据库简介 分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库, 通过网络互相连接共同组成一个完整的.全局的逻辑上集中.物理上分布的大型数据库. 分布式并行数据库通过并行使用多个CPU和磁盘来将诸如装载数据.建立索引.执行查询等操作并行化以提升性能的数据库系统.其中最重要的关键

分布式数据库火了 开源填补数据库空白

原文地址:http://digi.163.com/17/1114/06/D36B05G6001680N8.html 分布式数据库在今年突然成为热点技术.这背后究竟有哪些环境变化导致了这种技术演进,分布式数据库的优势在哪儿?这种分布式数据库在国内现状又是如何?数据库演进方向正如上世纪七十年代关系型数据库诞生一样,分布式数据库的诞生也是建立在数据越来越多,数据重要性越来越强的背景之下. 数据库演进历程数据库是一个电子化的文件柜,是用来存储电子文件的处所.在云计算.大数据的环境背景下,如何帮助用户更好

SequoiaDB巨杉数据库携手民生银行分布式数据管理平台

日前,SequoiaDB巨杉数据库成功中选民生银行新一期"年度生产运营商业软件许可和服务采购"项目,再次携手推进分布式数据库管理平台建设.自从2014年正式和民生银行建立合作,巨杉数据库至今已经管理超过2PB的数据,节点数超过130台物理服务器,并已经在数据中台.分布式影像管理等多个核心业务系统.平台规模使用. 民生银行简介:民生银行是中国第一家主要由民营企业发起设立的全国性股份制商业银行,截至2017年末,中国民生银行已经成为资产总额59,020.86亿元,一级资本净额超过3800亿