Doctrine查询需要4秒以上的时间才能执行

时间:2009-08-13 11:29:20

标签: caching doctrine query-cache

我们正处于项目的最后阶段,并开始对其进行优化。

经过几次测试后,我们意识到加载页面所花费的大部分时间(如果不是全部的话)都花在了Doctrine上。

超过5秒的页面加载,3 - 4秒仅用于2个Doctrine查询。

我们在mysql服务器和Doctrine以及结果缓存上启用了查询缓存,但这似乎只会使加载时间变得更糟。

据我所知,mysql查询缓存处于活动状态:

[编辑]由于某种原因我的问题的其余部分已经消失,所以我再次发布它[/ edit]

Qcache_free_blocks | 57个
 Qcache_free_memory | 22300072个
 Qcache_hits | 7117
 Qcache_inserts | 3308
 Qcache_lowmem_prunes | 0
 Qcache_not_cached | 4537
 Qcache_queries_in_cache | 1225
 Qcache_total_blocks | 2609

问题是缓存似乎没有被命中,大多数时间(平均3秒)的查询永远不会改变。

有没有人知道为什么启用查询/结果缓存不会改善加载时间?

2 个答案:

答案 0 :(得分:2)

如果我做对了,那么你目前没有最慢查询的列表。我建议从这开始。

Turn on slow query logging

log_slow_queries=/var/log/mysql.slow.log

然后:

尽可能地限制关系

尽可能地约束关系很重要。这意味着:

  • 施加遍历方向(如果可能,避免双向关联)
  • 消除不重要的关联

这有几个好处:

  • 域模型中的耦合减少
  • 您的域模型中的更简单的代码(无需正确维护双向性)
  • 较少为Doctrine工作

Doctrine best practices

被盗

答案 1 :(得分:0)

您是否从控制台/命令行尝试查询? 在没有ORM的情况下执行时,他们需要什么时间会很有趣。

请让我知道,我有兴趣使用Doctrine,但很少担心性能。