首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高Drupal 7论坛的性能?

如何提高Drupal 7论坛的性能?
EN

Drupal用户
提问于 2011-07-18 17:55:44
回答 3查看 804关注 0票数 1

我是工作在一个网站,有60k+论坛的主题,这是非常缓慢的。问题是核心论坛模块使用以下查询

代码语言:javascript
复制
SELECT ncs.last_comment_timestamp AS last_comment_timestamp
, ncs.last_comment_uid AS last_comment_uid
, CASE ncs.last_comment_uid WHEN 0 THEN ncs.last_comment_name ELSE u2.name END AS last_comment_name FROM node n
INNER JOIN users u1 ON n.uid = u1.uid
INNER JOIN forum f ON n.vid = f.vid AND f.tid = '22'
INNER JOIN node_comment_statistics ncs ON n.nid = ncs.nid
INNER JOIN users u2 ON ncs.last_comment_uid = u2.uid WHERE  (n.status = '1') ORDER BY last_comment_timestamp DESC LIMIT 1 OFFSET 0

我看到这个查询是问题所在,因为在运行top命令之后,我看到mysql正在消耗150%+ CPU,所以我运行了一个显示完整处理列表,显示上面的查询始终处于以下状态

代码语言:javascript
复制
Copying to tmp table    SELECT ncs.last_comment_timestamp AS last_comment_timestamp, ncs.last_comment_uid AS last_comment_uid, CASE ncs.last_comment_uid WHEN 0 THEN ncs.last_comment_name ELSE u2.name END AS last_comment_name\nFROM \nnode n\nINNER JOIN users u1 ON n.uid = u1.uid\nINNER JOIN forum f ON n.vid = f.vid AND f.tid = '22'\nINNER JOIN node_comment_statistics ncs ON n.nid = ncs.nid\nINNER JOIN users u2 ON ncs.last_comment_uid = u2.uid\nWHERE  (n.status = '1') \nORDER BY last_comment_timestamp DESC\nLIMIT 1 OFFSET 0

解释命令的结果是

代码语言:javascript
复制
id      select_type     table   type    possible_keys   key     key_len ref     rows    Extra
1       SIMPLE  f       ref     PRIMARY,tid     tid     4       const   30030   Using index; Using temporary; Using filesort
1       SIMPLE  n       eq_ref  PRIMARY,vid,node_status_type,uid        vid     4       drupal.f.vid    1       Using where
1       SIMPLE  ncs     eq_ref  PRIMARY,last_comment_uid        PRIMARY 4       drupal.n.nid    1
1       SIMPLE  u2      eq_ref  PRIMARY PRIMARY 4       drupal.ncs.last_comment_uid     1       Using where
1       SIMPLE  u1      eq_ref  PRIMARY PRIMARY 4       drupal.n.uid    1       Using where; Using index

有什么办法来提高这里的表现吗?

谢谢

EN

回答 3

Drupal用户

发布于 2011-07-19 00:53:02

如果你删除了统计数据,那么事情就会一扫而空。根据我的理解,drupal统计数据不能很好地扩展。

票数 1
EN

Drupal用户

发布于 2011-07-18 18:50:58

非常模糊的问题很可能是特定于系统的,但是您可以尝试的第一件事是调优数据库服务器。如果您正在运行D6,那么您可以尝试使用DB调谐器,但显然这没有D7版本。

大部分模块都是基于MySQL调谐器的,它将对一个实时数据库进行检查,并给出相应的参数调整建议。

我还会阅读https://drupal.stackexchange.com/questions/1715/what-would-the-optimal-mysql-configuration-for-a-drupal-7-site-be答案中的资源

票数 0
EN

Drupal用户

发布于 2011-07-20 11:18:43

ORDER BY强制MySQL将选定的行存储在内部临时表中,以便在返回结果集之前对它们进行排序。如果这个结果集超出了MySQL在内存中的处理能力,则临时表必须存储在磁盘上。显然,这严重影响了性能。

内存中临时表的最大大小是tmp_table_sizemax_heap_table_size值的最小值。您可以尝试在my.cnf中增加这些值,看看它是否加快了执行速度。mysqltuner将在这里给您提供有价值的提示。

在我看来,该语句经过了大量(数据库)工作,只返回一个结果行。对其进行优化可以获得显著的性能增益。不幸的是,我现在没有时间。

票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/7309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档