[wp-trac] [WordPress Trac] #14859: WP-DB Add query_done Action for Performance Logging Plugins
WordPress Trac
wp-trac at lists.automattic.com
Mon Sep 13 05:48:50 UTC 2010
#14859: WP-DB Add query_done Action for Performance Logging Plugins
-------------------------+--------------------------------------------------
Reporter: sexytyranno | Owner:
Type: enhancement | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Database | Version: 3.0.1
Severity: normal | Keywords:
-------------------------+--------------------------------------------------
Attached is a patch I'm using locally to implement some performance
logging with WP queries. I often use this in combination with a plug-in to
determine what's causing a site to slow down (in cases where it's hard to
reproduce it).
I've also extended the logged query data to have a "time_start" value as
the 4th parameter to the logged query data (wpdb::queries), as knowing
when a query started running can add perspective to page loads, which
could otherwise be lost. The additional cost of this fourth parameter is
nominal. (1000 queries results in maybe 10KB memory, assuming a 64-bit
decimal encoding, plus the potential added array overhead)
This additional tidbit of information can be useful in narrowing down
where exactly a slow-down is occurring if it's not database related, as it
lets someone analyzing the data know between these two queries there was a
large delay somewhere within the PHP code, and we have the two caller
values to understand what was happening at the time.
PLUGIN DEVELOPER CONCERNS:
Due to the potential issues developers may encounter, it should be
documented that any responder to query_done should
- USE IT ONLY WHEN ABSOLUTELY NECESSARY. Additionally, PROCESSING DONE
WITHIN A QUERY_DONE RESPONDER SHOULD BE *MINIMAL*. query_done has the
potential to be called many times after plug-ins are all loaded, and
misuse of it can cause severe performance issues.
- Not use the calling $wpdb, as it will corrupt the state of wpdb,
breaking the site (including the admin log-in section). If you want to log
to the database, you must not even use the wpdb::dbh. You should
instantiate your own "local" wpdb, or spin your own simple mysql_connect +
mysql_select_db + mysql_query.
- If they're using an instance of WPDB to log the performance output, they
MUST use a handler-specific flag indicating that they're currently
responding to one, to avoid creating infinite recursion. Not using such a
flag will cause PHP to crash.
--
Ticket URL: <http://core.trac.wordpress.org/ticket/14859>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list