Veritabanı Sorgularını Sayma ve Görüntüleme


9

Nasıl bir WordPress sitesindeki tüm sorguları saymak ve görüntülemek bir çözüm arıyorum. İyi bir eklenti olup olmadığını bilen var mı?

Aksi takdirde, konsoldaki sorguları kontrol etmek bir çözüm olacaktır, çünkü konsolla çok çalışıyorum.

Yanıtlar:


10

Bu kod bloğunu şu anda etkin WordPress tema functions.phpdosyanıza yapıştırabilirsiniz :

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

Kod yukarıdaki bloğu, (önce temanın altında bir HTML yorumunu verecek </body>ve </html>veritabanı sorgu sayısını içeren ve onlar almak için aldı log nasıl.


Bu bana yardımcı oluyor. Sorguların içeriği ile birlikte görüntülenmesinin de bir çözümü var mı? Gibi: SELECT * FROM wp_posts Teşekkür ederim
pkberlin

1
@derpiet bakınız @toscho'ın cevabı .
Michael Ecklund

9

Ekle …

define( 'SAVEQUERIES', TRUE );

... adresinden Müşteri wp-config.phpve incelemek $wpdb->queriesde shutdown. Yani son kanca ve bir tek hayır sorgular ateş edildiği ardına. Ayrıca, üzerinde wp-admin/de çalışır .

Eklenti olarak örnek kod:

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

Güncelleme

Biraz daha düşündükten sonra, ihtiyaçlarım için daha uygun başka bir eklenti yazdım - ve muhtemelen konsolu tercih ederseniz.

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

Dosyayı tail( Git yüklüyse Windows'ta kullanılabilir) ile izleyin :

$ tail -f query-log.sql -n 50
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.