学习笔记:MySQL基准测试之Benchmark Suite

     MySQL Benchmark Suite是除了“mysqlslap”命令行工具(http://blog.csdn.net/sweeper_freedoman/article/details/73556910)以外,MySQL安装自带的另一套功能更加强大的基准测试套件(https://dev.mysql.com/doc/refman/5.6/en/mysql-benchmarks.html)。不过5.7版本已经拿掉了,学习用就只能参考5.6版本的文档,在我本地Ubuntu Linux安装的是最新版本的MySQL,所以也只能下载一个5.6的源码包,然后把该组件单独移进去,其目录为“sql-bench”(https://dev.mysql.com/doc/internals/en/sql-bench-directory.html)。MySQL基准测试套件是用Perl语言写的,所以要运行它还得额外安装一些Perl支持(https://dev.mysql.com/doc/refman/5.6/en/perl-installation.html)。进入sql-bench目录,主要看到的是一些Shell脚本,其用来调用Perl程序进行基准测试任务。

     如果MySQL安装没有该套件,如现在的新版本,首先是获取一套组件,移入自己的MySQL安装目录。

wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.36.tar.gz
tar -xz -f mysql-5.6.36.tar.gz
cp -rf mysql-5.6.36/sql-bench/ /usr/share/mysql/sql-bench/
cd /usr/share/mysql/sql-bench/ ; ls

     安装Perl支持,如果系统没有安装Perl需要先安装Perl再执行(Ubuntu应该是自带的)。

perl -MCPAN -e shell    /× 然后回车即可 ×/
install DBI
install DBD::mysql

     执行一个INSERT测试小栗子吧,好像都是很费时间的,尤其是全测。可以先看看目录下的README文件,介绍了使用方法。

perl test-insert.sh --server=mysql --user=root --password=520 --database=benchmarker --log --fast

     竟然报错了,一脸懵逼啊。

Can't locate /usr/share/mysql/sql-bench/bench-init.pl in @INC
……
……
Can't locate /usr/share/mysql/sql-bench/server-cfg in @INC
……
……

     vim test-insert.sh,去文件看看报错那些行写了什么,一脸懵逼,好像是文件名问题,改一下试试看。

cp bench-init.pl.sh bench-init.pl
cp server-cfg.sh server-cfg

     改完以后竟然好了,开始进行基准测试任务了。我的神船笔记本的风扇开始嗡嗡叫了,也不断有打印信息出来。

  • --database选项指定进行测试的schema,老版本默认是test自带库,新版本的MySQL安装已经移除了该库,因此需要指定一个。
  • --log用于监控测试进度。
  • --fast允许测试使用非标准SQL以加快测试。

     这个时候可以去睡觉或者做其他事情了。测试结果比较长和详细,但输出格式基本上是一致的,这里就截取本次实例的前一部分说明一下了。

Testing server 'MySQL 5.7.18 0ubuntu0.16.04.1' at 2017-06-22  5:50:11

Testing the speed of inserting data into 1 table and do some selects on it.
The tests are done with a table that has 100000 rows.

Generating random keys
Creating tables
Inserting 100000 multiple-value rows in order
Inserting 100000 multiple-value rows in reverse order
Inserting 100000 multiple-value rows in random order
Time for insert (300000): 11 wallclock secs ( 0.32 usr  0.04 sys +  0.00 cusr  0.00 csys =  0.36 CPU)

Time for book-keeping (1): 12 wallclock secs ( 0.00 usr  0.00 sys +  0.00 cusr  0.00 csys =  0.00 CPU)

Testing insert of duplicates
Time for insert_duplicates (100000): 11 wallclock secs ( 0.62 usr  1.75 sys +  0.00 cusr  0.00 csys =  2.37 CPU)

Test of prepared+execute/once prepared many execute selects
Time for prepared_select (100000): 19 wallclock secs ( 0.48 usr  5.35 sys +  0.00 cusr  0.00 csys =  5.83 CPU)
Time for once_prepared_select (100000): 14 wallclock secs ( 0.81 usr  2.25 sys +  0.00 cusr  0.00 csys =  3.06 CPU)
Retrieving data from the table
     第一行输出的是当前测试MySQL服务器版本和测试时间。二三行是对本次测试job的说明,即对1张10w行数据的表读写速度的测试,该表是基准测试时自己创建的,测试期间可以去自己指定的测试库中看到这张表(`benchmark×`),也可以监控processlist看看测试在搞什么鬼。接下来几行就是该表的创建说明,可以看到10w行数据分别用了顺序写、倒序写和随机写三种方式进行了插入测试。

     插入这30w行数据一共用了11秒,其中包含执行测试脚本的0.36秒额外消耗(usr、sys、cusr、csys),所以MySQL的实际性能应该是11 - 0.36 = 10.64秒。后面的输出基本上维持这种格式,是一些更细项目的测试结果。MySQL Benchmark Suit的功能覆盖纯数据库层级的各种工作场景,连接访问、DDL、DML、DQL、事务、大数据表格以及数据库整体运行等,可以作为数据库应用基准测试的选择。

你可能感兴趣的:(#,MySQL,/,MariaDB)