引言

作为一名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

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

  1. 分布式数据库实战第一节 分布式数据库的前世今生

    开篇词 吃透分布式数据库,提升职场竞争力 你好,我是高洪涛,前华为云技术专家.前当当网系统架构师和 Oracle DBA,也是 Apache ShardingSphere PMC 成员.作为创始团队核 ...

  2. oracle分布式数据库搭建,ORACLE实现分布式数据库应用

    原文链接:http://user2005.blog.163.com/blog/static/137589500201123141041319/ 序 言 ORACLE分布式数据库系统是一个客户/服务器体 ...

  3. 【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库千亿级超大表优化实践

    01 引言 随着用户的增长.业务的发展,大型企业用户的业务系统的数据量越来越大,超大数据表的性能问题成为阻碍业务功能实现的一大障碍.其中,流水表作为最常见的一类超大表,是企业级用户经常碰到的性能瓶颈. ...

  4. 检查集群状态命令_巨杉数据库SequoiaDB巨杉Tech | 四步走,快速诊断数据库集群状态...

    1.背景 SequoiaDB 巨杉数据库是一款金融级分布式数据库,包括了分布式 NewSQL.分布式文件系统与对象存储.与高性能 NoSQL 三种存储模式,分别对应分布式在线交易.非结构化数据和内容管 ...

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

    一直以来,数据库的核心研发团队都十分神秘,作为隐藏在幕后的隐士高人,他们对数据库发展以及数据库研发团队的看法是什么呢?本文我们就由巨杉数据库核心技术研发团队的"老司机",向大家分享 ...

  6. 助力金融业数字化转型,巨杉数据库获评金融级分布式数据库用户首选品牌

    日前,由国家工业信息安全发展研究中心指导,北京赛昇计世资讯科技有限公司主办,赛昇控股(北京)集团有限公司.产业互联网发展联盟和软件融合应用与测试验证工业和信息化部重点实验室等单位支持的"20 ...

  7. 分布式SQL学习总结(1)——蚂蚁金服资深总监韩鸿源:像使用集中式数据库一样使用OceanBase分布式数据库

    很多人对蚂蚁金服的了解还仅仅停留在支付宝,其实今天的蚂蚁金服已经逐步成长为大型的金融集团,覆盖了很多范围的业务,这些业务中不仅包括超过8.7亿实名注册用户,日活2亿多的支付宝APP,还包括服务亿级免押 ...

  8. 海量数据及多云环境下,数据库运维、分布式转型、国产化改造实践丨DAMS峰会(文末有福利)

    随着大数据与云原生的相互碰撞,各技术领域的新一波挑战和创变正以迅雷之势向我们宣战.利用云原生技术的简便快捷.动态调度.按需伸缩等优势,如何加速大数据基础软件和系统的迭代更新频率.确保整体环境的最终一致 ...

  9. 海量数据及多云环境下,数据库运维、分布式转型、国产化改造实践丨DAMS峰会

    随着大数据与云原生的相互碰撞,各技术领域的新一波挑战和创变正以迅雷之势向我们宣战.利用云原生技术的简便快捷.动态调度.按需伸缩等优势,如何加速大数据基础软件和系统的迭代更新频率.确保整体环境的最终一致 ...

最新文章

  1. CNN 究竟“看”到了什么?曲线检测器是否为可解释性带来了出路?
  2. 技术干货 | 高性能短链设计与实现
  3. 网易MCTalk聚焦前沿技术 助力传统企业数字化转型
  4. airpods删除别人的配对_怎么不让别人连我的airpods
  5. 科技英语翻译计算机化考试,2017年英语四级翻译范文之考公热
  6. Android新手入门2016(14)--FragmentTabHost实现选项卡和菜单
  7. ASCIIUNICODE编码演化
  8. bios还原默认设置
  9. MTK功能机2503 GPIO配置
  10. 布线问题----回溯法
  11. 武汉年会签到,抽奖,摇一摇,微信上墙,互动大屏
  12. 爬虫爬取图片并保存到电脑
  13. Java线程并发协作与任务定时调度
  14. 扫雷小游戏制作全过程
  15. accton 打开或关闭进程统计
  16. 洛谷P2000 拯救世界(NTT+生成函数)
  17. python《pandas入门》实现Excel数据字段的拆分
  18. 【Web Design The Missing Link】Chatty APIs
  19. 一文搞懂什么是GPA
  20. 转载-大数据管理神器:Ambari自定义stack和服务二次开发详细教程

热门文章

  1. 企业级ajax框架,企业级AJAX框架设计与实现.pdf
  2. python requests库介绍
  3. secure CRT 7 注册码
  4. 在游戏中学编程不好吗?8大游戏总有一个适合你吧?
  5. 2019最新【Angular 4.0】在线竞拍网站开发
  6. 关于GPS与GIS的一些思考
  7. fastjson如何指定字段不序列化
  8. 在线文档编辑工具比较
  9. 服务器+固态硬盘安装Ubuntu16.04,重启黑屏(已解决)
  10. Android 设置动态壁纸没有确认按钮处理方式