drupal_look_path()
的查询时,查询数量减少到了约400次。我还对mysql(my.cnf
)文件进行了一些积极的更改,但仍然有许多相同的查询在user_load()
函数中反复运行。我启用了60到70个模块,它们都很有用,我不能移除这些模块。尽管如此,网站仍然运行缓慢,需要大约10到15秒的时间。现在我不知道为什么网站运行如此缓慢。请问:
- 是因为Drupal有大量的PHP代码吗?
- 是因为每个页面都会触发如此多的查询吗?
- InnoDB引擎是否可以提高性能?
drupal_look_path()
的查询时,查询数量减少到了约400次。我还对mysql(my.cnf
)文件进行了一些积极的更改,但仍然有许多相同的查询在user_load()
函数中反复运行。我启用了60到70个模块,它们都很有用,我不能移除这些模块。尽管如此,网站仍然运行缓慢,需要大约10到15秒的时间。现在我不知道为什么网站运行如此缓慢。请问:
每个请求400个查询是自杀行为(即使是50+)。
您应该实现一些HTML缓存器。我的网站通常甚至不需要进行数据库连接。它只需在文件中启用已缓存的HTML。
以下是需要注意的一些问题:
安装像Yslow/PageSpeed这样的工具,查看10-15秒钟中客户端和服务器时间所占的比例。
安装XhProf(在开发站点上,而不是在实际运行的站点上),再加上Devel模块,查看哪些函数使用了最多的时间。首先解决这些问题。编辑:现在提供链接:http://groups.drupal.org/node/82889
使用Pressflow可能有所帮助,但由于您已经使用了path.inc补丁,所以可能帮助不大。
您提到安装了memcache。您是否还安装了memcache模块,并配置了缓存插件以使用memcache?
编辑:是的,切换到InnoDB可能会有所帮助。 InnoDB的主要性能优势之一是行级锁定(而不是MyISAM表级锁定),这意味着针对相同表格的多个INSERT / UPDATE查询仅在必要时才会互相阻塞。然而,InnoDB默认情况下表现得并不好,您确实需要针对特定网站调整mysql配置。因此,这是一个需要仔细考虑、在开发站点上进行测试和优化后才应采取的步骤。已经有关于InnoDB调整的各种问题在本网站和其他地方提出过...
除此之外,其他问题都是特定于网站并取决于您正在使用的模块。但尤其是像复杂的节点访问设置和多语言(i18n!)这样的事情往往会导致查询变慢和/或查询变得非常多。
并非所有模块都使用性能设置区域中可以开启的缓存机制。值得尝试确定哪些模块正在执行最慢的查询,并尝试让开发人员改进它们。
或者,检查是否可以通过减少模块数量来实现目标。某些模块在功能上有所重叠,因此您可能可以重新组织网站的功能方式。
此外,您需要查看MySQL设置是否允许足够的内存来执行这些查询。大多数MySQL发行版都带有不同版本的my.ini,标记为“small”、“medium”、“huge”等。将“huge”复制到my.ini(首先备份旧文件),然后重新启动DB以查看是否将所有缓存大小最大化会有所不同。您可能会遇到瓶颈,但很难确定哪个设置导致了问题。
对于PHP也是如此。在php.ini中将memory_limit设置为500MB或其他值,然后查看是否有所帮助。当然,根据您的托管安排,您可能无法执行此操作,但如果可以,它将消除一个可能的原因(或不是)。
您的Drupal网站的性能还取决于您的托管平台是否针对Drupal进行了良好的调整。Drupal需要对LAMP堆栈组件进行特殊优化。您可以尝试使用专门面向Drupal的托管公司http://www.drupalspecific.com以使您的网站运行更快。