Chinaunix首页 | 论坛 | 博客
  • 博客访问: 569898
  • 博文数量: 86
  • 博客积分: 2581
  • 博客等级: 少校
  • 技术积分: 793
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-05 20:09
文章分类

全部博文(86)

文章存档

2009年(86)

我的朋友

分类: Mysql/postgreSQL

2009-10-28 15:49:38

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. 缺少语句的执行时间,只能统计次数,而不能统计 次数*时间 这种更为合理的分析参数。










阅读(2502) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~