一、服务器准备

操作系统:CentOS 7
CPU:8核
内存:32GB
硬盘:500GB
数据库:MySQL 5.7

二、安装sysbench

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

查看安装结果:sysbench --version

三、数据库准备

-- 创建数据库
CREATE DATABASE sbtest;
-- 创建用户
create user 'sbtest'@'%' identified by 'Sbtest123456#';
GRANT ALL PRIVILEGES ON *.* TO sbtest@'%' IDENTIFIED BY 'Sbtest123456#' WITH GRANT OPTION;
FLUSH PRIVILEGES ;

四、使用sysbench进行基准测试

1.基于sysbench构造测试表和准备数据

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=Sbtest123456# --mysql-db=sbtest --tables=20 --table-size=1000000 oltp_read_write --db-ps-mode=disable prepare

参数说明:
(1)–db-driver=mysql : 表示基于mysql的驱动连接mysql数据库
(2)–time=300:表示连续访问300秒
(3) --threads=10:表示用10个线程模拟并发访问
(4) --report-interval=1:表示每隔1秒输出报告
(5)–mysql-host=127.0.0.1 --mysql-port=3306 : 表示数据库的IP和端口
(6)–mysql-user=sbtest --mysql-password=Sbtest123456# :表示数据库用户名和密码。
(7)–mysql-db=sbtest: 表示数据库实例
(8) --tables=20:表示创建20个表,默认表名为数据库实例名XX,例如sbtest1
(9)–table-size=1000000:表示每个表插入1000000行数据
(10) oltp_read_write:表示执行oltp数据库的读写测试
(11)–db-ps-mode=disable :表示禁止PS模式
(12)prepare:表示准备数据

测试结果:
sysbench01

2.测试MySQL的读写TPS

sysbench --db-driver=mysql --time=100 --threads=50 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=Sbtest123456# --mysql-db=sbtest --tables=20 --table-size=1000000 oltp_read_write --db-ps-mode=disable run

测试结果:
sysbench02
[ 10s ] thds: 10 tps: 449.00 qps: 8990.00 (r/w/o: 6291.00/1597.00/1102.00) lat (ms,95%): 86.00 err/s: 0.00 reconn/s: 0.00
压测统计报告说明:
(1) thds: 10 表示10个线程在压测
(2)tps: 248.00 表示TPS为248每秒
(3)qps: 4957.99表示每秒可以执行4957.99个请求
(4)r/w/o: 3476.99/985.00/496.00 表示每秒有3476.99个读请求,985.00个写请求,496.00个其他请求。
(5)lat (ms,95%): 101.13 表示95%的请求延迟在101.13毫秒以下
(6) err/s: 0.00 reconn/s: 0.00 表示每秒有0个请求是失败的,发生了0次网络重连

SQL statistics:
    queries performed:
        read:                            64736  // 执行了64736次读请求
        write:                           16276   // 执行了16276次写请求
        other:                           11468   // 执行了11468次其他请求
        total:                           92480    //  总共执行了92480次请求
    transactions:                        4624   (460.41 per sec.)   // 总共执行了4624次事务,TPS为460.41
    queries:                             92480  (9208.17 per sec.)  // 总共执行了4624次请求,QPS为:9208.17
    ignored errors:                      0      (0.00 per sec.) // 0次错误
    reconnects:                          0      (0.00 per sec.)  // 0次重连

General statistics:
    total time:                          10.0415s   // 总执行时间10.0415秒
    total number of events:              4624 // 总事件4624个

Latency (ms):
         min:                                    3.38               // 最低时延3.38秒
         avg:                                   21.67              // 平均时延3.38秒
         max:                                  293.01            // 最高时延 293.01秒
         95th percentile:                       86.00         // 95%的时延 86.00秒以下
         sum:                               100215.56          // 总时延100215.56秒

Threads fairness:
    events (avg/stddev):           462.4000/14.64      
    execution time (avg/stddev):   10.0216/0.01

3.测试MySQL的只读性能

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=Sbtest123456# --mysql-db=sbtest --tables=20 --table-size=1000000 oltp_read_only --db-ps-mode=disable run

4.测试MySQL的删除性能

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=Sbtest123456# --mysql-db=sbtest --tables=20 --table-size=1000000 oltp_delete --db-ps-mode=disable run

5.测试MySQL的更新索引字段性能

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=Sbtest123456# --mysql-db=sbtest --tables=20 --table-size=1000000 oltp_update_index --db-ps-mode=disable run

6.测试MySQL的更新非索引字段性能

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=Sbtest123456# --mysql-db=sbtest --tables=20 --table-size=1000000 oltp_update_non_index --db-ps-mode=disable run

7.测试MySQL的插入性能

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=Sbtest123456# --mysql-db=sbtest --tables=20 --table-size=1000000 oltp_insert --db-ps-mode=disable run

8.测试MySQL的写入性能

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sbtest --mysql-password=Sbtest123456# --mysql-db=sbtest --tables=20 --table-size=1000000 oltp_write_only --db-ps-mode=disable run

五、监控服务器性能

我们在通过sysbench压测时,可以通过–threads=xxx来调整线程数,同时监控服务器性能。

1、查看CPU负载

通过top命令,观察CPU负载

top - 20:38:22 up 37 days, 23:52, 3 users, load average: 2.00, 7.00, 4.09

在load average中,可以看到CPU负载情况,如果当前服务器是8核,那么在压测的过程中,load average不要超过8。

2、查看内存负载

同样通过top命令,可以观察内存负载

KiB Mem : 32780160 total, 241868 free, 28429752 used, 4108540 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2146104 avail Mem

一般压测过程中,内存的消耗不要超过总内存的80%。

3、观察磁盘IO情况

通过dstat -d命令,查看磁盘IO情况,如果dstat命令不存在,则需要先按照dstat,可以通过yum install -y dstat进行安装。

[root@develop ~]# dstat -d
-dsk/total-
 read  writ
  28k  153k
   0    12k
   0    12k
8192B  864k

一般机械硬盘的磁盘IO可以达到几百兆,这个要具体硬盘性能。固态硬盘的磁盘IO可以达到几GB。

4、观察IOPS

通过dstat -r命令,可以查看磁盘IOPS,也就是每秒进行多少次读IO、多少次写IO。

[root@develop ~]# dstat -r
--io/total-
 read  writ
0.58  4.63 
   0  5.00 
   0  3.00 
   0  3.00 

一般机械硬盘的IOPS可以达到每秒几百,固态硬盘可以达到几千。

5、观察网卡压力

通过dstat -n命令,可以查看网卡流量。

[root@develop ~]# dstat -n
-net/total-
 recv  send
   0     0 
  49k   33k
  70k   53k
  59k   42k
  43k   27k
  48k   32k
  62k   47k

一般如果是千兆网卡,则读写流量可以达到128MB,这个取决于网卡带宽。

打赏
支付宝 微信
上一篇 下一篇