Contar e exibir consultas de banco de dados

9

Estou procurando uma solução para contar e exibir todas as consultas em um site do WordPress. Alguém sabe, se existe um bom plugin?

Caso contrário, seria uma solução para verificar as consultas no console, porque estou trabalhando muito com o console.

    
por pkberlin 29.10.2012 / 16:08

2 respostas

10

Você pode colar este bloco de código no seu tema WordPress atualmente ativo functions.php file:

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');

O bloco de código acima, renderizará um comentário HTML no rodapé do seu tema (antes de </body> e </html> , contendo o número de consultas ao banco de dados e como o log que eles levaram para recuperar.

    
por Michael Ecklund 29.10.2012 / 16:19
9

Adicione…

define( 'SAVEQUERIES', TRUE );

… ao seu wp-config.php e inspecione $wpdb->queries at shutdown . Esse é o gancho mais recente e o somente , após o qual nenhuma consulta é disparada. Além disso, funciona em wp-admin/ também.

Exemplo de código como um plugin:

<?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
    );
}

Atualizar

Depois de pensar um pouco mais sobre isso, escrevi outro plugin mais adequado às minhas necessidades - e provavelmente o seu, se você preferir o console.

<?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;
}

Acompanhe o arquivo com tail (disponível no Windows, se o Git estiver instalado ):

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