The majority of pages of one of my sites can only be accessed by registered users. While these pages do share some common, static content (headers, etc) most of the information on the page is populated specifically for that user using a variety of usermeta, postmeta and custom table data.

Further, a user is unlikely to hit the same page a lot of times. However, there are tens of thousands of users who may wish to be accessing their own information pages simultaneously, so performance is of great concern.

My understanding of cacheing plugins is that they do a great job with relatively static content, such as blog entries or "about us" pages, that change infrequently but must be served up (without any differences or customized info) to a lot of simultaneous requests. In my situation, the real performance "hit" comes once a user has logged in and is accessing their personal information.

How effective are cacheing plugins in this scenario? Are there any other alternatives (in addition to DB optimization) that can help reduce memory and DB load?

2 Answers
2

Caching full pages is not going to do you any good for a situation like you described. Users will update things and expect to see their updates right away -- meaning you spend more server time invalidating cached pages. The database server is likely to be your biggest bottleneck in just about any webapp.

Two things you can do:

Move your Database to a separate server -- ideally this server probably has a ton of memory and it's only job is to serve the database.

Use a more permanent object cached like memcached or APC. WordPress has an object cache baked into the core, but it's lifetime is only a single page load. The two linked object cache backends are "drop ins" that replace that cache with memcached. Any time wp_cache_get is called, memcached/APC will be get hit first before a call is made to the database.

If the plugin can use opcode caching then a great deal. You don't really need a large plugin to take advantage of something like APC, it can be a drop in.

To further explain, each time a PHP generated page is requested, the server must read in the various stuff (code and files) "compile" them into something the machine can understand (opcode). An opcode cache will preserve it in memory so subsequent requests are greatly reduced.

I recommend using APC and throwing lots of RAM at it, you will see a significant improvement.