Conta e visualizza query database


9

Sto cercando una soluzione su come posso contare e visualizzare tutte le query in un sito WordPress. Qualcuno sa, se esiste un buon plugin?

Altrimenti sarebbe una soluzione controllare le query sulla console, perché sto lavorando molto con la console.

Risposte:


10

Puoi incollare questo blocco di codice nel functions.phpfile del tema WordPress attualmente attivo :

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

Il blocco di codice sopra, renderà un commento HTML nel piè di pagina del tuo tema (prima </body>e </html>, contenente il numero di query del database e il modo in cui hanno preso il log per recuperare.


Questo mi aiuta. Esiste anche una soluzione per visualizzare le query con il suo contenuto? In questo modo: SELECT * FROM wp_posts grazie
pkberlin,

1
@derpiet Vedi @toschola risposta .
Michael Ecklund,

9

Inserisci …

define( 'SAVEQUERIES', TRUE );

... al tuo wp-config.php, e ispeziona $wpdb->queriesa shutdown. Questo è l'ultimo hook e l' unico dopo il quale non vengono attivate query. Inoltre, funziona wp-admin/anche su .

Codice di esempio come 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
    );
}

Aggiornare

Dopo averci pensato un po 'di più, ho scritto un altro plugin più adatto alle mie esigenze, e probabilmente al tuo se preferisci la 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;
}

Traccia il file con tail(disponibile su Windows se è installato Git ):

$ tail -f query-log.sql -n 50
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.