用mysqldumpslow分析mysql的slow query log

mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改,需增加如下几行

long_query_time = 1
log-slow-queries = /var/youpath/slow.log
log-queries-not-using-indexes

long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。
log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件host_name-slow.log,我生成的log就在mysql的data目录
log-queries-not-using-indexes 就是字面意思,log下来没有使用索引的query。

把上述参数打开,运行一段时间,就可以关掉了,省得影响生产环境。

接下来就是分析了,我这里的文件名字叫host-slow.log。
先mysqldumpslow –help以下,俺主要用的是
-s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string

-s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙
-t,是top n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的

mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log

上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。

用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。

秀才遇到兵

转贴一篇著名文硕美女同事写的文章,看来说话要注意点,这次就伤害了这个幼小美丽的心灵了。:S
以下为转贴内容,原贴见这里

昨天和程序员灰灰同学讨论短信投票程序的问题。
(P.S.“灰灰”的版权属于老D。)
我:你那个投票程序,我只要给每篇文章编号就行了,让人家用短信发个编号过来就行了,对不?
灰灰:是啊。对了,建议你如果投稿不超过26篇,可以用英文字母A到Z,用不着数字。
我(气愤,心想,凭什么你就断定不会超过26篇?先埋个伏笔准备后面反击他):如此说来,如果不超过10篇或12篇,我只要用天干地支就行了?
灰灰:没错。
我(开始反击了,好歹咱也对电脑这东西有相~当~的了解):可是你那程序认识方块字吗?分得清甲乙丙丁吗?
灰灰(骄傲地):当然认识!
我(继续显摆,不能让他小瞧了我):可是电脑不是只认识0和2吗?
灰灰(愣了1秒,爆发):那是0和1好不好?!!!真受不了……
我(落荒而逃):……

—————————
再更正一下
你要把第一句话改成:转贴一下美女同事写的文章,看来说话要注意点,这次就伤害了一个美丽的心灵了
blog地址是:http://y2kjanexx.spaces.live.com/

一个时间同步的服务器

有时候系统的时间会有误差,windows可以从互联网的时间服务器(internet time server)上来同步时间,但是windows自带的服务器列表经常会出错,同步失败,今天看到ccf有一个同学提供了一个,时间同步的服务器,试用了一下,效果不错,有图为证。
ip是:210.72.145.44
internet time server
从ip地址上查是陕西省西安市 科技网的ip,有可能是真的哦。
在列表里的其他三个同步的服务器是:
time.windows.com
time.nist.gov
time-a.nist.gov
linux上和时间服务器同步时间的方法,参看这里

我有话要说~

记得贝贝是在8个月就会讲一些简单的字了,如「MAMA」「DADA」「NAINAI」,9个多月时爱上了说「BABA」,10个多月又开始叫「MAMA」,而且是有意识的叫了,她想要我抱她时,会一副渴望的神态对着我急切地喊着「MAMA」,如果不过来抱住她,贝便会一直对着我喊,用上海话说,那声音是超嗲,让你听了,绝不忍心拒绝她的要求。
虽然目前对于多音节的字词,贝贝还没有能力发出音来,但是她会用她的方法来告诉身边的人,她会扮鬼脸逗的我们哈哈大笑,会跳舞给我们看,会模仿妈妈轻轻的拍哄我们睡觉,会用力和你抵头,会亲亲爸爸妈妈…… 总之她会做很多动作,来代替语言表达她的意思,她的心情。另外,我还感觉小贝自己虽然不会说,但她会“啊啊啊噢噢噢”的对着你说一通,然后大人就会根据情况猜测她想表达的意思,比如说会问她“是要妈妈给你拿这个吗?”“是要把球给爸爸玩吗?”似乎是让别人说出她想要讲的那些字句。也许小宝宝们就是通过这种方式来学习语言吧。

认识耳朵

今天我教贝贝认识了耳朵,指着我自己的耳朵教了她几遍,贝贝便很快记住了。现在问她妈妈的耳朵在哪里,她便会轻轻的伸过手来,摸我的耳朵。爷爷奶奶耳朵也都被贝贝发现了。等到贝爸下班回来再试,贝贝仍然是直接找到目标,准确无误。
当然贝贝也知道自己的耳朵在哪里,当我问:“贝贝,你的耳朵在哪里阿?”她就会把手放到脑袋两侧,耳朵附近的位置,虽然好几次根本没有碰到耳朵,但她的动作要表达的意思是对的,所以我会表扬她和鼓励她,别看她才10个多月,表扬和批评她的话,她都能听得出来,也许是看大人的表情和感觉语气吧。听到表扬赞美的语言,贝贝总是笑得像花儿一样。

贝贝的第一个六一儿童节

贝贝的在第一个自己的节日里收到的礼物是漂亮衣服+玩具。61前一天,也就是黑色星期四,我是特意去淮海路给贝贝买节日礼物的,结果钱夹被偷,计划落空了,心里特别难受,愣愣地坐在淮太门口失意了好一会,想着不能让贝贝失望,毕竟是她的第一个儿童节呢(虽然贝贝现在还不知道),我决定转战霓虹,零钱包里还有点小米,所幸小偷给我留下了。
在霓虹兜了几个小时,收获也不少,裙子,裤子,上衣,玩具都买了,价格都不高,但是都是我喜欢的,衣服质量也很好,很实惠的。把钱包里的二百多败完了,心情好了很多,拎着沉甸甸的一袋,想像着贝贝穿上的模样,一时把不快全部遗忘掉了。看来败家就是爽呢,不过败家是有正当理由的:谁让贝贝长的漂亮可爱呢,嘿嘿嘿
六一这天是周五,天气也不好,时而下着小雨,像平日一样,爷爷抱着贝贝在小区里玩了2个小时,就这样的户外活动贝贝已经很满足了。
对于我来说这第一个六一简单而难忘,贝贝应该是高兴得,希望以后每年六一贝贝都能happy.

jquery选择满足条件,排除指定条件

jQuery的选择器是CSS 1-3,XPath的结合物。现在有个需求,连接到外部网站的链接都在新窗口打开,以前的方法很简单就是在链接的地方写上target=”_blank”,但是这样有2个不好的地方。
1.target=”_blank”,不符合严格的DOCTYPE(xhtml1-strict.dtd),参见这里
2.如果自己写blog,代码里面如果有其他网站的链接,都要自己手工加,可能会忘。

现在想用jquery来完成这个工作,思路是,找到所有有链接的节点,如果里面的href是以”http”开始的,并且里面没有本站的域名juyimeng.com的,就给他加一个value为”_blank”的target(如果原来有,就修改成”_blank”)。
第一个很简单,就是
a[@href^=http]
现在是要过滤掉里面含有指定关键字的,找了半天手册,google,发现其实很简单,用一个not就可以了
not(“[@href*=juyimeng.com]
意思是,去除掉href属性里面含有juyimeng.com的节点。
其他的一些用法如下:

E[@foo] 拥有foo属性的E元素
E[@foo=bar] foo属性的值为bar的E元素
E[@foo^=bar] foo属性的值以字符串”bar”开始的E元素
E[@foo$=bar] foo属性的值以字符串”bar”结尾的E元素
E[@foo*=bar] foo属性的值包含有字符串”bar”结尾的E元素

实现整个功能的代码如下:

$("a[@href^=http]").not("[@href*=juyimeng.com]").click(function() {
	 this.target="blank";
});

测试通过,可能写的不是十分严密,但是已经能解决目前的问题了,不知道这里面能不能用正则表达式,或者大小写不敏感,如果可以,就能更精确地实现功能。
有错请提出.:D

python常用的时间方法

我们先导入必须用到的一个module
>>> import time
设置一个时间的格式,下面会用到
>>>ISOTIMEFORMAT=’%Y-%m-%d %X’
看一下当前的时间,和其他很多语言相似这是从epoch(1970 年 1 月 1 日 00:00:00)开始到当前的秒数。
>>> time.time()
1180759620.859
上面的看不懂,换个格式来看看
>>> time.localtime()
(2007, 6, 2, 12, 47, 7, 5, 153, 0)
localtime返回tuple格式的时间,有一个和它类似的函数叫gmtime(),2个函数的差别是时区,gmtime()返回的是0时区的值,localtime返回的是当前时区的值。
>>> time.strftime( ISOTIMEFORMAT, time.localtime() )
‘2007-06-02 12:54:29’
用上我们的时间格式定义了,使用strftime对时间做一个转换,如果取现在的时间,time.localtime() 可以不用。

>>> time.strftime( ISOTIMEFORMAT, time.localtime( time.time() ) )
‘2007-06-02 12:54:31’
>>> time.strftime( ISOTIMEFORMAT, time.gmtime( time.time() ) )
‘2007-06-02 04:55:02’
上面展示了gmtime和localtime的区别。
查看时区用
>>> time.timezone
-28800
上面的值是一个秒值,是当前时区和0时区相差的描述,-28800=-8*3600,即为东八区。

帖几个简单的函数

def ISOString2Time( s ):
    '''
    convert a ISO format time to second
    from:2006-04-12 16:46:40 to:23123123
    把一个时间转化为秒
    '''
    return time.strptime( s, ISOTIMEFORMAT )
def Time2ISOString( s ):
    '''
    convert second to a ISO format time
    from: 23123123 to: 2006-04-12 16:46:40
    把给定的秒转化为定义的格式
    '''
    return time.strftime( ISOTIMEFORMAT, time.localtime( float( s ) ) )
def dateplustime( d, t ):
    '''
    d=2006-04-12 16:46:40
    t=2小时
   return  2006-04-12 18:46:40
   计算一个日期相差多少秒的日期,time2sec是另外一个函数,可以处理,3天,13分钟,10小时等字符串,回头再来写这个,需要结合正则表达式。
    '''
    return Time2ISOString( time.mktime( ISOString2Time( d ) )+time2sec( t ) )
def dateMinDate( d1, d2 ):
    '''
    minus to iso format date,return seconds
    计算2个时间相差多少秒
    '''
    d1=ISOString2Time( d1 )
    d2=ISOString2Time( d2 )
    return time.mktime( d1 )-time.mktime( d2 )

在linux下安装activepython2.5 setuptools ClientCookie

activepython
http://www.activestate.com/products/activepython/
是ActiveState Software的一个python的分发包,带了一些python的扩展.
setuptools
http://cheeseshop.python.org/pypi/setuptools
是一个python的包,它可以简化python包的下载,build,安装升级和卸载
ClientCookie
http://wwwsearch.sourceforge.net/ClientCookie/
是一个python对cookie功能的扩展,从HTTP::Cookies而来。作者说以后不会再发布单独的模块,已经集成到了mechanize里面。

下载上述软件
wget http://downloads.activestate.com/ActivePython/linux/2.5/ActivePython-2.5.1.1-linux-x86.tar.gz
wget http://wwwsearch.sourceforge.net/ClientCookie/src/ClientCookie-1.3.0.tar.gz
wget http://cheeseshop.python.org/packages/2.5/s/setuptools/setuptools-0.6c6-py2.5.egg

先安装ActivePython
tar zxvf ActivePython-2.5.1.1-linux-x86.tar.gz
cd ActivePython-2.5.1.1-linux-x86
./install.sh
输入安装的目录,我输入了/usr/local/python25/
装好后看一下

[jym@jym jym]$ /usr/local/python25/bin/python
ActivePython 2.5.1.1 (ActiveState Software Inc.) based on
Python 2.5.1 (r251:54863, May  1 2007, 17:48:28) 
[GCC 2.95.3 20010315 (SuSE)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
%3E%3E%3E%20

本来应该直接安装ClientCookie的,安装过程中要使用setuptools,它应该自动下载,安装的,但是由于ClientCookie用的url不对,用的是
http://cheeseshop.python.org/packages/2.5/s/setuptools/setuptools-0.6a11-py2.5.egg
所以不能自动下载,只好手工下载,安装
安装
setuptools
在setuptools-0.6c6-py2.5.egg所在的目录运行

ln -s  /usr/local/python25/bin/python2.5 python2.5
PATH=.:$PATH  
sh setuptools-0.6c6-py2.5.egg
rm python2.5

安装ClientCookie

tar zxvf ClientCookie-1.3.0.tar.gz
cd ClientCookie-1.3.0
/usr/local/python25/bin/python setup.py build
/usr/local/python25/bin/python setup.py install
 

至此,activepython2.5+setuptools+ClientCookie在linux的安装已经完成,ClientCookie的简单使用等俺下一篇再说:D
BTW:祝大家6.1快乐!