Sysbench 性能测试(小白快速上手)

文末有惊喜哦 !

Sysbench 介绍


Sysbench 是一个在Linux系统上进行性能测试和基准测试的工具。它可以用于评估计算机系统的各种性能指标,如 CPU 性能、内存性能、文件 I/O性 能和数据库性能等。Sysbench 提供了多种测试模式和选项,可以帮助用户模拟不同负载条件下的性能表现,从而有助于优化系统配置和应用程序性能。

1)Sysbench 附带了以下捆绑的基准测试

  • oltp_*.lua:类似oltp的数据库基准的集合
  • fileio:文件系统级基准测试
  • cpu:简单的cpu基准测试
  • memory:内存访问基准
  • threads:基于线程的调度器基准
  • mutex:POSIX互斥基准

2)Sysbench 特性

  • 关于速率和延迟的大量统计数据是可用的,包括延迟百分比和直方图
  • 即使有数千个并发线程,开销也很低。Sysbench能够每秒生成和跟踪数亿个事件
  • 通过在用户提供的Lua脚本中实现预定义的钩子,可以轻松创建新的基准测试
  • 可以用作通用的Lua解释器,只需使用#!/usr/bin/sysbench替换#!/usr/bin/lua

Sysbench 安装


1)二进制安装

// ubuntu 安装
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench
sysbench --version

// centos 安装
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
sysbench --version

不同系统安装 sysbench 参考:项目概览 - sysbench - GitCode架构师必备之性能测试--压测工具sysbench的安装及使用_sysbench安装-CSDN博客

Sysbench 使用


sysbench 的命令行语法如下:

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

1)testname:testname 是一个可选的内置测试名称(如 fileio、memory、cpu等),或一个捆绑的 Lua 脚本名称(如 oltp_read_only),或一个自定义 Lua 脚本的路径。

2)command:command 是一个可选参数,sysbench 将把它传递给内置测试或用 testname 指定的脚本。可用命令列表取决于特定测试。有些测试还实现了自己的自定义命令。将由sysbench传递给内置测试或用testname指定的脚本。命令定义测试必须执行的动作。可用命令的列表取决于特定的测试。一些测试还实现了它们自己的自定义命令。 下面是典型的测试命令及其用途的描述:

  • prepare:为那些需要它们的测试执行准备操作,例如在磁盘上为文件测试创建必要的文件,或为数据库基准测试填充测试数据库。
  • run:运行testname参数指定的实际测试。所有测试都提供此命令。
  • cleanup:在创建临时数据的测试运行后删除临时数据。
  • help:显示使用参数 testname 指定的测试的使用信息。这包括测试提供的完整命令列表,因此应该使用它来获取可用的命令。

3)options:options是一个包含0个或多个以“--”开头的命令行选项的列表。与命令一样,应该使用sysbench testname help命令描述特定测试提供的可用选项。

命令行选项

支持的常用参数及其说明和默认值如下表所示:

选项

描述

默认值

--threads

创建1的工作线程总数

1

--events

请求总数的限制。0(默认值)表示没有限制

0

--time

总执行时间限制,以秒为单位。0表示不限制

10

--warmup-time

预热时间,可以实现在 CPU/database/page/caches 预热之后再进行统计,这样得到的数据指标更准确

0

--rate

这个数字指定了所有线程平均每秒钟应该执行多少事件(事务)。0(默认)表示无限速率,即事件以尽可能快的速度执行

0

--thread-init-timeout

工作线程初始化的等待时间,单位为秒

30

--thread-stack-size

每个线程的堆栈大小

32k

--report-interval

以间隔时间为秒定期上报中间统计信息。注意,此选项生成的统计信息是按间隔计算的,而不是累积的。0禁用中间报告

0

--debug

打印更多的调试信息

off

--validate

在可能的情况下对测试结果进行验证

off

--help

打印通用语法或指定测试的帮助并退出

off

--verbosity

详细级别(0 -只有关键消息,5 -调试)

4

--percentile

sysbench测量所有已处理请求的执行时间,以显示最小、平均和最大执行时间等统计信息。对于大多数基准测试,知道一个匹配某个百分比的请求执行时间值也是有用的(例如,95%百分比意味着我们应该放弃最长请求的5%,并从剩余的请求中选择最大值)。此选项允许指定查询执行次数的百分位数用于计数

95

--luajit-cmd

执行一个LuaJIT控制命令。这个选项相当于luajit -j

随机数字选项

sysbench提供了许多算法来生成随机数,这些随机数根据给定的概率分布进行分布。下表列出了可用于控制这些算法的选项。

选项

描述

默认值

--rand-type

默认情况下使用随机数分布{uniform,gaussian,special,pareto,zipfian}。基准脚本可以选择使用默认分布,也可以明确指定,即覆盖默认分布。

special

--rand-seed

随机数生成器的种子。当为0时,当前时间用作RNG种子。

0

rand-spec-iter

特殊分布的迭代次数

12

rand-spec-pct

“特殊”值将属于特殊分布的整个范围的百分比

1

rand- spec-res

用于特殊分布的“特殊”值百分比

75

--rand-pareto-h

帕累托分布的形状参数

0.2

--rand-zipfian-exp

zipfian分布的形状参数

0.8

命令参考

sysbench --help

sysbench --help 命令结果如下:

通用数据库选项
General database options:
  --db-driver=STRING  specifies database driver to use ('help' to get list of available drivers) [mysql]
  --db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]
  --db-debug[=on|off] print database-specific debug information [off]
MySQL 相关参数

选项

描述

默认值

--mysql-host

mysql ip 地址

localhost

--mysql-port

mysql 端口号

3306

--mysql-socket

mysql 套接字

--mysql-user

用户名

sbtest

--mysql-password

密码

--mysql-db

指定数据库

sbtest

--mysql-ssl

使用 ssl 连接

off

--mysql-ssl-cipher

ssl 使用 specific cipher

--mysql-compression

如果客户端库中有压缩功能,则使用压缩功能

off

--mysql-debug

跟踪所有客户端库调用

off

--mysql-ignore-errors

忽略的错误

[1213,1020,1205]

--mysql-dry-run

模拟运行,假装所有 MySQL 客户端 API 调用都成功,但不执行它们

off

支持的 lua 脚本

选项

描述

oltp_read_only

只读测试

oltp_read_write

读写测试

oltp_insert

简单插入测试

bulk_insert

批量插入测试

oltp_delete

delete 删除测试

oltp_update_index

带索引的更新测试

oltp_update_non_index

不带索引的更新测试

oltp_point_select

等值查询测试

select_random_points

随机等值查询测试

select_random_ranges

随机范围查询测试

注:这些脚本均包含了oltp_common,所以调用这些脚本可以直接使用 oltp_common 脚本中的内容,oltp_common 脚本中编写了数据生成、数据清理等基础函数。

脚本参数

选项

描述

默认值

–auto_inc

使用 AUTO_INCREMENT 列作为主键(对于 MySQL),或者它在其他 DBMS 中的替代项。禁用时,使用客户端生成的 ID

on

-–create_secondary

除了 PRIMARY KEY 创建二级索引

on

–delete_inserts

每个事务的 DELETE/INSERT 组合数

1

–distinct_ranges

每个事务的 SELECT DISTINCT 查询数

1

–index_updates

每个事务的 UPDATE 索引查询数

1

–mysql_storage_engine

存储引擎,如果使用 MySQL

innodb

–non_index_updates

每个事务的 UPDATE 非索引查询数

1

–order_ranges

每个事务的 SELECT ORDER BY 查询数

1

–point_selects

每个事务的点 SELECT 查询数

10

–range_selects

启用/禁用所有范围 SELECT 查询

on

–range_size

范围 SELECT 查询的范围大小

100

–secondary

使用二级索引代替 PRIMARY KEY

off

–simple_ranges

每个事务的简单范围 SELECT 查询数

1

–skip_trx

不要启动显式事务并在 AUTOCOMMIT 模式下执行所有查询

off

–sum_ranges

每个事务的 SELECT SUM() 查询数

1

–table_size

每个表的行数

10000

–tables

表的个数

1

Sysbench 测试


测试环境准备

1)创建远程连接账号,并授予权限

create user 'root_bench'@'%' identified with mysql_native_password by '123456'; grant all privileges on *.* to 'root_bench'@'%';

2)创建数据库test_sysbench

create database test_sysbench;

MySQL 只读测试

1)准备:4张表,每张表个10万行,16线程

sysbench --threads=16 --time=60 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root_bench --mysql-password=123456 --mysql-db=test_sysbench --tables=4 --table-size=100000 oltp_read_only prepare

 2)开始只读测试

sysbench --threads=16 --time=30 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root_bench --mysql-password=123456 --mysql-db=test_sysbench --tables=4 --table-size=100000 oltp_read_only run

此处结果内容主要包含:

进度信息: 时间计数(1s意为1秒)

thds:线程数

tps:每秒事务数

qps:每秒查询数

r/w/o:分别代表每秒的读/写/其他操作数lat(ms, 95%)时95%操作的耗时-单位为毫秒

err/s:是每秒的错误数

reconn/s:是每秒的重连数

SQL统计信息:

read/write/other/total:SQL的读/写/其他/总计次数

transactions:总事务数及每秒事务数

queries:总查询数及每秒查询数

ignored errors:忽略错误数据

reconnects:重新数据

通用统计信息:

total time:总时间

total number of events:总操作数

耗时信息(单位毫秒):

min:最小耗时

avg:平均耗时

max:最大耗时

95th percentitle:95%耗时

sum:总耗时

线程公平性:

events (avg/stddev):线程执行事务数的平均值和标准差

execution Time (avg/stddev):线程执行时间的平均值和标准差

3)清理只读数据

sysbench --threads=16 --time=600 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root_bench --mysql-password=123456 --mysql-db=test_sysbench --tables=4 --table-size=100000 oltp_read_only cleanup

MySQL 读写测试

1)准备:8张表,每张表个5万行,16线程

sysbench --threads=16 --time=600 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root_bench --mysql-password=123456 --mysql-db=test_sysbench --tables=8 --table-size=50000 oltp_read_write prepare

2)开始读写测试

sysbench --threads=16 --time=30 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root_bench --mysql-password=123456 --mysql-db=test_sysbench --tables=8 --table-size=50000 oltp_read_write run

3)清理读写数据

sysbench --threads=16 --time=600 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root_bench --mysql-password=123456 --mysql-db=test_sysbench --tables=8 --table-size=50000 oltp_read_write cleanup

其他测试也是同样的操作流程,不一一演示了。

获取更多数据库内核干货,请关注微信公众号:东周沉静的青蒿

  • 28
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据库内核

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值