e.motion
Статьи

MediaWiki performance tuning

Opcode caching

Opcode caches store the compiled output of PHP scripts, greatly reducing the amount of time needed to run a script multiple times. Supported opcode caches are APC, eAccelerator (no longer supported since MW1.19), mmTurck, WinCache and XCache; see $wgMainCacheType.

memcached

The user interface text and other expensive objects can be cached by the opcode user cache or memcached, as will logins and partially completed pages.

If you have enough available RAM, you should use memcached, which will require at least 80MB or more of RAM, about 60MB for code plus whatever you need for cache. If you balance your load across multiple webservers, you should use a dedicated memcached (cluster).

Output caching

MediaWiki pages can be computationally expensive to render. MediaWiki has an optional file caching system that stores the output of rendered pages. For larger sites, using an external cache like Squid or Varnish is preferable to using the file cache.

HTTP caching proxies and HTTP acceleration

Simply put, HTTP accelerators/caching proxies (such as Squid and Varnish) store copies of pages sent out by the web server. When a cached page is requested, the accelerator serves up the copy instead of passing the response on to the web server. This can tremendously reduce the load on the web server. When a page is updated, the copy is removed from the accelerator's cache.

See also this article for instructions on using Apache's mod_disk_cache with MediaWiki.

Configuration settings

Large sites running MediaWiki 1.6 or later should set $wgJobRunRate to a low number, say 0.01. See Manual:Job queue for more information.

mbstring

Although MediaWiki can work without the mbstring PHP library, it is highly recommended for performance reasons (note: mbstring.func-overload configuration option must be off).

Database configuration and setup

MySQL

For a heavy concurrent write load, InnoDB is essential. Set <a title="Manual:$wgAntiLockFlags" href="http://www.mediawiki.org/wiki/Manual:$wgAntiLockFlags">$wgAntiLockFlags</a> = ALF_NO_LINK_LOCK | ALF_NO_BLOCK_LOCK; to reduce lock contention, at the expense of introducing occasional inconsistencies. Use memcached, not the default MySQL-based object cache.

Multiple servers

The database software and web server software will start to fight over RAM on busy MediaWiki installations that are hosted on a single server. A logical step, once other performance optimizations have been made, is to put the database and web server on separate servers (or, in some cases, multiple separate servers.)

HipHop

HipHop is an awesome tool provided by Facebook that takes PHP and does freaky magic to turn it into compilable C++. The resulting binaries are way faster than Zend PHP could ever hope to be. HipHop support isn't complete in MediaWiki, and should not be attempted by the faint hearted.

  • WordPress

Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

e.motion