我们在具有MySQL 5.1服务器的Ubuntu LTS虚拟机(VMWare)上的Drupal 7在同一物理服务器上,但在不同的虚拟机上。
Drupal网站目前正在开发中,因此几乎没有stream量,尽pipeping和shell访问速度很快,但Drupal站点运行速度非常缓慢(加载任何页面大于5秒)。 经过这里和其他地方的研究,我明白问题在于SQL是通过networking接口访问的,而Drupal显然做得非常糟糕。
我已经检查了DNSparsing,并且从Drupal端(db主机是由ip给出的,在/ etc / hosts文件中有一个dns条目),也不应该从MySQL端(skip-name-resolve在,drupal客户端是通过IP地址授予访问权限)。
Drupal的开发querylog说:
在5993.89毫秒内执行了336个查询。 突出显示超过5毫秒的查询。 页面执行时间为7015.35毫秒。 使用的内存:devel_boot()= 5.53 MB,devel_shutdown()= 93.35 MB,PHP峰值= 94 MB。
奇怪的是,对于单个页面加载大约2/3的查询是快速的,其他的是非常缓慢的:
1.765 DrupalDatabaseCache::getMultipleP AE SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0) default 575.825 DrupalDatabaseCache::getMultipleP AE SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0) default 13.585 DrupalDatabaseCache::getMultipleP AE SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0) default 466.9914 DrupalDatabaseCache::getMultipleP AE SELECT cid, data, created, expire, serialized FROM cache WHERE cid IN (:cids_0) default 1.841 drupal_lookup_pathP AE SELECT source FROM url_alias WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language ASC, pid DESC default
通过启用Drupalcaching来解决匿名访问的情况。 但整个pipe理界面仍然很慢。
现在的公司政策是分开安装数据库服务器。 有没有其他的select来加速Drupal?
默认的数据库configuration是驱动程序“mysql”,也许我应该将其更改为“mysqli”或“pdo_mysql”? 但是,如果我将其更改为mysqli,则database.inc会抱怨相关驱动程序不存在 – 在drupal中专门安装的任何东西,因为mysqli和pdo在PHP本身中都是启用的。
我认为有两个方面可以优化您的网站:
你有没有在drupal.org上检查pipe理网站的性能 ?
我遇到了同样的问题,并使用谷歌浏览器PageSpeed和YSlow来找出我的问题。
基本上,我正在执行以下步骤:
尝试安装PHP的APC ,设置APC的shm大小为256Mb(有很多指导)。 然后确保Apache的KeepAlive为On,并且也激活Apache压缩(通过Apache mod_deflate)。
有几件事你可以做:
/etc/my.cnf调整mysqld性能:
尝试探索以下内容:
我怀疑是PHP没有足够的内存运行。 检查PHP.INI文件中的memory_limit 。 切换到-1(无限的内存),看看是否提高性能。 如果不是的话,那么你需要很长的时间。 这里是我发表的关于改进Drupal性能的文章的链接
由于这个问题还在吸引人的答案,我会自己回答,因为那时我解决了这个问题。
基本上,只要我把Mysql移到与Drupal相同的虚拟机上,一切都变得如此快速。 所以问题是Drupal为每个页面加载=糟糕的体系结构发布了大量的SQL查询。