rails服务器明明cache hit,但是DB用了很多时间为什么?

最近我服务器相应变得非常慢,以下是log:

Processing HomepageController#iphone to xml (for 123.150.158.147 at 2012-06-29 07:59:37) [GET]
User Columns (12.6ms) SHOW FIELDS FROM users
User Load (4758.7ms) SELECT * FROM users WHERE (users.id IS NULL) LIMIT 1
Cached fragment hit: views/www.xxx.com/homepage/iphone.xml (26.4ms)
Filter chain halted as [#nil, :only=>#, :if=>nil}, @identifier=nil, @method=#Proc:0xb7aa8bf8@/usr/local/rvm/gems/ruby-1.8.7-p352/gems/actionpack-2.3.4/lib/action_controller/caching/actions.rb:64>] did_not_yield.
Completed in 4870ms (View: 9, DB: 4777) | 200 OK [http://www.xxxcom/homepage/iphone.xml]

我不知道为什么DB用了4777ms。。。。请问这个怎么查为什么?并不是所有请求都是这样的,就是有些请求会特别长。

另外:有些log是这样的:
Processing ProductsController#index to xml (for 222.134.168.129 at 2012-06-29 08:05:53) [GET]
Parameters: {"page"=>"1", "page_size"=>"15"}
User Load (0.7ms) SELECT * FROM users WHERE (users.id IS NULL) LIMIT 1
Cached fragment hit: views/www.xxx.com/products.xml?page=1&page_size=15.xml (3.8ms)
Filter chain halted as [#nil, :only=>#, :if=>nil}, @identifier=nil, @method=#Proc:0xb7aa8bf8@/usr/local/rvm/gems/ruby-1.8.7-p352/gems/actionpack-2.3.4/lib/action_controller/caching/actions.rb:64>] did_not_yield.
Completed in 35ms (View: 1, DB: 1) | 200 OK [http://www.xxx.com/products.xml?page=1&page_size=15]

请问这35ms占用了啥?我看出来cache hit用了3.8,view和DB都用了1?,那怎么会要35ms?

谢谢!

2个回答

[quote]User Load (4758.7ms) SELECT * FROM users WHERE (users.id IS NULL) LIMIT 1[/quote]
是这句的时间过长。你的片段缓存命中和controller里的查询没关系。

kilik52
kilik52 哦~看到了,谢谢!
7 年多之前 回复

需要你对每一步的消耗进行分析,搞清楚到底是哪里消耗最大。

kilik52
kilik52 原来连info级的日志都不开啊。非常感谢您的帮助!
7 年多之前 回复
iteye_12540
iteye_12540 又看了一下你贴出的日志。确实已经比较详细了。DB很慢的话,很可能是缓存没命中,跑去查数据库了。那么就要看数据库这条SQL的执行计划了。从你贴的条件上看,users.id IS NULL,会造成全表扫描,而其实你只需要一条记录limit 1。那么这条SQL就非常不合适了。就目前来看,问题在数据库这边。需要你对数据库进行优化。 我只是了解rails,不是很精通。不能给出太多的帮助。不过道理是相通的,就是通过日志找到消耗最大的地方,然后针对性进行优化,而且还要有基准测试,来进行对比。 至于你问35ms都干了什么,别忘了监控本身的消耗。写日志的性能消耗也不低,不然为什么我们平时不开debug级、info级的日志呢,就是因为写得太多了,性能会下降的。
7 年多之前 回复
kilik52
kilik52 非常感谢您的回复,请问我如何分析每一步的消耗?目前我的log的level是debug,似乎是最详细的log了?
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!