我是用mac本地测试的,linux环境大致相同。数据库的性能压测,不单单一味追求qps/tps,还要看CPU和内存使用情况。

QPS/TPS压测工具sysbench

安装sysbench

使用brew命令安装sysbench

brew install sysbench

查看sysbench安装版本,确保安装OK

sysbench --version

预执行命令

sysbench --db-driver=mysql --time=10 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare

执行压测命令

sysbench --db-driver=mysql --time=10 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run

可在控制台上看到如下:

[ 1s ] thds: 10 tps: 378.06 qps: 7664.93 (r/w/o: 5379.62/1031.43/1253.88) lat (ms,95%): 44.98 err/s: 0.00 reconn/s: 0.00
[ 2s ] thds: 10 tps: 391.24 qps: 7804.75 (r/w/o: 5464.33/1063.65/1276.78) lat (ms,95%): 45.79 err/s: 0.00 reconn/s: 0.00
[ 3s ] thds: 10 tps: 410.97 qps: 8264.45 (r/w/o: 5788.61/1110.93/1364.91) lat (ms,95%): 46.63 err/s: 0.00 reconn/s: 0.00
[ 4s ] thds: 10 tps: 397.00 qps: 7939.07 (r/w/o: 5560.05/1089.01/1290.01) lat (ms,95%): 52.89 err/s: 0.00 reconn/s: 0.00

thds: 10 表示有10个线程在压测
tps: 378.06 表示每秒执行了378.06个事物
qps: 7664.93 表示每秒执行了7664.93个请求
r/w/o: 5379.62/1031.43/1253.88 表示在7664.93个请求当中,有5379.62个读请求,1031.43个写请求,其他请求1253.88个
lat (ms,95%): 44.98 表示95%的请求延时,都在44.98毫秒以下
err/s: 0.00 reconn/s: 0.00 表示每秒有0个失败请求,0个重连请求。

命令参数解释

–db-driver=mysql: 表示连接的哪个类型的数据库;
–time=300: 表示连续访问300s;
–threads=10: 用10个线程模拟并发访问;
–report-interval=1: 每隔1秒输出压测情况;
–mysql-db=test --tables=20 --table_size=1000000: 表示在test这个数据库里,生成20张表,每个测试表构造100万条测试数据,测试表名字类似于sbtest,sbtest2;
oltp_read_write: 执行oltp数据库的读写测试;
oltp_read_only: 测试数据库的只读性能;
oltp_delete: 测试数据库;
–db-ps-mode=disable: 禁止ps模式。

CPU和内存负载监测工具

在进行qps/tps压测时,执行top命令,可以看到:

mysql c 性能测试 mysql写性能测试_mysql c 性能测试


此时看到CPU使用率是在61%左右,这个是正常的,并且还可以增加线程进行压测。物理内存还剩余8118M。

一般来说,CPU和内存使用率,应该尽量控制在80%以内。

磁盘io监测

linux环境执行: dstat -d,可以看到存储的IO吞吐量,如果每秒吞吐量达到上百MB,说明已经到达极限。
linux环境执行:dstat -r,可以看到随机磁盘读写频率,如果每秒达到了两三百次,说明已经到达极限。

网卡流量监测

linux环境执行: dstat -n,可以看到网卡每秒接收和发送出去的流量,如果机器使用的是千兆网卡,那么每秒钟网卡的总流量在100M左右,甚至更低。

总结

想对数据库进行性能压测,除了看qps/tps,还得看CPU使用情况,磁盘IO使用情况,内存使用情况,网络使用情况。