Contar y mostrar consultas de base de datos

9

Estoy buscando una solución sobre cómo puedo contar y mostrar todas las consultas en un sitio de WordPress. ¿Alguien sabe si hay un buen complemento?

De lo contrario, sería una solución revisar las consultas en la consola, porque estoy trabajando mucho con la consola.

    
pregunta pkberlin 29.10.2012 - 16:08

2 respuestas

10

Puedes pegar este bloque de código en tu archivo de tema de WordPress actualmente activo functions.php :

function wpse_footer_db_queries(){
    echo '<!-- '.get_num_queries().' queries in '.timer_stop(0).' seconds. -->'.PHP_EOL;
}
add_action('wp_footer', 'wpse_footer_db_queries');

El bloque de código anterior, generará un comentario HTML en el pie de página de su tema (antes de </body> y </html> , que contiene la cantidad de consultas de la base de datos y el registro que tardaron en recuperarse.

    
respondido por el Michael Ecklund 29.10.2012 - 16:19
9

Añadir ...

define( 'SAVEQUERIES', TRUE );

... a su wp-config.php , e inspeccione $wpdb->queries en shutdown . Ese es el último gancho y el solo uno después del cual no se activan las consultas. Además, también funciona en wp-admin/ .

Código de ejemplo como complemento:

<?php
/**
 * Plugin Name: T5 Inspect Queries
 * Description: Adds a list of all queries at the end of each file.
 *
 * Add the following to your wp-config.php:

define( 'WP_DEBUG',         TRUE );
define( 'SAVEQUERIES',      TRUE );

 */

add_action( 'shutdown', 't5_inspect_queries' );

/**
 * Print a list of all database queries.
 *
 * @wp-hook shutdown
 * @return  void
 */
function t5_inspect_queries()
{
    global $wpdb;

    $list = '';

    if ( ! empty( $wpdb->queries ) )
    {
        $queries = array ();
        foreach ( $wpdb->queries as $query )
        {
            $queries[] = sprintf(
                '<li><pre>%1$s</pre>Time: %2$s sec<pre>%3$s</pre></li>',
                nl2br( esc_html( $query[0] ) ),
                number_format( sprintf('%0.1f', $query[1] * 1000), 1, '.', ',' ),
                esc_html( implode( "\n", explode(', ', $query[2] ) ) )
            );
        }

        $list = '<ol>' . implode( '', $queries ) . '</ol>';
    }

    printf(
        '<style>pre{white-space:pre-wrap !important}</style>
        <div class="%1$s"><p><b>%2$s Queries</b></p>%3$s</div>',
        __FUNCTION__,
        $wpdb->num_queries,
        $list
    );
}

Actualizar

Después de pensarlo un poco más, he escrito otro complemento más adecuado para mis necesidades, y probablemente el tuyo, si prefieres la consola.

<?php
/**
 * Plugin Name: T5 Log Queries
 * Description: Writes all queries to '/query-log.sql'.
 * Plugin URI:  http://wordpress.stackexchange.com/a/70853/73
 * Version:     2012.11.04
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 * Licence:     MIT
 */

add_filter( 'query', 't5_log_queries' );

/**
 * Write the SQL to a file.
 *
 * @wp-hook query
 * @param   string $query
 * @return  string Unchanged query
 */
function t5_log_queries( $query )
{
    static $first = TRUE;
    // Change the path here.
    $log_path = apply_filters(
        't5_log_queries_path',
        ABSPATH . 'query-log.sql'
    );
    $header = '';

    if ( $first )
    {
        $time    = date( 'Y-m-d H:i:s' );
        $request = $_SERVER['REQUEST_URI'];
        $header  = "\n\n# -- Request URI: $request, Time: $time ------------\n";
        $first   = FALSE;
    }

    file_put_contents( $log_path, "$header\n$query", FILE_APPEND | LOCK_EX );

    return $query;
}

Rastrea el archivo con tail (disponible en Windows si Git está instalado ):

$ tail -f query-log.sql -n 50
    
respondido por el fuxia 29.10.2012 - 17:02

Lea otras preguntas en las etiquetas