Drupal网站对数据库服务器的压力由来已久,特别是Views做成的页面是最可能导致负载升高的原因,无论是以前自己服务器上的MySQL还是换用阿里云的RDS。
以前也采取一些缓存的措施来降低负载,但偶尔会出现一些问题,我翻看以前的博客中记录有《Drupal网站Views生成页面Title改为变量的问题》、《一个Drupal网站Views消失的排查》。
后来Drupal 6升级Drupal 7后似乎有些变化,但我一直也没有深究,基本上都是把Views的查询缓存设置为6天,把显示缓存设置为0,在系列网站的xxx.views_default.inc文件中也是这样设置。
前一段时间因为数据库服务器负载经常升高导致Views页面报错或者Views Block出现空白,我把查询缓存设置从6天改为1天,希望出现错误后不会缓存错误达6天,最多1天后会更新。但实际效果并不好,还可能因为6天改为1天后数据库服务器的负载更高。
今天干脆较真试验,把我的博客以及另外一个系列网站拿来做试验,带有PHP语句Header的Views的缓存设置为查询缓存和显示缓存都是6天,再用匿名用户访问多种语言的页面,看Header中PHP设置的meta Keywords、Description、Title都是正常的,那就说明这两种缓存都可以设置为6天(补充:第一次执行PHP是正常的,但刷新后只缓存了$output,并不会再次执行其中设置meta Keywords、Description、Title的PHP代码!所以这种情况下Rendered output缓存是不合适启用的)。
如果还有Views生成的Block,也可以把区块缓存设置为“为所有东西缓存一次”,但也要测试一下,看各种情况下浏览的结果是否与预期一致。
如果是添加了自定义模块的系列网站,Views一般都是放置在模块目录中的一个文件,例如:sites/all/my_module/my_module.views_default.inc ,可以直接修改这个文件:
然后用drush cc all命令批量清理网站缓存,就可以生效了。
这个办法理论是可以利用缓存来降低数据库服务器负载的,实际上是否可行、有多大的效果?还有待观察,我也会观察后继续记录在下面。
评论