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

全部博文(86)

文章存档

2009年(86)

我的朋友

分类: Mysql/postgreSQL

2009-08-23 14:30:13


一般情况下,如果需要对mysql数据库的语句做一个总体调优,第一反应可能是通过long-query-time=0,然后通过slow-log对占用数据库运行时间最久的语句进行分析。但是会遇到以下情况:
  • 5.1版本之前的mysql无法在不重启数据库的情况下调整log-slow
  • 5.1版本之前不支持long-query-time=0的设置
  • 即使支持以下两项,需要手动的对slow进行设置,并在调优结束后关闭(以免slow过大)
最近在planet上看到一篇文章可以很好的解决这种情况:

使用(需要perl的JSON的包支持):

mpdump > dump.txt
mpfilter < mpdump.txt | mpreport | head -100

其原理是mpdump是一个利用show processlist对系统正在运行的程序进行导出的脚本。
程序通过对一段时间内,快速的执行大量的show processlist,并通过后期的处理,来得出这段时间内损耗数据库时间最久的语句,并给出最后的报表。


之后自己进行了测试。测试之前主要有个顾虑,由于dump是不断的通过show processlist的执行来进行的,会不会频率如此之高的执行是mysql负载增加?服务器负载增加?
测试总结:
1. mpdump并不会对服务器增加过高的负载,从top来看不超过3%
2. mpdump并不会对mysql增加过高的负载,由于show processlist并不进行读表操作,因此对mysql影响不大,但是没有进一步对高负载下的mysql的运行情况进行测试,读者有兴趣可以自行测试。
3. mpreport最终显示的报告并不包含语句的执行时间,因此,report的效果不如 frequency*time的排序效果理想。
4. 综上,mpdump适用于production环境的语句监控,并且服务器mysql不便于通过重启来开启slow-log或者版本低于5.1不能记录time=0的语句。




mpdump及mpfilter的下载地址:


原文地址:
http://developer.cybozu.co.jp/kazuho/2009/07/using-a-statist.html?lang=en







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