[wp-trac] [WordPress Trac] #22301: Performance problem with Recent Comments widget
WordPress Trac
noreply at wordpress.org
Mon Oct 29 06:07:15 UTC 2012
#22301: Performance problem with Recent Comments widget
-----------------------------+--------------------------
Reporter: pento | Type: defect (bug)
Status: new | Priority: normal
Milestone: Awaiting Review | Component: Performance
Version: trunk | Severity: normal
Keywords: dev-feedback |
-----------------------------+--------------------------
When a comment is posted (or the status of a comment changes), the
`widget_recent_comments`cache item is invalidated, which the Recent
Comments widget uses to populate the widget content. On the next widget
display, it will call `get_comments()` to repopulate the cache.
The problem occurs when you have a very large number of comments, the
MySQL query will use the `(comment_approved, comment_date_gmt)` index, but
if MySQL has to scan too many rows in an index, it'll switch to table scan
instead. As the `comment_approved` column is mostly the same value, this
will almost always happen. This is compounded by the query occurring on
every page load until the cache is re-populated - if the query takes 60
seconds to run, there could potentially be hundreds of instances of the
same query running.
So, we need a solution that either hides or eliminates how slow this query
can be, and only runs it (at most) once per new comment.
After discussing this with @matt, we have a couple of ideas:
1. Move this query to a `wp_schedule_single_event()` call, which has the
bonus of ensuring only one is scheduled at any given time. The downside is
that it may cause the cache to be outdated on a low traffic site.
2. Keep a queue of recent comments in cache, and push a new one onto the
queue when posted. This avoids the query entirely, but there would be a
race condition if two comments were posted at nearly the same time - one
of them could be left out of the queue entirely.
--
Ticket URL: <http://core.trac.wordpress.org/ticket/22301>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list