Guardar todas las consultas SQL en un registro

Aunque poco frecuente, en casos particulares puede resultar de utilidad el obtener un registro de las consultas SQL que genera WordPress, permitiéndonos localizar aquellas que pueden requerir optimización por nuestra parte o que causan cuellos de botella.

En nuestros servicios la depuración de consultas SQL la podrás hacer de forma sencilla usando PHP X-Ray, que te indicará además el fichero que ejecuta cada consulta, código específico, consulta SQL, el tiempo de ejecución y si tiene un rendimiento problemático.

Como primer paso activamos que las consultas SQL se guarden en una variable, esto se hace añadiendo la siguiente línea al fichero wp-config.php de WordPress.

define('SAVEQUERIES', true);

Importante, la debes añadir antes de:

/* ¡Eso es todo, deja de editar! Feliz blogging */

Y más importante aún, recuerda eliminar los cambios una vez finalices de depurar el problema, el guardar todas las consultas SQL incrementa el uso de memoria RAM por lo que degradará el rendimiento de la aplicación.

Tras esto deberás añadir la siguiente función al fichero functions.php del tema que está activo, lo puedes añadir justo al final de dicho fichero:

add_action('shutdown', 'sql_logger');

function sql_logger() {
    global $wpdb;
    $log_file = fopen(ABSPATH.'/sql_log.txt', 'a');
    fwrite($log_file, "////////////////////////\n\n" . date("F j, Y, g:i:s a")."\n");
    foreach($wpdb->queries as $q) {
        fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");
    }
    fclose($log_file);
}

Esta función guardará todas las consultas SQL en un fichero llamado sql_log.txt localizado en el directorio raíz de WordPress, y lo acompañará con la fecha y hora en la que se produjo cada consulta SQL reflejada.