首先用到的肯定是BENCHMARK()函数了,它可以测试特定操作的执行速度.参数是执行的次数和表达式.该函数可以方便的测试某些特定操作的性能。比如md5函数比sha1快
mysql> set @input := 'Im leo';
Query OK, 0 rows affected (0.00 sec)
mysql> select benchmark(10000000, md5(@input));
+----------------------------------+
| benchmark(10000000, md5(@input)) |
+----------------------------------+
| 0 |
+----------------------------------+
1 row in set (2.88 sec)
mysql> select benchmark(10000000, sha1(@input));
+-----------------------------------+
| benchmark(10000000, sha1(@input)) |
+-----------------------------------+
| 0 |
+-----------------------------------+
1 row in set (4.05 sec)
执行
./run-all-tests --server=mysql --cmp=mysql,pg,solid --user=root --password=password--log
第一执行,
Can't locate DBI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./run-all-tests line 37.
一看就知道缺少perl的DBI,于是 yum search perl-DBI
第二次执行
Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 56) line 3.
百度下,这次执行 perl-DBD-MySQL.x86_64
第三次执行
Got error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)' when connecting to DBI:mysql:database=test;host=localhost;mysql_read_default_file=/alidata/server/mysql/my.cnf with user: 'root' password: 'xxxxx'
在/var/lib/下建个mysql目录 cp -s就行。
第四次执行,这次没问题。但悲剧了,书上介绍运行全部测试要一个多小时,我没信......还是先抽根烟,等等。
Time for select_range_prefix (20000:43500): 3 wallclock secs ( 0.96 usr 0.12 sys + 0.00 cusr 0.00 csys = 1.08 CPU)
Time for select_range_key2 (20000:43500): 3 wallclock secs ( 0.97 usr 0.13 sys + 0.00 cusr 0.00 csys = 1.10 CPU)
Time for select_group (101): 6 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU)
enerating random keys
Creating tables
Inserting 100000 rows in order
Inserting 100000 rows in reverse order
Inserting 100000 rows in random order
Time for insert (300000): 1372 wallclock secs ( 7.23 usr 3.42 sys + 0.00 cusr 0.00 csys = 10.65 CPU)
Testing insert of duplicates
Time for insert_duplicates (100000): 12 wallclock secs ( 2.66 usr 1.18 sys + 0.00 cusr 0.00 csys = 3.84 CPU)
展示一部分测试结果
sysbench不仅可以测试数据库的性能还可以测试运行数据库服务器的性能
测试CPU
/usr/local/bin/sysbench --test=cpu --cpu-max-prime=20000 run
Test execution summary:
total time: 37.4243s
total number of events: 10000
total time taken by event execution: 37.4222
per-request statistics:
min: 3.69ms
avg: 3.74ms
max: 10.87ms
approx. 95 percentile: 3.79ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 37.4222/0.00
sysbench的文件I/O基准测试
文件I/O基准测试可以测试系统在不同I/O下的性能,这对于比较不同硬盘驱动器,不同的RAID卡,不同的RAID模式都很有帮助
首先创建数据集
/usr/local/bin/sysbench --test=fileio --file-total-size=200M prepare
sysbench 0.4.10: multi-threaded system evaluation benchmark
128 files, 1600Kb each, 200Mb total
第二步就是运行阶段
运行
/usr/local/bin/sysbench --test=fileio --file-total-size=200M --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
测试结果
Operations performed: 202543 Read, 135028 Write, 432000 Other = 769571 Total
Read 3.0906Gb Written 2.0604Gb Total transferred 5.1509Gb (17.58Mb/sec)
1125.15 Requests/sec executed
Test execution summary:
total time: 300.0237s
total number of events: 337571
total time taken by event execution: 68.7907
per-request statistics:
min: 0.00ms
avg: 0.20ms
max: 16.85ms
approx. 95 percentile: 1.55ms
Threads fairness:
events (avg/stddev): 337571.0000/0.00
execution time (avg/stddev): 68.7907/0.00
测试结果中包含了每秒请求数(1125.15),吞吐量(17.58Mb)请求大大约95%的时间分布
最后一步清楚数据
sysbench的OLTP基准测试
OLTP的基准测试模拟一个简单的事物处理系统的工作负载
/usr/local/bin/sysbench --test=oltp --oltp-table-name=sysbench --oltp-table-size=1000000 --mysql-db=leo --mysql-user=root --mysql-password=xxxxx --db-driver=innodb prepare
然后运行
/usr/local/bin/sysbench --test=oltp --oltp-table-name=sysbench --oltp-table-size=100000 --mysql-db=leo --mysql-user=root --mysql-password=xxxx --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=2 --db-driver=innodb run
OLTP test statistics:
queries performed:
read: 447482
write: 0
other: 63926
total: 511408
transactions: 31963 (532.71 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 447482 (7457.89 per sec.)
other operations: 63926 (1065.41 per sec.)
Test execution summary:
total time: 60.0011s
total number of events: 31963
total time taken by event execution: 119.8510
per-request statistics:
min: 1.77ms
avg: 3.75ms
max: 25.34ms
approx. 95 percentile: 4.04ms
Threads fairness:
events (avg/stddev): 15981.5000/126.50
execution time (avg/stddev): 59.9255/0.00
参考书籍:高性能MYSQL