0

这是 devel 的第一行告诉我的:

在 3177.9 毫秒内执行了 10930 个查询。超过 5000 毫秒的查询和多次执行的查询被突出显示。页面执行时间为 8976.56 ms

这听起来很多。我应该在哪里/在哪里寻找原因?

更新 - 这有帮助 我在http://drupal.org/node/402944找到了一个解决方案。我在 _menu_link_translate (menu.inc) 中应用了修复程序。现在我的查询量减少到 1500 个。

更新: 两种方法被广泛调用,并生成大量查询:

drupal_lookup_path(大约 600 个)查询,形式为:

SELECT src FROM url_alias WHERE dst = 'node/81528/edit' AND language IN('da', '') ORDER BY language DESC

_ad_channel_load_node(大约 1800 个查询)。该方法查询mysql 3次。显然该方法是在 node_load 上调用的。

关于缓存,我想我会开始寻找减少查询数量的方法。好像有些不对劲。

PS我是drupal的新手。

4

4 回答 4

1

好吧,看看下面的查询(如果您还没有启用查询显示)。尝试计算哪些函数正在执行最多和最慢的查询。然后尝试找出它们属于哪个模块以及它们在做什么。

编辑节点时会清除缓存,因此需要重新加载大量数据。

于 2011-02-01T13:38:10.093 回答
0

有几件事可以使 Drupal 执行大量查询:

  1. 在缓存清除或其他类似功能上重建菜单路由器。
  2. 安装了很多模块。
  3. 在每个页面上重建主题注册表(某些主题具有此设置)

如果您通常只有匿名用户浏览您的网站,您可能希望使用页面缓存、压缩和压缩 CSS/JS 对其进行测试,这可能会显着减少查询次数。

此外,使用 Cachegrind 和 Webgrind 之类的工具可以帮助确定哪些 PHP 函数需要很长时间才能执行,这有时比您运行的 SQL 查询数更有用。

于 2011-02-01T20:44:40.393 回答
0

这听起来像是菜单路由器的问题。当菜单缓存被清除时, menu_rebuild 被执行,它可以像你描述的那样生成数千个查询。这就像是 Drupal http://drupal.org/node/512962中这个核心错误的影响

如果您提供查询示例,我们可能会为您提供更多帮助。

于 2011-02-01T17:14:05.627 回答
0

Devel 还可以一一显示查询。启用此功能,重新编辑文章,保存它,然后查看特定查询。可能其中许多看起来相似,因此您可以开始挖掘更多。

让我们更多地了解这篇文章。我猜是 CCK 节点,但它有很多字段吗?哪一种?

于 2011-02-01T16:30:47.817 回答