目录
一、 安装sysbench
二、准备测试表及数据
三、开始测试
1、测试综合TPS
2、只读性能 oltp_read_only
3、删除性能 oltp_delete
4、更新索引字段性能 oltp_update_index
5、更新非索引字段性能 oltp_update_non_index
6、插入性能 oltp_insert
7、写入性能 oltp_write_only
8、测试完成进行清理 CleanUp
四、测试结果 (不同线程参考)
yum安装
wget https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh
chmod +x script.rpm.sh
./script.rpm.sh
yum install -y sysbench
下载tar.gz安装
yum install -y automake libtool
wget https://github.com/akopytov/sysbench/archive/refs/tags/1.0.20.tar.gz
tar zvxf 1.0.20.tar.gz
cd sysbench-1.0.20
./autogen.sh
./configure
make -j4
make install
新建用户和数据库,也可以直接用root
CREATE USER `test`@`` IDENTIFIED BY 'test';
GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Grant Option, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `test\_db`.* TO `test`@``;
新建用户表 test_db
创建20张表,每张表插入100万数据
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
sysbench
//基于mysql的驱动去连接mysql数据库
--db-driver=mysql
//连续访问300秒
--time=300
//10个线程模拟并发访问
--threads=10
//每隔1秒输出一下压测情况
--report-interval=1
//本机
--mysql-host=127.0.0.1
//端口号:3306
--mysql-port=3306
//测试用户
--mysql-user=root
//测试密码
--mysql-password=*******
//测试数据库
--mysql-db=test_db
//模拟新建20个表
--tables=20
//100万条数据 执行oltp数据库的读写测试
--table_size=1000000 oltp_read_write
//参照这个命令的设置去构造出来我们需要的数据库里的数据
//自动创建20个测试表,每个表里创建100万条测试数据
--db-ps-mode=disable prepare
执行后如图:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run
执行后如下:
反馈解释:
thds: 10,这个意思就是有10个线程在压测
tps: 151.70,这个意思就是每秒执行了151.70个事务
qps: 2996.03,这个意思就是每秒可以执行2996.03个请求
(r/w/o: 2091.83/600.80/303.40),这个意思就是说,在每秒2996.03个请求中,有2091.83个请求是读请求,600.80个请求是写请求,303.40个请求是其他的请求,就是对QPS进行了拆解
lat (ms, 95%): 97.55,这个意思就是说,95%的请求的延迟都在 97.55毫秒以下
err/s: 0.00 reconn/s: 0.00,这两个的意思就是说,每秒有0个请求是失败的,发生了0次网络重连
测试结果:
SQL statistics:
queries performed:
read: 1420902 // 这就是说在300s的压测期间执行了1420902次的读请求
write: 405972 // 这就是说在300s的压测期间执行了405972次的写请求
other: 202986 // 这就是说在300s的压测期间执行了202986次其他请求
total: 2029860 // 这就是说在300s的压测期间执行了2029860 次总的请求
transactions: 101493 (338.28 per sec.)//共执行了101493 次事务 平均1秒执行338.28次事务
queries: 2029860 (6765.64 per sec.)//共执行2029860次请求 平均每秒6765.64 次
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
Throughput:
events/s (eps): 338.2821
time elapsed: 300.0247s
total number of events: 101493
Latency (ms):
min: 5.41 //请求中延迟最小的是5.41 ms
avg: 29.56 //请求中延迟平均的是29.56ms
max: 730.50 //请求中延迟最大的是730.50ms
95th percentile: 77.19 //95%的请求中延迟在77.19ms以内124
sum: 2999724.22
Threads fairness:
events (avg/stddev): 10149.3000/17.95
execution time (avg/stddev): 299.9724/0.01
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_only --db-ps-mode=disable run
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_delete --db-ps-mode=disable run
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_update_index --db-ps-mode=disable run
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_update_non_index --db-ps-mode=disable run
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_insert --db-ps-mode=disable run
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_write_only --db-ps-mode=disable run
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable cleanup
不同线程结果如下(1,16,32.....线程数)
总结:当前mysql测试环境,在并发线程数达到160左右时,TPS约900/s左右,QPS约1.8万/s左右,95%事务平均延迟达到300ms,
再增加并发数据后,QPS变化不大,但延迟时间明显加长。测试过程整体CPU利用率较高,在达到最大TPS及QPS时此时CPU利用率达到93%以上。