先说下,mysql进行基准测试的工具及安装、基本使用。
mysql的基准测试工具有很多,如mysqlslap、sysbench、Super Smack等;我们使用sysbench进行测试之旅。
sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL;
1、安装sysbench
# 安装
>>> tar -zxvf sysbench-0.4.12.tar.gz
>>> cd sysbench-0.4.12
>>> ./autogen.sh
>>> vim aclocal.m4
LIBTOOL='$(SHELL) 自己的libool的路径' # 修改成 /usr/bin/libtool
AC_SUBST(LIBTOOL)dnl
>>> ./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
>>> make
>>> make install
可能遇到的错误:
a、cannot find -lmysqlclient_r
/usr/bin/ld: cannot find -lmysqlclient_r
collect2: ld returned 1 exit status
make[2]: *** [sysbench] Error 1
解决办法: find / -name *mysqlclient_r*
ln -s /usr/local/mysql/lib/libmysqlclient_r.so /usr/lib/libmysqlclient.so
b、别人遇到的问题,在这里记录一下
./sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
Solution:
export LD_LIBRARY_PATH=/usr/local/mysql/lib
或者添加到/etc/profile里.
./configure --with-mysql-includes=/usr/local/mysql/include/ --with-mysql-libs=/usr/local/mysql/lib/
make && make install
2、进行测试
a、基本语法
cpu性能测试
>>> sysbench --test=cpu --cpu-max-prime=20000 run
结果:
线程测试
sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
结果:
文件io
>>> sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare
>>> sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw run
>>> sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup
内存测试
>>> sysbench --test=memory --memory-block-size=8k --memory-total-size=1G
oltp测试
>>> sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost --mysql-password=test --mysql-db=test prepare
>>> sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost --mysql-password=test --mysql-db=test run
>>> sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost --mysql-password=test --mysql-db=test cleanup
Copy:
对于MySQL的性能分析,在服务器内部有很多很好的命令来供我们使用,比如show status/show processlist/show innodb status
使用show status 中,“Select%”一般指不同类型的连接执行计划,“Handler%”一般指存储引擎的相关信息,“Sort%”一般指排序的相关信息,“Created%”一般指新建临时表的相关信息。一般也可以使用mysqlreport对信息进行统计打印。而show processlist 也打印出了相关参数,此时可以使用Innotop代替进行方便分析,或者使用mytop来分析。如果是在回话中使用,则需要添加session 参数,即show session status; 使用show processlist 可以定位到mysql连接和进程故障,这一功能一般需要和prep netstat psof ps等联合使用。使用tcpdump工具可以抓包分析流量。innotop 和tcpdump的强大功能以后再分析。