随机长DB查询/ Memcache在生产环境中提取

时间:2009-05-12 21:34:13

标签: mysql ruby-on-rails ruby memcached sysadmin

我在诊断我在ubuntu scalr / ec2生产环境中遇到的问题时遇到了问题。

问题显然是随机的,数据库查询和/或内存缓存查询将花费更长的时间。我看过一个简单的select语句需要130ms或者Memcache fetch需要花费65ms!每个请求可能会发生几次,导致某些请求需要两倍的时间。

为了诊断问题,我编写了一个非常简单的脚本,它只是连接到MySql服务器并运行查询。

require 'mysql'

mysql = Mysql.init
mysql.real_connect('', '', '', '')

max = 0
100.times do
  start = Time.now
  mysql.query('select * from navigables limit 1')
  stop = Time.now

  total = stop - start
  max = total  if total > max
end

puts "Max Time: #{max * 1000}"

mysql.close

这个脚本一直返回一个非常高的最大时间,所以我删除了任何Rails作为问题的根源。我也用Python写了同样的东西来消除Ruby。事实上,Python也花费了过多的时间!

MySql和Memcache都在他们自己的盒子上,所以我考虑了网络延迟,但是看pingtraceroute看起来很正常。

同样在相应的计算机上运行查询/提取会返回预期的时间,并且我在我的登台计算机上运行相同版本的gems而没有此问题。

我真的很难过这个...对我可以尝试诊断的事情的任何想法? 感谢

2 个答案:

答案 0 :(得分:0)

我唯一的想法是它可能是磁盘?

答案 1 :(得分:0)

Mysql使用查询缓存将SELECT与其结果一起存储。这可以解释你在不断选择中所获得的恒定速度。尝试EXPLAIN-inig查询以查看您是否使用索引。

我不明白为什么memcache会成为一个问题(unles它崩溃并重新启动?)。检查服务器日志中是否有可疑的服务故障。