1.准备环境
需要准备的文件:
a. mpdump+mpfilter+mpreport
b. perl-JSON (perl Makefile.PL&&make&&make install)
2. 使用软件
mpdump --host=localhost --port=3306 --user=root > dump.txt
mpfilter < mpdump.txt | mpreport | head -100
也可以直接mpdump,作为监控
3. 监控精度
由于mpdump是通过不断进行show full processlist进行监控的,因此理论上会存在show的间隔内的语句被遗漏的情况,从而有一定的精度问题。下面使用mysqlslap进行测试,测试语句:
触发语句:
mysqlslap -h localhost -u root -p -a -i 5 -c 1 --create-schema=test --number-of-queries=1000
抓取语句:
./mpdump --host=localhost --port=3306 --user=root --interval=xxx >mpfile
统计语句:
cat mpfile |sed '/\[\]/d'|wc -l
通过测试发现,interval的精细度,关系到能抓取到的语句的精度。关系如下:(由于使用了perl的Hires库,所以支持小于1s的精度)
interval|语句数
0.04|0
0.03|20
0.02|32
0.01|50
0.005|146
0.001|197
如果interval设置为0.005的话,默认mpdump是抓取1000个样本,因此只有5s的记录。如果需要更长时间的监控的话,可以使用mpdump --samples=10000 这样的方式增大sample数。
4. 监控报告
mpfilter会对抓取结果进行语句分类,mpreport会按照语句执行的次数排序给出最终报表。
通过filter和report处理后的结果如下:
1.460:SELECT intcol1,charcol1 FROM t1
0.470:INSERT INTO t1 VALUES ...
0.010:DROP SCHEMA IF EXISTS `test`
0.010:CREATE TABLE `t1` (intcol1 INT(?) ,charcol1 VARCHAR(?))
第一列表示的是语句执行次数占sample的比例,即 count/samples*100 ,本例中监控到insert执行了14.6次。
5. 总结
mpdump+mpfilter+mpreport 优势:
1. 结果可记录
2. 有简明的报表,容易找出对服务器性能占用比重最大的语句。
3. 安装较简单
缺点:
1. 取样的精确度不高,会导致漏过一些重要信息。
2. 会对服务器带来一定压力
3. 缺少语句的执行时间,只能统计次数,而不能统计 次数*时间 这种更为合理的分析参数。
阅读(2488) | 评论(0) | 转发(0) |