Caching mechanisms
- Caching Mechanisms in MediaWiki 1.40
This article details the various caching mechanisms available in MediaWiki 1.40, and how to configure them for optimal performance. Effective caching is crucial for a responsive and scalable wiki, reducing database load and improving user experience. This guide is intended for system administrators and experienced wiki operators.
Understanding Caching in MediaWiki
MediaWiki employs multiple layers of caching to minimize the need to repeatedly generate content from the underlying database. These layers range from object caching to page caching, each serving a specific purpose. Properly configuring these caches can significantly improve wiki performance, especially under high load. Before diving into the specifics, understand the general principle: caching stores the results of expensive operations (like database queries or complex template parsing) so that future requests for the same data can be served from the cache, which is much faster.
Object Caching
Object caching stores individual PHP objects, such as database query results, parser cache entries, and other intermediate data. This is the first line of defense against database load. MediaWiki supports several backends for object caching:
- Memcached
- Redis
- APC (Advanced PHP Cache) - *Deprecated in newer PHP versions, consider alternatives.*
The choice of backend depends on your server infrastructure and performance requirements.
Object Cache Configuration
The `$wgMemCachedServers` configuration variable in `LocalSettings.php` defines the Memcached servers. For Redis, use `$wgRedisServers`. For APC, the configuration is largely automatic.
Here's an example configuration using Memcached:
```wiki $wgMemCachedServers = array(
'127.0.0.1:11211'
); ```
Here's an example using Redis:
```wiki $wgRedisServers = array(
'127.0.0.1:6379'
); ```
For optimal performance, ensure your object cache has sufficient memory allocated. Monitor cache statistics using tools provided by your chosen backend.
Object Cache Statistics
You can view object cache statistics via the Special:Statistics page. This page provides information such as hit rate, miss rate, and memory usage.
Page Caching
Page caching stores the fully rendered HTML output of wiki pages. This drastically reduces the load on the application server, as it avoids re-rendering the page for each request. MediaWiki offers two primary page caching methods:
- Varnish (Reverse Proxy Cache)
- Internal Page Cache
Varnish Configuration
Varnish is a powerful reverse proxy cache that sits in front of your MediaWiki server. It caches static content and frequently accessed pages, serving them directly to users without involving the MediaWiki application server. Configuring Varnish requires expertise in Varnish Configuration Language (VCL).
Here's a simplified example VCL snippet:
```wiki vcl 4.0;
backend default {
.host = "127.0.0.1"; .port = "80";
}
sub vcl_recv {
if (req.http.Authorization || req.http.Cookie) { return (pass); } if (req.url ~ "\.(png|jpg|jpeg|gif|css|js)$") { return (hash); } return (hash);
}
sub vcl_backend_response {
set beresp.ttl = 1h; return (deliver);
} ```
This VCL configuration caches static files (images, CSS, JavaScript) and pages for one hour. Adjust the TTL (Time To Live) based on your content update frequency.
Internal Page Cache Configuration
MediaWiki's internal page cache stores rendered pages in the filesystem. This is a simpler alternative to Varnish, but less flexible and typically less performant.
The `$wgMainCacheType` configuration variable in `LocalSettings.php` controls the internal page cache type.
Cache Type | Description |
---|---|
`default` | Uses the default filesystem cache. |
`database` | Stores cached pages in the database (not recommended for performance). |
`memcached` | Stores cached pages in Memcached. |
The `$wgMainCacheDirectory` variable defines the directory where cached pages are stored. Ensure this directory is writable by the web server user.
Database Caching
While not a direct cache, optimizing database queries is critical for performance. Database replication and careful index creation can improve query speeds, effectively acting as a form of caching. Using a database like MySQL or PostgreSQL efficiently is paramount.
Database Query Cache
The database server itself often has a query cache. Ensure this is enabled and appropriately sized for your workload. However, be aware that the query cache can be invalidated frequently by write operations, so monitor its effectiveness.
Transformer Caching
MediaWiki uses transformers to modify content, such as syntax highlighting or image resizing. These transformations can be computationally expensive. Caching the results of these transformations avoids redundant processing. Configuration is generally handled automatically, but monitoring the Special:TransformerStats page is helpful.
Configuration Summary Table
Configuration Variable | Location | Description |
---|---|---|
`$wgMemCachedServers` | `LocalSettings.php` | Specifies the Memcached servers. |
`$wgRedisServers` | `LocalSettings.php` | Specifies the Redis servers. |
`$wgMainCacheType` | `LocalSettings.php` | Specifies the internal page cache type. |
`$wgMainCacheDirectory` | `LocalSettings.php` | Specifies the directory for the internal page cache. |
VCL Configuration | Varnish Configuration Files | Configures the Varnish reverse proxy cache. |
Monitoring and Tuning
Regularly monitor cache statistics using the tools provided by your chosen caching backends and the Special:Statistics page in MediaWiki. Adjust cache sizes and TTLs based on your wiki's traffic patterns and content update frequency. Use a profiler to identify performance bottlenecks and optimize database queries.
Further Reading
Intel-Based Server Configurations
Configuration | Specifications | Benchmark |
---|---|---|
Core i7-6700K/7700 Server | 64 GB DDR4, NVMe SSD 2 x 512 GB | CPU Benchmark: 8046 |
Core i7-8700 Server | 64 GB DDR4, NVMe SSD 2x1 TB | CPU Benchmark: 13124 |
Core i9-9900K Server | 128 GB DDR4, NVMe SSD 2 x 1 TB | CPU Benchmark: 49969 |
Core i9-13900 Server (64GB) | 64 GB RAM, 2x2 TB NVMe SSD | |
Core i9-13900 Server (128GB) | 128 GB RAM, 2x2 TB NVMe SSD | |
Core i5-13500 Server (64GB) | 64 GB RAM, 2x500 GB NVMe SSD | |
Core i5-13500 Server (128GB) | 128 GB RAM, 2x500 GB NVMe SSD | |
Core i5-13500 Workstation | 64 GB DDR5 RAM, 2 NVMe SSD, NVIDIA RTX 4000 |
AMD-Based Server Configurations
Configuration | Specifications | Benchmark |
---|---|---|
Ryzen 5 3600 Server | 64 GB RAM, 2x480 GB NVMe | CPU Benchmark: 17849 |
Ryzen 7 7700 Server | 64 GB DDR5 RAM, 2x1 TB NVMe | CPU Benchmark: 35224 |
Ryzen 9 5950X Server | 128 GB RAM, 2x4 TB NVMe | CPU Benchmark: 46045 |
Ryzen 9 7950X Server | 128 GB DDR5 ECC, 2x2 TB NVMe | CPU Benchmark: 63561 |
EPYC 7502P Server (128GB/1TB) | 128 GB RAM, 1 TB NVMe | CPU Benchmark: 48021 |
EPYC 7502P Server (128GB/2TB) | 128 GB RAM, 2 TB NVMe | CPU Benchmark: 48021 |
EPYC 7502P Server (128GB/4TB) | 128 GB RAM, 2x2 TB NVMe | CPU Benchmark: 48021 |
EPYC 7502P Server (256GB/1TB) | 256 GB RAM, 1 TB NVMe | CPU Benchmark: 48021 |
EPYC 7502P Server (256GB/4TB) | 256 GB RAM, 2x2 TB NVMe | CPU Benchmark: 48021 |
EPYC 9454P Server | 256 GB RAM, 2x2 TB NVMe |
Order Your Dedicated Server
Configure and order your ideal server configuration
Need Assistance?
- Telegram: @powervps Servers at a discounted price
⚠️ *Note: All benchmark scores are approximate and may vary based on configuration. Server availability subject to stock.* ⚠️