mysql中对执行效率慢的sql的抓取

上一篇 / 下一篇  2012-02-06 17:20:08 / 个人分类:others

  一天又要过去了,为了不使得这一天过得虚无,没意义,结束今天工作之前来记录点东西,纯粹为了给自己一个以后的回顾。
  今天任务不是特别忙,于是想看点DB的东西,想到DB前端时间记录slow.sql的一个分享,于是打算研究下这一块,查询了下网络资料和自己实际动手实践了一遍。对于mysql数据库来说,本身有一个logdump的功能,可以将设置的符合条件的sql语句记录到我们指定位置的slow.log里面,而这些符合条件的条件的设置都可以在mysql的my.cnf文件里面设置,设置完成之后,需要重新启动mysql才能生效,其中的两个参数比较重要,一个是long_query_time,一个是slow_log_file所对应的位置(两个参数的意思就是直译的意思)。
   我这次的实验配置的long_query_time时间为5S(具体多少,可以自己根据实际情况配置),重启生效之后,在前端执行查询的操作,前端抓包看到对应的查询time_duration时间为12.65S,符合long的设置,于是查看生成的slow.log文件,其中记录的内容为执行的sql语句和消耗的时间。
   在这里需要注意,我们平常说为了减少对DBserver的压力,我们会在real-dbserver前面加上作为缓存的机器对查询的结果进行缓存,比如memcached就可以干这个。其实DBserver上的dbms服务软件本身也可以设置缓存,分为读写两部分缓存。
   在对本身的缓存所造成影响的分析上,注意下缓存的原理,这个地方使用缓存需要满足以下几个条件:
1、使用的sql语句文本是完全一致的,是完全一致(大小写貌似无所谓)

2、对应操作的表不能有更新的操作(insert,update等),只要一有更新的操作,cache会失效,再次查询,将不会从缓存中读取。

3、 需要注意,默认字符集对缓存命中率的影响。通常情况下,如果客户端与服务器之间所采用的默认字符集不同,则即使查询语句相同、在两次查询之间记录与表结构也没有被更改,系统仍然认为是不同的查询。

http://wenku.baidu.com/view/e9f494c79ec3d5bbfd0a74f7.html

TAG:

 

评分:0

我来说两句

Open Toolbar