mysql 基准测试和性能分析

一、 在对网站整体性能进行benchmark时,可以使用多种工具,比如大名鼎鼎的ab(Apache bench),http_load等工具。这里我们不关注他们的使用,如果你想了解,可以去这里

重点来说MySQL的基准测试如何进行,也有很多种工具来供我们选择,比如mysqlslap、sysbench、Super Smack等,其中mysqlslap的使用MySQL官网给出了介绍,Super Smack是服务器压力测试强有力的工具,那么sysbench便是我们进行MySQL基准测试的很漂亮的工具了。

sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL;

在本次试验中,sysbench版本为:0.4.12 MySQL版本为:5.1.61 ubuntu版本为:10.10

sysbench的基本用法通过 man sysbench 或者 sysbench --help可以方便的看到:

sysbench [general-options]... --test=<test-name> [test-options] ... command

general-options 暂且不说,test-name 包括fileio/cpu/memory/threads/mutex/oltp 等测试,command包括prepare/run/cleanup/help/version等

(1)cpu测试

sysbench采用寻找最大素数的方式来测试:命令如下

root@ubuntu:~#sysbench --test=cpu --cpu-max-prime=1500 run

从total time: 一行可以看出在求得1500以内的最大素数时使用了3.2214s

(2)fileio测试

使用fileio测试,首先得生成文件,然后对文件或读或写,测试fileio性能

生成文件:sysbench --test=fileio prepare ,使用fileio命令时,会有很多参数,可以使用--file-block-size指定单个文件大小,可以使用--file-total-size指定整个文件的大小,但是这里使用默认参数,单个文件大小为16M,整个文件大小为2G。如下所示:

这里总共生成了128个文件。读写文件sysbench --test=fileio --file-test-mode=rndrw run,如下所示:

在这份报告中,有两个参数很值得我们关注,即每秒的请求数和总体的吞吐量,比如上面的就是785.16 Requests/sec 和12.268Mb/sec,这两个参数对于评估磁盘的性能很有帮助。在完成测试后,需要将测试数据删除: sysbench --test=fileio cleanup

(3)oltp 测试

首先生成数据:sysbench --test=oltp --oltp-table-size=2000000 --oltp-table-name=tt --mysql-db=test --mysql-user=root --msyql-password=123 prepare ,这里测试用户名:root密码:123

生成数据后,进行测试,使用8个线程进行测试,如下所示:

以上数据对于分析多线程事务处理很有帮助,比如事务总统计数,每秒事务的处理量等等,

sysbench对于其他的测试类似。。。


 

二、对于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的强大功能以后再分析。



  • 安装sql-bench必需的perl包
sudo /usr/bin/perl -MCPAN -e 'install DBI'
export PATH=$PATH:/usr/local/webserver/mysql/bin
sudo apt-get install libdbd-mysql-perl
  • sql-bench测试mysql
#/usr/local/webserver/mysql/sql-bench/README #说明文档
mkdir ~/tmp/output
cd /usr/local/webserver/mysql/sql-bench/
sudo mkdir /usr/local/webserver/mysql/sql-bench/output
sudo chown ry:ry /usr/local/webserver/mysql/sql-bench/output -R
/usr/local/webserver/mysql/sql-bench/run-all-tests --user=ry --password=XXX --log --fast
  • 安装基准测试工具dbt2
sudo /usr/bin/perl -MCPAN -e 'install "YAML"'
sudo cpan Statistics::Descriptive
sudo cpan Test::Parser
sudo cpan Test::Reporter
sudo apt-get install gnuplot
sudo apt-get install build-essentials
./configure --prefix=/usr/local/webserver/dbt2 --with-mysql=/usr/local/webserver/mysql
make
sudo make install
  • dbt2准备测试数据
#vim ~/tmp/dbt2-0.40/README-MYSQL#说明文档
sudo mkdir /usr/local/webserver/dbt2/data
sudo chown ry:ry /usr/local/webserver/dbt2/data
/usr/local/webserver/dbt2/bin/datagen -w 3 -d /usr/local/webserver/dbt2/data --mysql
~/tmp/dbt2-0.40/scripts/mysql/build_db.sh -w 3 -d dbt2 -f /usr/local/webserver/dbt2/data -s /tmp/mysql.sock -h localhost -u ry -p XXX -e INNODB
  • dbt2测试mysql
export LD_LIBRARY_PATH=/usr/local/webserver/mysql/lib/mysql
~/tmp/dbt2-0.40/scripts/run_workload.sh -c 5 -d 300 -n -w 3 -s 10 -u ry -x XXX
  • 分析慢查询日志
sudo /usr/local/webserver/mysql/bin/mysqldumpslow -t 100 /usr/local/webserver/mysql/data/mysql-slow
  • 手动show status分析查询
flush status
#select SQL_NO_CACHE
show session status like 'Select%'
show session status like 'Handler%'
show session status like 'Sort%'
show session status like 'Created%'
  • innotop分析查询
cd ~/tmp/
tar -zxvf innotop-1.8.0.tar.gz 
cd innotop-1.8.0/
perl Makefile.PL 
make
sudo make install
innotop -ury -prockyou -S /tmp/mysql.sock
  • show profile分析查询的资源信息
set profiling=1
#sql
show profiles\G
show profile #(cpu for query 1)
  • 查询优化
select SQL_NO_CACHE #
show status like 'last_query_cost'
explain #

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值