Trik Berguna Untuk Menemukan Dan Memperbaiki Kueri Basis Data WordPress Lambat
Diterbitkan: 2019-04-17Pertanyaan SQL moderat dapat menghancurkan eksekusi situs pengembangan aplikasi WordPress. Sesekali, pertanyaan moderat adalah efek samping dari SQL yang tidak terstruktur dengan baik yang seharusnya tidak pernah dilakukan seperti itu.
Terlebih lagi, dalam beberapa kasus, pertanyaan moderat, pada kenyataannya, pertanyaan cepat pada titik tertentu—namun saat situs menjadi lebih berpengalaman, penyelidikan menjadi semakin lambat, tidak berdaya untuk tetap mengetahui basis data yang diperluas.
Terlepas dari bagaimana SQL menjadi moderat, orang harus menyelidiki beberapa pendekatan untuk menemukan dan memperbaiki pertanyaan masalah dalam pengembangan aplikasi WordPress. Di sana-sini seseorang mungkin memerlukan aplikasi web tertentu dan mungkin tidak memiliki energi, keterampilan, atau anggaran yang cukup untuk melakukan perbaikan kustom. Membuat tanpa persiapan apa pun bisa menjadi jawaban untuk beberapa masalah, namun bisa memakan waktu lebih lama daripada memulai dari basis kode saat ini. WordPress awalnya terstruktur sebagai tahap blogging, dan terus menjadi luar biasa untuk itu. Namun, itu telah berkembang menjadi sistem manajemen konten (CMS) yang sepenuhnya matang dan, untuk beberapa tujuan, bahkan dapat membuat aplikasi web yang kuat – dengan cepat, dan dengan anggaran yang pada dasarnya lebih rendah daripada peningkatan khusus. Sementara WordPress menawarkan aplikasi pengembangan built-in, itu dapat digunakan untuk aplikasi web, untuk membuatnya lebih berguna. Halaman bawaan dan struktur posting dapat digunakan untuk banyak hal, tetapi jika seseorang membutuhkan informasi dan bidang khusus untuk dimasukkan, dicari atau dipertanyakan, dikendalikan, dan ditampilkan, beberapa pekerjaan tambahan diperlukan.
Menemukan Pertanyaan Lambat
Menemukan asal-usul pertanyaan moderat meliputi dua tahap:
- Mencari tahu pertanyaan mana yang benar-benar moderat.
- Mengidentifikasi program yang mengoperasikannya.
Seseorang harus melihat dua modul dan satu SaaS yang memungkinkan mereka menemukan pertanyaan moderat.
Pemantau Kueri
Untuk memanfaatkan informasi tentang halaman yang sedang dijalankan saat ini, modul ini dapat digunakan. Terlepas dari kumpulan data lengkap tentang aktivitas internal WordPress, ini memberikan rincian poin demi poin tentang:
- Berapa banyak pertanyaan yang muncul atas permintaan ini?
- Pertanyaan mana pada halaman yang membutuhkan waktu paling lama?
- Kapasitas mana yang paling banyak menghabiskan energi dalam pertanyaan SQL?
- Apakah pertanyaan tersebut berasal dari modul, subjek, atau pusat WordPress
Layar permintaan bahkan mengenali pertanyaan sedang dengan konten merah yang menakutkan, yang membuatnya sangat mudah untuk memilih masalah SQL.
Bilah Debug
Instrumen fenomenal lainnya untuk menemukan SQL yang sangat moderat adalah modul Debug Bar yang lama dan tepercaya. Debug Bar menyediakan satu data tentang fungsi internal WordPress ketika halaman dimuat dengan hal-hal seperti:
- Parameter WP_Query
- Permintaan data (menghitung koordinasi aturan perubahan)
- Pertanyaan SQL yang dihasilkan oleh halaman ini
Untuk mengaktifkan SQL berikut di Debug Bar, pengguna harus membuat titik untuk mengizinkan SAVEQUERIES suatu tempat di situs — kemungkinan di wp-config.php
Perhatian: SAVEQUERIES mempengaruhi eksekusi di situs, dan mungkin tidak boleh digunakan pada server generasi. Namun, itu dapat digunakan pada mesin kemajuan.
Menemukan SQL moderat tidak terlalu mudah dengan Debug Bar. Misalnya, itu tidak memberikan tabel yang dapat diurutkan atau fitur pertanyaan moderat untuk pengguna. Apa yang disediakan oleh Debug Bar adalah kapasitas mengikuti yang mengarahkan pengguna secara tepat ke arah asal pertanyaan.
Ini adalah daftar dokumen yang dimuat dan kapasitas yang dihasilkan dalam penyelidikan yang dilakukan. Lebih sering daripada tidak, seseorang tertarik pada bagian terus berjalan mutlak pada daftar; ini adalah tempat pertanyaan moderat dieksekusi dan di mana seseorang harus memulai perburuannya. Hal yang nyaman tentang memiliki pengaturan setiap kapasitas yang mendorong pertanyaan ini adalah dapat mengungkapkan wawasan mengapa SQL dieksekusi dalam hal apa pun.
BaruRelik
NewRelic adalah administrasi yang mengukur dan menyaring pelaksanaan pengembangan aplikasi web, termasuk pengembangan aplikasi WordPress. Administrasi memberikan metrik ton data tentang pelaksanaan situs. Sama sekali tidak sulit untuk kehilangan semua arah dalam informasi yang NewRelic berikan kepada pengguna setiap detail menit untuk pertanyaan SQL.
Ada dua perbedaan penting antara NewRelic dan modul yang kami rujuk sebelumnya:
- NewRelic memberikan lebih banyak wawasan tentang eksekusi PHP, hingga ke perhitungan tepat waktu yang dihabiskan di setiap fungsi
- NewRelic melacak setiap permintaan ke situs tanpa terlihat, sehingga orang dapat merujuknya nanti untuk menemukan SQL moderat. Modul hanya memberinya halaman saat ini.
Sangat penting bahwa NewRelic memiliki tingkat pengaturan gratis yang memberikan data umum tentang pelaksanaan situs, namun seseorang harus naik ke pengaturan berbayar untuk peluang dan tujuan mewah untuk memeriksa permintaan tunggal dan menemukan pertanyaan moderat.
Memahami Query Lambat dengan EXPLAIN
Sampai saat ini, perangkat telah diamankan untuk menemukan pertanyaan moderat. Saat ini harus diketahui mengapa pertanyaan-pertanyaan itu menghambat hal-hal.
Kata kunci MySQL EXPLAIN dapat mengaktifkan, eh, untuk mengklarifikasi apa yang sedang terjadi. Menambahkan EXPLAIN ke awal pertanyaan menunjukkan bagaimana MySQL mengeksekusi pertanyaan. Untuk pertanyaan yang berbelit-belit, EXPLAIN dapat membantu membedakan fokus sedang dalam SQL, misalnya, subkueri sedang atau aktivitas yang sia-sia.
Memperbaiki Pertanyaan Lambat
Karena diketahui bahwa pertanyaannya moderat, dan EXPLAIN telah mengungkapkan kepada pengguna mengapa demikian, kita harus melihat beberapa pilihan untuk memperbaiki masalah mengantuk tersebut.

Opsi 1: Memutar Pertanyaan
Mungkin ada pertanyaan yang membuat layar Edit Posting menjadi sangat lambat. Penyelidikan adalah bagian dari kotak meta Bidang Kustom.
Bagian pasti dari SQL membawa daftar meta_keys dari tabel ks29so_postmeta yang kemungkinan besar tidak dimulai dengan tanda garis bawah. Penjelasan GROUP BY menyiratkan bahwa setiap hasil adalah istimewa.
Menjalankan pertanyaan ini beberapa kali, berikut adalah waktu yang diperlukan:
1,7145 detik
1,7911 detik
1,8076 detik
1,7707 detik
1,8456 detik
Seseorang mungkin mengembangkan kueri yang menghasilkan keluaran serupa. Itu harus dipilih sebagai salah satu dari jenis meta_keys. Luar biasa adalah kata yang setara untuk tertentu, yang kebetulan merupakan penjelasan SQL!
Opsi 2: Menambahkan Indeks
Saat pengguna menjalankan pertanyaan SQL pada tabel MySQL yang ditetapkan, pengguna perlu memeriksa seluruh tabel untuk memahami baris mana yang signifikan untuk pertanyaan tertentu. Ketika meja menjadi besar, pemeriksaan itu mulai memakan waktu cukup lama.
Di situlah data MySQL masuk. Daftar mengambil informasi dalam tabel dan mengaturnya sedemikian rupa sehingga membuat informasi lebih mudah ditemukan. Dengan memilah informasi dengan cara tertentu, file membantu mengurangi ukuran penyaringan yang dilakukan MySQL untuk setiap pertanyaan.
File dapat ditambahkan ke segmen tunggal atau ke berbagai bagian.
Dengan file di meta_key, waktu pertanyaan SQL pertama agak mirip dengan ini:
0,0041 detik
0,0023 detik
0,0030 detik
0,0025 detik
0,0019 detik
Ini sangat cerdas.
Ekspresi peringatan pada file: Setiap kali INSERT membuat kolom atau UPDATE digunakan pada tabel af, daftar ditentukan kembali, yang dapat menjadi aktivitas yang mahal. Catatan membuat membaca dari tabel lebih cepat, namun menulis lebih lambat. Sementara daftar indeks yang ditempatkan dengan benar dapat bekerja dengan sangat baik, seseorang tidak boleh terobsesi dengannya tanpa memeriksa dampak umum daftar tersebut pada database.
Opsi 3: Cache Hasil Kueri
Setelah disadari bahwa ada pertanyaan moderat. Alih-alih mengubah pertanyaan, mungkin ada skenario di mana ia hanya menyingkirkan efek samping dari penyelidikan. Dengan begitu, seseorang akan membatasi seberapa sering penyelidikan dilakukan, dan dia akan lebih sering mendapatkan "izin gratis".
WordPress Transients API adalah salah satu cara untuk memesan kueri. Transien digunakan untuk menyingkirkan konsekuensi dari tugas-tugas yang mahal, misalnya,
- Permintaan ke situs luar (misalnya mendapatkan posting Facebook yang sedang berlangsung)
- Penanganan benjolan yang lambat (misalnya mencari string yang sangat besar dengan artikulasi biasa)
- Pertanyaan basis data yang lambat!
Memilih Pendekatan
Ada sejumlah alternatif yang telah disusun, dan kemungkinan besar ada tujuh belas pendekatan berbeda untuk memahami penyelidikan moderat ini. Pendekatan mana yang harus diambil?
Pilihan 1 (mengubah pertanyaan) menghasilkan hasil yang brilian. Namun, kemungkinan harus dipertimbangkan bahwa penyelidikan yang dimodifikasi umumnya tidak memiliki hasil yang serupa. Seseorang tanpa disadari dapat mengebor kode dengan pertanyaan yang agak tidak masuk akal.
Alternatif 2 (termasuk catatan) tidak selalu mungkin bergantung pada tabel dan bagian yang digunakan oleh pertanyaan. Karena tabel pusat pengembangan aplikasi WordPress, orang harus menekankan pada efek lain dari catatan:
- Apakah rutinitas penyegaran pusat mengharapkan daftar tambahan?
- Apakah menyertakan file akan mengurangi pertanyaan yang berbeda, mirip dengan INSERT dan UPDATE?
Alternatif 3 (menyimpan hasil melalui orang-orang tunawisma) memiliki efek yang tidak signifikan— pengguna tidak perlu mengubah pertanyaan pertama dan tidak perlu menyesuaikan struktur database.
Biasanya, orang memilih opsi 3. Dalam kasus tertentu, ia dapat memilih alternatif lain berdasarkan pertanyaan yang ia perbaiki atau situs tertentu yang mengalami masalah SQL. Tentu saja tidak ada respons yang cocok untuk semua tindakan terhadap sebagian besar masalah eksekusi, jadi salah satu diperbolehkan untuk berbeda dengan keputusan orang lain—atau, coba setiap salah satu dari ketiganya tanpa penundaan sesaat!
Tetap Diperbarui
Ini telah membuat sketsa masalah asli di sini. Kotak Custom Fields pada CSS-Tricks benar-benar merupakan pelanggar untuk beberapa pertanyaan database yang sangat moderat. Ini juga telah membuat sketsa berbagai cara menuju pengaturan potensial.
Memahami ide-ide baru
Ada metodologi berbeda yang dapat diambil seseorang untuk mencoba dan mempercepat eksekusi pertanyaan yang mencakup lebih banyak pekerjaan daripada sekadar mengutak-atik pertanyaan atau memasukkan daftar. Salah satu bagian paling lambat dari pertanyaan ini adalah pekerjaan yang dilakukan untuk menggabungkan tabel untuk beralih dari id klien ke id item, dan seseorang perlu melakukan ini untuk setiap klien.
Seseorang dapat mendenormalisasi informasi dengan membuat tabel yang menyimpan informasi izin, di samping id klien dan id item untuk semua lisensi dan hanya menanyakan hal itu untuk klien tertentu. Seseorang perlu memodifikasi tabel menggunakan pemicu MySQL pada INSERT/UPDATE/DELETE ke tabel lisensi (atau yang lain bergantung pada bagaimana informasi dapat berubah) namun ini akan secara signifikan meningkatkan pelaksanaan mempertanyakan informasi itu.
Jadi, jika berbagai gabungan mengurangi pertanyaan di MySQL, mungkin akan lebih cepat untuk memecah pertanyaan menjadi setidaknya dua artikulasi dan menjalankannya secara independen di PHP dan kemudian mengumpulkan dan menyalurkan hasilnya dalam kode.