Di awal setiap halaman yang dilayani oleh WordPress, ada panggilan MySQL untuk mengambil opsi:
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
Karena tidak ada indeks pada autoload
kolom, MySQL harus mencari SEMUA baris.
Saya juga menemukan komentar dari jawaban ini yang mengatakan tidak akan ada peningkatan kinerja bahkan jika ada indeks.
Dalam aplikasi saya, saya menggunakan banyak nilai sementara untuk dijadikan pengganti sesi. Mereka bekerja dengan sangat baik dan saya memiliki rutinitas pengumpulan sampah sendiri. Saya perhatikan bahwa di wp_options
tabel, nilai sementara saya (yang dimulai dengan _transient_
) semua miliki autoload=no
. Saya berharap jumlah baris wp_options
tabel saya meningkat seiring dengan meningkatnya jumlah pengguna secara bersamaan.
Saya ingin tahu mengapa meja dirancang dengan cara ini. Dan haruskah saya membuat indeks untuk kasus khusus saya?
sumber
autoload
kolom.wp_options.autoload
. Sumber: make.wordpress.org/core/2019/10/15/… ... dan ... core.trac.wordpress.org/ticket/24044#comment:87 ... Kudos kepada @DanBUK yang mengusulkan fitur ini pada 2013.Saya menjalankan 3 WP blog pada contoh besar Debian Squeeze dan sedang menyelidiki mengapa mysql macet di host itu pada penggunaan CPU 200% dan beban sistem antara 3 dan 6. Melihat pada 'tampilkan proses daftar' di dalam mysql, kami memahami tabel wp_option terlibat dalam masalah ini sehingga kami mengeksekusi:
Setelah operasi ini, beban mysql seperti yang ditunjukkan di atas turun drastis menjadi 1% dan rata-rata beban contoh sekarang 0,10.
Kami menggunakan beberapa plugin sehingga mungkin ada loop di suatu tempat dalam kode, dan ini mungkin situasi tertentu, tetapi dalam kasus kami perubahan kinerja sangat mencengangkan.
Tabel wp_options kami memiliki 347 baris.
sumber
select *
sekali untuk semua. Alih-alih, meminta setiap opsi, itu sebabnya menempatkan indeks akan membuat perbedaan besar.Sementara @fuxia menerima jawaban yang menyentuh pada beberapa alasan "diklaim" (sebagian besar diklaim oleh karyawan Automattic pada berbagai tiket Trac, dll), alasan mendasar untuk WordPress Core tidak termasuk indeks untuk opsi pengisian otomatis di dalam
wp_options
tabel adalah bahwa Automattic khawatir itu akan berdampak negatif terhadap kinerja database MySQL yang masih menggunakan mesin MyISAM.Secara khusus, mereka menunjuk ke situs web WordPress.org itu sendiri, sebagai database yang sangat lama / kompleks, sebagai contoh situs web yang kinerjanya akan dirugikan oleh indeks semacam itu.
Hampir semua alasan lain untuk tidak menambahkan indeks selama 9 tahun terakhir (ya, sejak 2010 dalam kasus tiket Trac # 14258 dan sejak 2013 dalam kasus tiket Trac # 24044 ) berulang kali terbukti salah oleh puluhan anggota Komunitas WordPress, namun karyawan Automattic yang terlibat berulang kali mengabaikan beberapa tes tolok ukur independen dan kembali ke menyebutkan masalah MyISAM.
Untungnya, pada akhir 2019 dengan PHP 7.2 sekarang versi "default" yang direkomendasikan oleh WordPress Core, dan dengan mesin InnoDB sekarang menjadi default di versi MySQL setelah 5.5 , dan dengan tekanan terus menerus dari berbagai pengembang termasuk @DanBUK yang tetap pada masalah selama bertahun-tahun , Automattic akhirnya menyerah dan memutuskan untuk menambahkan indeks autoload pada WordPress 5.3+ pada November 2019.
Kami di LittleBizzy telah meluncurkan plugin yang dikenal pertama yang secara otomatis menambahkan indeks jika tidak ada, yang masih tersedia di GitHub dan sedang diunduh secara teratur. Harap dicatat bahwa Anda TIDAK LAMA perlu menginstal plugin seperti itu ke tumpukan WordPress Anda jika Anda menjalankan WP Core 5.3 + ...
sumber