Bagaimana saya bisa menemukan sumber permintaan lambat di Wordpress?

7

Saya memiliki situs WordPress dengan lebih dari 8000 posting dan setiap kali saya menambahkan yang baru situs menjadi tidak responsif. Saya memeriksa log query MySQL lambat dan menemukan bahwa ia melakukan pemilihan yang mengembalikan sebagian besar baris di tabel posting dan mengambil banyak waktu untuk mengeksekusi.

Ini adalah sebuah contoh:

Query_time: 149.702704  
Lock_time: 0.000078  
Rows_sent: 4699  
Rows_examined: 9398  
Rows_affected: 0  
Rows_read: 4699
use 488726_wp;

SELECT `ID`, `post_author`, `post_date`, `post_date_gmt`, `post_status`, `post_name`, `post_modified`, `post_modified_gmt`, `post_parent`, `post_type`
    FROM `wp_posts` 
        WHERE ( (post_status = 'publish' AND (post_type = 'post' OR post_type = ''))  
            OR  (post_status = 'publish' AND post_type = 'page') )  
        AND post_password='' 
        ORDER BY post_modified DESC;

Bagaimana saya bisa menemukan sumber pertanyaan ini?

holiveira
sumber

Jawaban:

4

Coba gunakan plugin ini http://wordpress.org/extend/plugins/debug-queries/ untuk memeriksa kinerja kueri basis data Anda. Ini menunjukkan banyak detatils tentang setiap kueri yang dibuat dan waktu kueri yang dibutuhkan untuk menyelesaikan dan waktu yang dibutuhkan untuk membuat seluruh halaman.

Sisir
sumber
plugin juga menampilkan Call From yang mungkin membuat Anda mengerti dari mana permintaan itu dilakukan.
Sisir
2

Yang mungkin ingin Anda lakukan adalah melakukan EXPLAIN pada kueri seperti ini:

EXPLAIN SELECT ID, post_author, post_date,
post_date_gmt, post_status, post_name,
post_modified, post_modified_gmt, post_parent,
post_type FROM wp_posts
WHERE ( (post_status = 'publish' AND (post_type = 'post' OR post_type = ''))
OR (post_status = 'publish' AND post_type = 'page') )
AND post_password='' ORDER BY post_modified DESC;

Ini akan mengungkapkan pola akses yang diambil oleh MySQL adalah mengumpulkan data yang Anda butuhkan.

Namun, hanya menatap klausa WHERE dan ORDER BY, saya ingin membuat saran berikut: buat indeks yang dapat membantu mempercepat kueri. Karena post_status dan post_type memiliki nilai statis dalam kueri dan post_modified memberikan urutan pengurutan untuk dua kolom tersebut, cobalah indeks ini:

ALTER TABLE wp_posts ADD INDEX (post_status,post_type,post_modified);

Cobalah !!!

RolandoMySQLDBA
sumber
0

Coba plugin berikut, Query Interface , yang akan memungkinkan Anda menampilkan kueri serta memberi Anda antarmuka di mana Anda juga dapat memeriksa apa yang diambil oleh kueri dengan memeriksa indeks atau penjelasannya.

Zeeshan Khan
sumber