当前位置:   article > 正文

Sysbench测试工具详解_yum sysbench

yum sysbench

Sysbench

Sysbench 是一个常用的多线程性能测试工具,可用于评估数据库系统和硬件的性能。它支持多种基准测试,包括 OLTP (Online Transaction Processing)、CPU、文件 I/O、内存等。

安装

去官方网站下mysql的repo文件
https://dev.mysql.com/downloads/repo/yum/

[root@localhost ~]# rpm -ivh mysql80-community-release-el7-8.noarch.rpm 
  • 1
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo       CentOS-Media.repo          mysql-community-debuginfo.repo
CentOS-CR.repo         CentOS-Sources.repo        mysql-community.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo          mysql-community-source.repo
CentOS-fasttrack.repo  CentOS-x86_64-kernel.repo

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

出现问题:

即使下载了官网的repo源,也不行

        again or use --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>
        or
            subscription-manager repos --disable=<repoid>

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot find a valid baseurl for repo: base/7/x86_64

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

解决方法:

  1. 尝试其他镜像源:如果DNS配置正确,但 mirrorlist.centos.org 仍然无法解析,可以尝试使用其他镜像源。在 /etc/yum.repos.d/ 目录下,有一个名为 CentOS-Base.repo 的文件,尝试编辑这个文件,将 mirrorlist 相关的行注释掉,然后启用 baseurl 行,并使用一个可用的镜像URL,例如:
rubyCopy code
baseurl=http://mirror.centos.org/centos/7/os/x86_64/
  • 1
  • 2

注意:这只是一个示例URL,您可以根据需要使用其他可用的镜像源。

  1. 清除YUM缓存:运行以下命令可以尝试清除YUM缓存并重新生成:
cssCopy code
yum clean all
  • 1
  • 2

编译安装下载

yum -y install mysql-community-devel
yum -y install automake  libtool
wget https://github.com/akopytov/sysbench/archive/1.0.15.tar.gz
tar xf 1.0.15.tar.gz
cd sysbench-1.0.15
./autogen.sh
./configure
make -j
make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

建议实验epel下载sysbench(yum安装

yum install epel-release -y
yum install sysbench -y
  • 1
  • 2

准备测试数据

首先创建sysbench所需数据库sbtest(这是sysbench默认使用的库名,必须创建测试库)。

mysqladmin -h127.0.0.1 -uroot -p123456 -P3306 create sbtest;
  • 1

这是yum安装对应的

sysbench --mysql-host=192.168.2.25 --mysql-port=7002 --mysql-user=write --mysql-password='123456' /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=10000 prepare
  • 1

这是编译安装对应的

sysbench --mysql-host=192.168.2.25 --mysql-port=7002 --mysql-user=write --mysql-password='123456' /root/sysbench-1.0.15/src/lua
/oltp_common.lua  --tables=10 --table_size=10000 prepare
  • 1
  • 2

使用yum安装的路径进行测试

[root@localhost bin]# sysbench --mysql-host=192.168.2.25 --mysql-port=7002 --mysql-user=write --mysql-password='123456' /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=10000 prepare
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Creating table 'sbtest1'...
Inserting 10000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...
Creating table 'sbtest2'...
Inserting 10000 records into 'sbtest2'
Creating a secondary index on 'sbtest2'...
Creating table 'sbtest3'...
Inserting 10000 records into 'sbtest3'
Creating a secondary index on 'sbtest3'...
Creating table 'sbtest4'...
Inserting 10000 records into 'sbtest4'
Creating a secondary index on 'sbtest4'...
Creating table 'sbtest5'...
Inserting 10000 records into 'sbtest5'
Creating a secondary index on 'sbtest5'...
Creating table 'sbtest6'...
Inserting 10000 records into 'sbtest6'
Creating a secondary index on 'sbtest6'...
Creating table 'sbtest7'...
Inserting 10000 records into 'sbtest7'
Creating a secondary index on 'sbtest7'...
Creating table 'sbtest8'...
Inserting 10000 records into 'sbtest8'
Creating a secondary index on 'sbtest8'...
Creating table 'sbtest9'...
Inserting 10000 records into 'sbtest9'
Creating a secondary index on 'sbtest9'...
Creating table 'sbtest10'...
Inserting 10000 records into 'sbtest10'
Creating a secondary index on 'sbtest10'...

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
root@sbtest 11:32 mysql>show tables;
+------------------+
| Tables_in_sbtest |
+------------------+
| sbtest1          |
| sbtest10         |
| sbtest2          |
| sbtest3          |
| sbtest4          |
| sbtest5          |
| sbtest6          |
| sbtest7          |
| sbtest8          |
| sbtest9          |
+------------------+
10 rows in set (0.00 sec)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

测试结果

基准测试命令: 使用 Sysbench 运行 MySQL 基准测试时,常见的命令格式如下:

cssCopy code
sysbench [options] --threads=[num_threads] --mysql-host=[mysql_host] --mysql-port=[mysql_port] --mysql-user=[mysql_user] --mysql-password=[mysql_password] --mysql-db=[mysql_database] [test_name]
  • 1
  • 2
  • [options]:可选的 Sysbench 选项,用于配置测试的参数,例如运行时间、请求率等。
  • --threads=[num_threads]:指定并发线程数,即同时运行的线程数。
  • --mysql-host=[mysql_host]:指定 MySQL 服务器的主机名或 IP 地址。
  • --mysql-port=[mysql_port]:指定 MySQL 服务器的端口号。
  • --mysql-user=[mysql_user]:指定连接 MySQL 服务器所使用的用户名。
  • --mysql-password=[mysql_password]:指定连接 MySQL 服务器所使用的密码。
  • --mysql-db=[mysql_database]:指定要进行测试的数据库名称。
  • [test_name]:指定要运行的具体测试,例如 OLTP、CPU、文件 I/O 等。
sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=192.168.2.25 --mysql-port=7001 --mysql-user=write --mysql-password=123456 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table-size=100000 run
  • 1
[root@localhost sysbench]# sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=192.168.2.25 --mysql-port=7001 --mysql-user=write --mysql-password=123456 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table-size=100000 run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Running the test with following options:
Number of threads: 4
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 5s ] thds: 4 tps: 191.49 qps: 3850.57 (r/w/o: 2698.03/201.67/950.86) lat (ms,95%): 31.37 err/s: 0.60 reconn/s: 0.00
[ 10s ] thds: 4 tps: 209.08 qps: 4181.87 (r/w/o: 2927.17/242.93/1011.77) lat (ms,95%): 26.68 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 4 tps: 198.05 qps: 3960.59 (r/w/o: 2772.09/254.12/934.37) lat (ms,95%): 30.81 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 4 tps: 192.85 qps: 3858.26 (r/w/o: 2701.95/262.43/893.88) lat (ms,95%): 33.72 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            55510
        write:                           4812
        other:                           18972
        total:                           79294
    transactions:                        3962   (197.75 per sec.)
    queries:                             79294  (3957.64 per sec.)
    ignored errors:                      3      (0.15 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          20.0346s
    total number of events:              3962

Latency (ms):
         min:                                    9.20
         avg:                                   20.20
         max:                                 1010.51
         95th percentile:                       30.81
         sum:                                80041.23

Threads fairness:
    events (avg/stddev):           990.5000/34.51
    execution time (avg/stddev):   20.0103/0.01


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

根据sysbench的输出,这是一次OLTP读写测试的结果。让我对输出进行解析,以便您更好地了解测试的性能表现:

  1. 系统信息:
  • sysbench版本:1.0.17
  • 使用的LuaJIT版本:2.0.4
  1. 测试参数:
  • 线程数:4
  • 报告中间结果的间隔:每5秒报告一次
  • 使用的MySQL主机:192.168.2.25
  • 使用的MySQL端口:7001
  • 使用的MySQL用户:write
  • 使用的MySQL密码:123456
  • 测试脚本路径:/usr/share/sysbench/oltp_read_write.lua
  • 使用的表数:10
  • 每个表的大小:100,000行
  1. 测试过程:
  • 初始化随机数生成器。
  • 初始化工作线程。
  • 启动4个线程进行测试。
  1. 测试结果:
    在测试进行了20秒后,以下是测试的结果统计:
  • 在第5秒时,每秒处理事务数(tps)约为191.49,每秒查询数(qps)约为3850.57。
  • 在第10秒时,tps约为209.08,qps约为4181.87。
  • 在第15秒时,tps约为198.05,qps约为3960.59。
  • 在第20秒时,tps约为192.85,qps约为3858.26。
  1. SQL统计:
  • 读取查询数量:55510
  • 写入查询数量:4812
  • 其他查询数量:18972
  • 总查询数量:79294
  • 完成的事务数量:3962 (平均每秒197.75个事务)
  • 总查询数:79294 (平均每秒3957.64个查询)
  • 忽略的错误数:3 (平均每秒0.15个错误)
  • 重新连接数:0 (平均每秒0.00个重新连接)
  1. 总体统计:
  • 总耗时:20.0346秒
  • 总事件数:3962
  1. 延迟(以毫秒为单位):
  • 最小延迟:9.20ms
  • 平均延迟:20.20ms
  • 最大延迟:1010.51ms
  • 第95百分位延迟:30.81ms
  • 总延迟:80041.23ms
  1. 线程公平性:
  • 事件数量(平均/标准差):990.5000/34.51
  • 执行时间(平均/标准差):20.0103/0.01

解析结果表明,测试运行了20秒,使用4个线程,在给定的配置下,每秒处理的事务数在190到210之间浮动。请注意,性能结果还受到MySQL服务器和系统硬件等因素的影响,因此,如果要获得更精确的性能指标,可能需要在多个不同配置下运行测试,并进行更详细的分析。

清除建立的测试表

sysbench --mysql-host=192.168.2.25 \
         --mysql-port=7002 \
         --mysql-user=write \
         --mysql-password='123456' \
         /usr/share/sysbench/oltp_common.lua \
         --tables=10 \
         cleanup

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

效果

| 59741 | 50095 | 94054036382-30666175964-93983866440-82198879802-79178088086-626860264174919 |
| 60074 | 50328 | 71234724885-22289811426-29663594026-43624298282-65444509716-502104939320899 |
| 63215 | 49852 | 69814563728-47986046934-75862954779-06559782038-51838414177-222236416566077 |
| 65881 | 49778 | 74995573852-31949172824-75320100772-28469702486-62705248269-933810682682159 |
+-------+-------+-----------------------------------------------------------------------------+
10177 rows in set (0.13 sec)

root@sbtest 11:42 mysql>select * from sbtest1;
ERROR 1146 (42S02): Table 'sbtest.sbtest1' doesn't exist

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

删除成功了

当然也可以在master服务器上手动删除

出现问题,删除后如果我新建再次会出现数据库存在的问题

[root@localhost sysbench]# mysqladmin -h127.0.0.1 -uroot -p123456 -P3306 create sbtest;
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'sbtest'; database exists'

  • 1
  • 2
  • 3
  • 4

原因:

有其他MySQL连接正在使用sbtest数据库,导致你无法删除。可以用show processlist;命令查看是否有进程在占用sbtest数据库。

*************************** 4. row ***************************
     Id: 12
   User: write
   Host: 192.168.2.25:35132
     db: sbtest
Command: Sleep
   Time: 1704
  State: 
   Info: NULL
4 rows in set (0.00 sec)

ERROR: 
No query specified

root@(none) 11:57 mysql>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

解决:

最简单的方法是:在master服务器上重新创建一个sbtest数据库

  • 识别占用连接的线程id,然后使用kill命令终止该连接线程:
kill [线程id];
  • 1
  • 如果不确定是哪个连接占用了sbtest数据库,可以直接杀死所有连接线程:
kill connection for database sbtest;
  • 1
  • 使用disconnect命令 disconnect指定的线程:
disconnect [线程id];
  • 1
  • 修改该连接的用户权限,禁用其访问sbtest数据库的权限:
revoke all privileges on sbtest.* from [用户名]@[主机名]; 
  • 1
  • 设置sbtest数据库为只读模式,禁止写入操作:
flush tables with read lock;
  • 1
  • 直接重启MySQL服务,关闭所有连接线程。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/373737
推荐阅读
相关标签
  

闽ICP备14008679号