MediaWiki中的各种缓存(Cache)设置
--James Qi 2009年11月6日 (五) 10:40 (CST)
网站服务器搬到武汉电信机房后,我们对服务器硬件进行了调整,然后前几天继续进行软件设置方面的调整,不过因为一些技术问题没有解决好,前几天又曾经发生访问困难的情况,特别是MySQL数据库持续让服务器的内存、CPU占用过高。仅仅调整MySQL的配置文件没有什么作用,无论怎么调整,情况没有特别的好转也没有特别的恶化。
于是还要在其它方面想一些办法,包括简化一些应用的功能和利用更多的缓存,下面来把缓存情况总结一下:
MediaWiki是纯动态网站,每个页面都需要调用数据库数据来生成,这必定会使访问变慢,但该软件设计时可以使用多个层次、多方面的缓存机制,包括页面缓存、应用缓存、PHP缓存:
页面缓存
让前端截留大部分重复的访问,可以用通用的Squid反向代理(还有一种叫Varnish的软件,功能好像类似),将匿名用户访问过的常见内容缓存起来提供给后来的访问者以便加速访问,还有MediaWiki本身自带的file caching,这种文件缓存方式类似国内的一些论坛软件生成.html的静态HTML文件,Apache处理起来很快,也不需要读取数据库内容。
一般是推荐大型网站采用专门Squid服务器,Wikipedia甚至使用数百台的大规模Squid阵列。小型网站采用File Cache简单一些。我们现在的网站是干脆采用了两级页面缓存,Squid和File Cache都用。不过需要注意更新机制以及File Cache中保存的报错页面的处理。
应用缓存
页面缓存主要是针对匿名访问用户,但对于注册登录用户(或者匿名用户第一次访问以及每次缓存更新后的第一次访问)来说,还可以使用更多的缓存机制,可以利用通用的eAccelerator或者Memcached的办法,也可以缓存到数据库中。
可以缓存下面几类信息:
- $wgMainCacheType 对于通用对象
- $wgParserCacheType 对于解析对象
- $wgMessageCacheType 对于界面信息对象
我们网站的eAccelerator曾经用过,后来调试其它功能时取消了没有恢复。Memcache还没有用过。目前主要是通过数据库方式来做缓存的,因为还是要存取MySQL所以效果可能比前两种要差一些。
PHP缓存
PHP代码的预编译,这个我不太懂,据说可以稍微减少PHP代码的执行时间,维基百科系列网站是使用的APC技术。
我们还没有采用。
其它缓存
Manual:Configuration_settings#Cache这里汇总了MediaWiki的各种缓存设置,包括一些Sidebar缓存、Interwiki缓存等细节。
除了标准的MediaWiki程序以外,在扩展程序方面,动态页面列表(Dynamic Page List)无疑是一个非常消耗数据库资源的功能,但如果不用的话,很多功能无法实现,我们只有在注意保持网站基本功能的前提下精简一些DPL扩展的使用,另外,最近还查到DPL本身也可以利用缓存机制,详细情况:allowcachedresults、dplcache,我们找到这个缓存功能后已经运用到网站中,前段时间MediaWiki 1.15中包含DPL的页面都不产生静态文件缓存页面的,在Local设置“ExtDynamicPageList::$respectParserCache = true;”后现在也生成了HTML文件,而在MediaWiki 1.10中没有找到整体设置的办法,就暂时修改各个调用DPL的页面及模板。
相关问题
另外,还看到一些资料中说有几种Expensive功能,对数据库资源消耗大,它们是:
- {{#ifexist:}} (来自ParserFunctions扩展)
- {{PAGESINCATEGORY}}/{{PAGESINCAT}} (魔术字)
- {{PAGESIZE}} (魔术字)
后两者是MediaWiki 1.10以后推出的,我们网站上并没有采用,而前一个是ParserFunctions扩展中的很有用一个功能,我们在各个网站中采用了不少,现在发现有一些是不必须的,就在逐步检查、减少这个功能的使用,希望也能对负载情况有所缓解。
还有MySQL数据库本身我们安装使用了几年时间没有整理过,InnoDB文件系统早就超过了当初的尺寸,也还需要另外找一个时间来进行维护整理。
参考信息
- Manual:Cache
- Manual:Squid_caching
- Manual:Varnish_caching
- Manual:File_cache
- Memcached
- settings Cache
- Cache_strategy
- allowcachedresults
- dplcache
标签:MediaWiki、Cache、缓存、MySQL。 |
相关内容:
|