1、安装压测工具
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash 
yum -y install sysbench 
2、执行压测命令
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=192.168.115.101 --mysql-port=3306 --mysql-user=test_user --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
命令解释:
- --db-driver=mysql:这个很简单,就是说他基于mysql的驱动去连接mysql数据库,你要是oracle,或者sqlserver,那 自然就是其他的数据库的驱动了
- --time=300:这个就是说连续访问300秒
- --threads=10:这个就是说用10个线程模拟并发访问
- --report-interval=1:这个就是说每隔1秒输出一下压测情况
- --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user:这一大串,就 是说连接到哪台机器的哪个端口上的MySQL库,他的用户名和密码是什么
- --mysql-db=test_db --tables=20 --table_size=1000000:这一串的意思,就是说在test_db这个库里,构造20个测试 表,每个测试表里构造100万条测试数据,测试表的名字会是类似于sbtest1,sbtest2这个样子的
- oltp_read_write:这个就是说,执行oltp数据库的读写测试
- --db-ps-mode=disable:这个就是禁止ps模式 最后有一个prepare,意思是参照这个命令的设置去构造出来我们需要的数据库里的数据,他会自动创建20个测试表,每个表 里创建100万条测试数据,所以这个工具是非常的方便的。
测试数据库的综合读写TPS,使用的是oltp_read_write模式(大家看命令中最后不是prepare,是run了,就是运行压测):
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=192.168.115.101 --mysql-port=3306 --mysql-user=test_user --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run
对测试输出日志进行解释[ 300s ] thds: 10 tps: 291.54 qps: 5792.65 (r/w/o: 4051.45/1158.13/583.07) lat (ms,95%): 77.19 err/s: 0.00 reconn/s: 0.00
[300s] ,整个压测过程第三百秒
thds:10 , 这个意思就是有10个线程在压测
tps:291.54, 这个意思就是每秒执行了291.54 个事务
qps: 5792.65 ,这个意思就是每秒可以执行5792.65个请
(r/w/o: 4051.45/1158.13/583.07) ,这个意思就是说,在每秒5792.65个请求中,有4051.45个请求是读请求,1158.13个请 求是写请求,583.07个请求是其他的请求,就是对QPS进行了拆解
lat (ms,95%): 77.19 ,这个意思就是说,95%的请求的延迟都在77.19毫秒以下
err/s: 0.00 reconn/s: 0.00 这两个的意思就是说,每秒有0个请求是失败的,发生了0次网络重连
这个压测结果会根据每个人的机器的性能不同有很大的差距(真机 i5 9300H 1T SSD  16GB RAM,当前压测虚拟机配置 4核4GB RAM 40GB ROM配置),你要是机器性能特别高,那你可以开很多的并发线程去压测,比 如100个线程,此时可能会发现数据库每秒的TPS有上千个,如果你的机器性能很低,可能压测出来你的TPS才二三十个,QPS 才几百个,这都是有可能的。
另外在完成压测之后,最后会显示一个总的压测报告,我把解释写在下面了:
SQL statistics:
    queries performed:
        read:                            1181852           // 这就是说在300s的压测期间执行了118万多次的读请求 
        write:                           337672             // 这是说在压测期间执行了33万多次的写请求
        other:                           168836            // 这是说在压测期间执行了16万多次的其他请求 
        total:                           1688360           // 这是说一共执行了168万多次的请求
    transactions:                        84418  (281.37 per sec.)          // 这是说一共执行了8.4万多个事务,每秒执行281.37多个事务
    queries:                             1688360 (5627.36 per sec.)       // 这是说一共执行了168万多次的请求,每秒执行5600+请求 
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)
//下面就是说,一共执行了300s的压测,执行了8.4万+的事务
General statistics:
    total time:                          300.0253s
    total number of events:              84418
Latency (ms):
         min:                                    6.90                        // 请求中延迟最小的是6.9ms 
         avg:                                   35.54                      // 请求中延迟平均是35.54ms
         max:                                  287.21                    //请求中延迟最大是287.21ms
         95th percentile:                       77.19               //95%的请求延迟都在77.19ms以内
         sum:                              2999805.01                
Threads fairness:
    events (avg/stddev):           8441.8000/46.41
    execution time (avg/stddev):   299.9805/0.01
测试数据库的只读性能,使用的是oltp_read_only模式(大家看命令中的oltp_read_write已经变为oltp_read_only了):
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=192.168.115.101 --mysql-port=3306 --mysql-user=test_user --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_only --db-ps-mode=disable run
测试数据库的删除性能,使用的是oltp_delete模式:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=192.168.115.101 --mysql-port=3306 --mysql-user=test_user --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_delete --db-ps-mode=disable run
测试数据库的更新索引字段的性能,使用的是oltp_update_index模式:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=192.168.115.101 --mysql-port=3306 --mysql-user=test_user --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_update_index --db-ps-mode=disable run
测试数据库的更新非索引字段的性能,使用的是oltp_update_non_index模式
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=192.168.115.101 --mysql-port=3306 --mysql-user=test_user --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_update_non_index --db-ps-mode=disable run
测试数据库的插入性能,使用的是oltp_insert模式
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=192.168.115.101 --mysql-port=3306 --mysql-user=test_user --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_insert --db-ps-mode=disable run
测试数据库的写入性能,使用的是oltp_write_only模式:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=192.168.115.101 --mysql-port=3306 --mysql-user=test_user --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_write_only --db-ps-mode=disable run

 
  
  
  
 
 
  
 
 
 