使用sysbench、mysqlslap对数据库进行性能测试

sysbench

github官网:https://github.com/akopytov/sysbench。

可以对mysql、postgresql进行性能测试。

安装

  • mac:brew install sysbench
  • ubuntu:curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash sudo apt -y install sysbench

命令

  1. 创建数据库:sbtest
  2. 准备数据库:sysbench --db-driver=mysql --mysql-host=<数据库主机> --mysql-user=<数据库用户名> --mysql-password=<数据库密码> --mysql-db=<测试数据库名> --mysql-storage-engine=innodb prepare
  3. 测试:sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run
  4. 删除数据库:sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 oltp_write_only cleanup

测试结果

测试结果样例:

1
[ 61s ] thds: 10 tps: 36.18 qps: 735.67 (r/w/o: 514.57/148.74/72.36) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00

指标解读:

  • thds: 10:测试中使用的线程数,这里是 10 个线程。

  • tps: 36.18:每秒钟的事务数(Transactions Per Second)。这表示在测试期间,平均每秒执行了大约 36.18 个数据库事务。

  • qps: 735.67:每秒的查询数(Queries Per Second)。这表示在测试期间,平均每秒执行了大约 735.67 个数据库查询。

  • (r/w/o: 514.57/148.74/72.36):这是事务类型的分布统计。在括号中,r 表示读取(read)、w 表示写入(write)、o 表示其他(other)类型的事务。具体来说,测试期间平均每秒执行了大约 514.57 个读取事务、148.74 个写入事务和 72.36 个其他类型的事务。

  • lat (ms,95%): 0.00:这是查询响应时间的统计数据。lat 表示延迟(latency),(ms,95%) 表示以毫秒(ms)为单位的延迟,95% 表示在 95% 的查询中,延迟不超过多少毫秒。在这里,延迟为 0.00 毫秒,意味着大多数查询的响应时间非常快。

  • err/s: 0.00:每秒的错误数。在测试期间,平均每秒发生了 0.00 个错误。

  • reconn/s: 0.00:每秒的重新连接数。在测试期间,平均每秒发生了 0.00 次重新连接。

mysqlslap

mysql的自带工具

命令

  1. mysqlslap -uroot -pxphone123 -a ,-a是–auto-generate-sql 作用是自动生成测试SQL
  2. mysqlslap -uroot -pxphone123 -a --concurrency=100 --number-of-queries=1000 –concurrency=100 指定同时有100个客户端连接 –number-of-queries=1000 指定总的测试查询次数(并发客户端数 * 每个客户端的查询次数)
  3. mysqlslap -uroot -pxphone123 -a --concurrency=100 --number-of-queries=1000 --number-int-cols=5 --number-char-cols=20 –number-int-cols=5 指定生成5个int类型的列 –number-char-cols=20 指定生成20个char类型的列
  4. mysqlslap -uroot -pxphone123 --concurrency=10 --create-schema=test1 --query="select * from student;",可以指定自己的数据库和查询语句
  5. mysqlslap -uroot -pxphone123 --concurrency=10 --create-schema=test1 --query="select_query.sql" --delimiter=";" select_query.sql是自己写的sql文件,–delimiter是sql文件里面的分割符

参考资料