使用sysbench压测主机和数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 交付服务器或数据库的时候,我们需要对服务器和数据库的性能有一定的了解。可以使用sysbench对系统做一些压测。

交付服务器或数据库的时候,我们需要对服务器和数据库的性能有一定的了解。可以使用sysbench对系统做一些压测。

sysbench

sysbench下载

https://github.com/akopytov/sysbench

可以使用0.5版本,支持lua插件压测数据库

sysbench 数据库压测lua脚本例子

https://github.com/percona/sysbench-scripts

Usage:
  sysbench --test=<test-name> [options]... <command>

Commands: prepare run cleanup help version

General options:
  --num-threads=N             number of threads to use [1]
  --max-requests=N            limit for total number of requests [10000]
  --max-time=N                limit for total execution time in seconds [0]
  --forced-shutdown=STRING    amount of time to wait after --max-time before forcing shutdown [off]
  --thread-stack-size=SIZE    size of stack per thread [64K]
  --tx-rate=N                 target transaction rate (tps) [0]
  --report-interval=N         periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]
  --report-checkpoints=[LIST,...]dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []
  --test=STRING               test to run
  --debug=[on|off]            print more debugging info [off]
  --validate=[on|off]         perform validation checks where possible [off]
  --help=[on|off]             print help and exit
  --version=[on|off]          print version and exit [off]
  --rand-init=[on|off]        initialize random number generator [off]
  --rand-type=STRING          random numbers distribution {uniform,gaussian,special,pareto} [special]
  --rand-spec-iter=N          number of iterations used for numbers generation [12]
  --rand-spec-pct=N           percentage of values to be treated as 'special' (for special distribution) [1]
  --rand-spec-res=N           percentage of 'special' values to use (for special distribution) [75]
  --rand-seed=N               seed for random number generator, ignored when 0 [0]
  --rand-pareto-h=N           parameter h for pareto distibution [0.2]
  --config-file=FILENAME      File containing command line options

Log options:
  --verbosity=N      verbosity level {5 - debug, 0 - only critical messages} [3]

  --percentile=N      percentile rank of query response times to count [95]

General database options:

  --db-driver=STRING  specifies database driver to use ('help' to get list of available drivers)
  --db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]
  --db-debug=[on|off] print database-specific debug information [off]


Compiled-in database drivers:
  mysql - MySQL driver

mysql options:
  --mysql-host=[LIST,...]      MySQL server host [localhost]
  --mysql-port=N               MySQL server port [3306]
  --mysql-socket=[LIST,...]    MySQL socket
  --mysql-user=STRING          MySQL user [sbtest]
  --mysql-password=STRING      MySQL password []
  --mysql-db=STRING            MySQL database name [sbtest]
  --mysql-table-engine=STRING  storage engine to use for the test table {myisam,innodb,bdb,heap,ndbcluster,federated} [innodb]
  --mysql-engine-trx=STRING    whether storage engine used is transactional or not {yes,no,auto} [auto]
  --mysql-ssl=[on|off]         use SSL connections, if available in the client library [off]
  --mysql-compression=[on|off] use compression, if available in the client library [off]
  --myisam-max-rows=N          max-rows parameter for MyISAM tables [1000000]
  --mysql-debug=[on|off]       dump all client library calls [off]
  --mysql-ignore-errors=[LIST,...]list of errors to ignore, or "all" [1213,1020,1205]
  --mysql-dry-run=[on|off]     Dry run, pretent that all MySQL client API calls are successful without executing them [off]

Compiled-in tests:
  fileio - File I/O test
  cpu - CPU performance test
  memory - Memory functions speed test
  threads - Threads subsystem performance test
  mutex - Mutex performance test

See 'sysbench --test=<name> help' for a list of options for each test.

cpu

sysbench --test=cpu run

指定多个线程:
sysbench --test=cpu --num-threads=30 run

指定测试时间:
sysbench --test=cpu --max-time=10 run

指定测试请求数
sysbench --test=cpu --max-requests=100000 --num-threads=100 run

io

$ sysbench --test=fileio help
sysbench 0.5:  multi-threaded system evaluation benchmark

fileio options:
  --file-num=N                  number of files to create [128]
  --file-block-size=N           block size to use in all IO operations [16384]
  --file-total-size=SIZE        total size of files to create [2G]
  --file-test-mode=STRING       test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
  --file-io-mode=STRING         file operations mode {sync,async,mmap} [sync]
  --file-async-backlog=N        number of asynchronous operatons to queue per thread [128]
  --file-extra-flags=STRING     additional flags to use on opening files {sync,dsync,direct} []
  --file-fsync-freq=N           do fsync() after this number of requests (0 - don't use fsync()) [100]
  --file-fsync-all=[on|off]     do fsync() after each write operation [off]
  --file-fsync-end=[on|off]     do fsync() at the end of test [on]
  --file-fsync-mode=STRING      which method to use for synchronization {fsync, fdatasync} [fsync]
  --file-merged-requests=N      merge at most this number of IO requests if possible (0 - don't merge) [0]
  --file-rw-ratio=N             reads/writes ratio for combined test [1.5]

io测试中比较重要的几个参数:

file-test-mode: 读还是写?顺序访问还是随机访问? 对于数据库,需要测试重点关注随机IO的性能。

file-fsync-freq: 测试fsync的性能。

file-rw-ratio:读写比例

io 测试

准备测试文件

mkdir test
cd test
sysbench --test=fileio --file-test-mode=rndrw prepare


dtstack@test01:~/test$  ls -lh
total 2.0G
-rw------- 1 dtstack dtstack 16M Jun 28 23:00 test_file.0
-rw------- 1 dtstack dtstack 16M Jun 28 23:00 test_file.1
-rw------- 1 dtstack dtstack 16M Jun 28 23:00 test_file.10
-rw------- 1 dtstack dtstack 16M Jun 28 23:00 test_file.100
-rw------- 1 dtstack dtstack 16M Jun 28 23:00 test_file.101


运行压测, 随机读写
sysbench --test=fileio --file-test-mode=rndrw --max-requests=100000 --num-threads=16 run
压测运行过程中,注意观察io性能。比如我们的这个测试机器,写入iops 500左右,写数据吞度量8M/s, 响应时间近30ms,性能比较一般。

iostat -kx 3

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.33   115.00    5.33  488.00   114.67  7934.67    32.63    13.67   27.76   14.00   27.91   2.03 100.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.62    0.17    3.12   54.37    0.00   32.73

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00   121.00    5.00  474.00   128.00  7732.00    32.82    14.15   29.00    6.40   29.24   2.09 100.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.98    0.17    2.12   62.49    0.00   26.25

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               2.33   118.00    3.67  488.67   106.67  7909.33    32.56    14.56   30.03   17.09   30.12   2.03 100.00

测试内存分配和访问

dtstack@test01:~/test$ sysbench --test=memory help
sysbench 0.5:  multi-threaded system evaluation benchmark

memory options:
  --memory-block-size=SIZE    size of memory block for test [1K]
  --memory-total-size=SIZE    total size of data to transfer [100G]
  --memory-scope=STRING       memory access scope {global,local} [global]
  --memory-hugetlb=[on|off]   allocate memory from HugeTLB pool [off]
  --memory-oper=STRING        type of memory operations {read, write, none} [write]
  --memory-access-mode=STRING memory access mode {seq,rnd} [seq]

dtstack@test01:~/test$ sysbench --test=memory --num-threads=64 run
sysbench 0.5:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 64
Random number generator seed is 0 and will be ignored


Initializing worker threads...

Threads started!

Operations performed: 104857600 (890624.94 ops/sec)

102400.00 MB transferred (869.75 MB/sec)

MySQL压测

sysbench 0.5 使用lua插件的形式压测数据库。

--test 参数指定lua脚本,lua脚本的内容参考下面的例子,

或者参考

https://github.com/percona/sysbench-scripts

dtstack@test01:~/junda/sysbench-scripts/timeseries$ sysbench --test=insertv1.lua --mysql-host=127.0.0.1 --mysql-user=root --mysql-password=xx --max-requests=1000 prepare
sysbench 0.5:  multi-threaded system evaluation benchmark

Creating table 'sensordata' ...
dtstack@test01:~/junda/sysbench-scripts/timeseries$ sysbench --test=insertv1.lua --mysql-host=127.0.0.1 --mysql-user=root --mysql-password=xx --max-requests=1000 run
sysbench 0.5:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Random number generator seed is 0 and will be ignored


Initializing worker threads...

最简单的lua脚本,往一个表插入数据

$ cat test.lua

function event(thread_id)
    db_query("insert into t1(a ) values(100)")
end
$ cat create.lua

function event(thread_id)
    for i = 1,10 do
      db_query("create table t" .. i .. "(a int)")
    end
end

$ cat drop.lua

function event(thread_id)
    for i = 1,10 do
      db_query("drop table if exists t" .. i  )
    end
end
相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
监控 关系型数据库 MySQL
企业实战(8)CentOS 6.8安装Zabbix-agent 5.0监控主机性能与Mysql数据库
企业实战(8)CentOS 6.8安装Zabbix-agent 5.0监控主机性能与Mysql数据库
164 1
|
2月前
|
关系型数据库 MySQL 测试技术
《性能测试》读书笔记_数据库优化
《性能测试》读书笔记_数据库优化
30 7
|
3月前
|
关系型数据库 MySQL 测试技术
压测工具sysbench的使用
压测工具sysbench的使用
122 0
|
5月前
|
关系型数据库 MySQL 测试技术
《阿里云产品四月刊》—瑶池数据库微课堂|RDS MySQL 经济版 vs 自建 MySQL 性能压测与性价比分析
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
6月前
|
存储 大数据 测试技术
矢量数据库的性能测试与评估方法
【4月更文挑战第30天】本文探讨了矢量数据库的性能测试与评估方法,强调其在大数据和AI时代的重要性。文中介绍了负载测试、压力测试、容量测试、功能测试和稳定性测试五大评估方法,以及实施步骤,包括确定测试目标、设计用例、准备环境、执行测试和分析结果。这些方法有助于确保数据库的稳定性和高效性,推动技术发展。
|
6月前
|
关系型数据库 MySQL 测试技术
sysbench 对MySQL压测100分钟的命令
使用 `sysbench` 对 MySQL 数据库进行性能测试(压测)时,首先确保 `sysbench` 和 MySQL 数据库已经安装,并且你有一个测试数据库可以使用。下面是一个针对 MySQL 数据库进行压测的示例命令,测试时长为 100 分钟(6000 秒)。 在运行此命令之前,请确保以下内容: - 使用适当的数据库连接参数(主机、端口、用户名、密码、数据库名)。 - 根据你的需求调整测试参数(如并发数、线程数、事务数等)。 以下是一个示例命令,使用 `sysbench` 对 MySQL 数据库进行压测 100 分钟: ```shell sysbench --db-driver=m
126 0
|
关系型数据库 MySQL Java
jmeter--压测数据库
jmeter--压测数据库
|
SQL 分布式计算 测试技术
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris 迁移实践:有赞查询提速近 10 倍,OLAP 分析更实时高效!
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
|
SQL Java 关系型数据库
性能测试(17)——连接数据库
遇到此错误,请更改jar包,重新启动JMeter,大多数是因为jar包版本和MySQL版本不匹配导致,先自行查询数据库版本,navicat中新建查询输入select version() from dual; 本文章使用的版本第一次为8.0,后面试了几个5.0的,最后使用5.1.48成功连接数据库,MySQL版本是8.0.28
123 0
性能测试(17)——连接数据库
|
SQL 监控 关系型数据库
MySQL企业版工具——使用MySQL Enterprise Monitor监控MySQL数据库和主机---发表到爱可生开源社区
MySQL在企业版里的有个工具MySQL Enterprise Monitor,可以用于监控MySQL实例和主机性能。现实验如下
1189 0