User:Aaron Schulz/How to make MediaWiki fast

1. Use cache.

2. To localsettings.php, add (replace dirs as needed):  $wgMainCacheType = CACHE_ACCEL; $wgMessageCacheType = CACHE_ACCEL; $wgCacheDirectory = ''; $wgParserCacheType = CACHE_ACCEL; $wgMemCachedServers = array; $wgUseGzip = true; $wgEnableSidebarCache = true; $wgDisableCounters = true; $wgMiserMode = true; $wgCompressRevisions = true; $wgRevisionCacheExpiry = 3*24*3600; $wgParserCacheExpireTime = 14*24*3600; $wgDiff = 'C:/Server/xampp/htdocs/MW/bin/GnuWin32/bin/diff.exe'; $wgDiff3 = 'C:/Server/xampp/htdocs/MW/bin/GnuWin32/bin/diff3.exe'; /***********/ 
 * 1) Shared memory settings
 * 1) NO DB HITS!
 * 1) Text cache
 * 1) Diffs

3. Set $wgCacheDirectory (above) to use interface message caching.

4. Set up squid servers if possible. Otherwise, at least enable file caching.

5. Set up Memcached if possible. If you do, set $wgMainCacheType and $wgParserCacheType to CACHE_MEMCACHED in localsettings.php instead. This is recommended if you have a cluster of servers.

6. Run maintenance/rebuildFileCache.php if you use file caching (not squids).

7. Set $wgJobRunRate to 0 and set up a crontab or shell script to run jobs (like this with this for example). With $wgJobRunRate at 0 and the above changes, you should be able to avoid db hits on many requests.

8. Set $wgDiff and $wgDiff3 to gnu diff utility (download as needed). This is recommended. The default PHP diff code is slow and crashy.

9. Edit the MediaWiki:Aboutsite and MediaWiki:Pagetitle system messages by changing into your site name. This avoids extra parsing on each hit.

10. If you really need hitcounters, use $wgHitcounterUpdateFreq instead of the $wgDisableCounters setting above.

11. In the webserver's php.ini file. Make sure realpath_cache_size is set, perhaps to 512k or more.

12. Consider enabling EnableMMAP and EnableSendfile in httpd.conf (for Apache). Please read the apache docs for NFS and compatibility issues first.

13. [MySQL] Set your mysql server config files to only use server modes corresponding to $wgSQLMode (default is "" for no modes). Restart the mysql server, and then set $wgSQLMode = null.