Contar e exibir consultas ao banco de dados


9

Estou procurando uma solução, como posso contar e exibir todas as consultas em um site 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.

Respostas:


10

Você pode colar este bloco de código no functions.phparquivo de tema do WordPress atualmente ativo :

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 </body>e </html>, contendo o número de consultas ao banco de dados e como o log foi usado para recuperar.


Isso me ajuda. Existe também uma solução para exibir as consultas com seu conteúdo? Assim: SELECT * FROM wp_posts Obrigado
pkberlin

11
@derpiet Veja @toschoa resposta .
Michael Ecklund

9

Adicionar …

define( 'SAVEQUERIES', TRUE );

… Ao seu wp-config.phpe inspecione $wpdb->queriesem shutdown. Esse é o gancho mais recente e o único após o qual nenhuma consulta é acionada. Além disso, também funciona wp-admin/.

Código de exemplo como um plug-in:

<?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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.