Apa strategi yang bagus untuk merencanakan pertumbuhan DB Wordpress?

9

Berharap untuk mendapatkan umpan balik tentang topik mengoptimalkan dan tetap di atas kinerja sebagai database WordPress tumbuh ... untuk melukis gambar .... katakanlah Anda memiliki situs MU WordPress / Buddypress yang dimulai pada sekitar 150kb (vanilla install) ... seiring waktu pengguna menambahkan blog, forum, posting, dan komentar dan basis data tumbuh menjadi 5mb .... kemudian 10mb tahun berikutnya .... Juga dengan asumsi bahwa kontrol hosting adalah pengaturan colocated standar seperti Cpanel atau Plesk.

  • Pada titik apa jumlah entri dalam database memengaruhi kinerja situs web front-end?
  • Apa yang dapat Anda lakukan sebagai pengelola situs web agar ini berjalan dengan lancar seiring pertumbuhan basis data Anda?
  • Apa yang dapat Anda harapkan dari segi kinerja setelah tahun ke-5 ketika basis data Anda 500 - 600mb besar?

Terima kasih atas umpan balik yang Anda miliki tentang menjaga kapal tetap ketat.

Salam,

S.

Simon
sumber
3
Anda telah mengajukan 7 pertanyaan dan hanya menerima 1. Bukan catatan yang baik. :-(
8
25mb bukan apa-apa. Anda harus khawatir tentang ukuran basis data saat mencapai GB.
Dunhamzzz
Terima kasih atas tanggapan Anda. Jika kami mengalami masalah dengan kinerja pada 500 mb, mungkin itu perusahaan hosting kami. PS Kembali dan menerima jawaban di seluruh pertanyaan.
Simon

Jawaban:

4

Pertanyaan spesifik Anda:

1) Tidak ada batasan ketat untuk "jumlah entri" yang mungkin dimiliki oleh DB sebelum kinerja terpengaruh. Kinerja sangat tergantung pada perangkat keras dan konfigurasi Anda seperti halnya pada ukuran dan struktur DB.

2) Jika Anda khawatir tentang skalabilitas lapisan DB Anda, Anda bisa menjalankannya dalam sebuah cluster, atau pada kotak cloud atau VPS yang memungkinkan untuk mengubah ukuran. Jika DB Anda mulai menjadi lamban, Anda dapat menambah ukuran (meskipun biasanya dengan biaya tambahan). Opsi-opsi ini menambah biaya, tetapi benar-benar cara terbaik untuk memastikan skalabilitas DB.

3) Ini sangat tergantung pada pengaturan hosting Anda, dan arsitektur DB Anda. Tetapi secara umum (kecuali jika Anda menggunakan kotak yang sangat murah), saya tidak akan khawatir tentang database WordPress 30MB. WordPress melakukan pekerjaan yang baik dalam mengindeks tabel, dan bahkan konfigurasi OOB MySQL harus dengan mudah menangani pertanyaan WordPress pada DB ukuran ini. Ketika Anda naik ke Gigabytes - saat itulah Anda mungkin perlu melihat dengan serius opsi pengoptimalan kinerja.

Secara umum:

Jika Anda khawatir tentang kinerja, berkonsentrasilah pada penyetelan pengaturan MySQL yang ada, dan / atau menyiapkan lapisan cache. Caching dapat sangat mengurangi beban pada MySQL (terutama dengan situs WordPress, karena mereka umumnya melakukan sejumlah besar permintaan DB).

Jika setelah Anda menyetel MySQL dengan benar dan mengatur lapisan caching yang layak, Anda masih khawatir akan melampaui konfigurasi perangkat keras Anda, Anda dapat melembagakan kebijakan menghapus konten setelah jumlah waktu x.

Tidak satu pun dari hal ini khusus untuk WordPress. Dan saya tidak yakin bahwa pertanyaan memiliki jawaban yang tidak berlaku untuk situs web atau aplikasi apa pun yang berjalan pada tumpukan LAMP. Tapi mungkin orang lain memiliki saran mengenai struktur tabel MU atau trik DB khusus WP lainnya ... Saya tidak tahu.

MathSmath
sumber
4

Secara ketat dari MySQL Point-of-View, saya punya saran tentang cara meningkatkan caching data / indeks untuk MySQL Instance.

Perlu diingat bahwa ada dua Mesin Penyimpanan utama untuk MySQL

  • MyISAM
  • InnoDB

Mekanisme caching mereka berbeda. Ada sesuatu yang dapat Anda lakukan untuk menyetel Mesin Penyimpanan pilihan Anda.

MyISAM

MyISAM hanya menyimpan halaman indeks. Tidak pernah melakukan cache data. Anda dapat melakukan dua hal untuk meningkatkan I / O untuk tabel MyISAM.

Peningkatan MyISAM # 1

Setiap tabel MyISAM yang memiliki kolom VARCHAR dapat dikonversi secara internal ke CHAR tanpa menyentuh desain awal. Misalkan Anda memiliki tabel bernama mydb.mytable dan Anda ingin meningkatkan I / O untuk itu, lakukan hal berikut di atasnya:

ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;

Ini akan meningkatkan ukuran tabel 60% -100% tetapi akan menghasilkan peningkatan kinerja 20-30% pada I / O tanpa mengubah apa pun . Saya menulis tentang ini sebelumnya di DBA StackExchange:

Peningkatan MyISAM # 2

Anda perlu meningkatkan Cache Kunci MyISAM (seperti ukuran oleh key_buffer_size ). Jalankan kueri ini, silakan:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;

Ini akan menunjukkan kepada Anda key_buffer_size yang ideal berdasarkan dataset Anda saat ini.

InnoDB

InnoDB menyimpan data dan indeks. Jika Anda mengonversi semua data Anda ke InnoDB dan saat ini menjalankan WordPress dari semua basis data InnoDB, Anda perlu mengukur Pool Penyangga InnoDB Anda (seukuran dengan innodb_buffer_pool_size ). Jalankan kueri ini, silakan:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Ini akan menunjukkan kepada Anda key_buffer_size yang ideal berdasarkan dataset Anda saat ini.

Proyeksi

Jika Anda memproyeksikan bahwa dataset Anda akan tumbuh 20 kali lebih banyak, cukup gandakan apa yang direkomendasikan oleh query ini pada 20. Misalkan dataset MyISAM Anda adalah 15MB dan 3MB adalah jumlah indeks Anda. Jika Anda memperkirakan bahwa Anda akan memiliki data 20 kali lebih banyak, atur key_buffer_size ke 60MB seperti ini di /etc/my.cnf:

[mysqld]
key_buffer_size=60M

kemudian restart MySQL. Hal yang sama berlaku untuk Pool Buffer InnoDB.

Jika semua data Anda adalah InnoDB, Anda perlu melakukan Pembersihan penuh atas infrastruktur InnoDB Anda yang saya posting di StackOverflow .

RolandoMySQLDBA
sumber
2

Pada titik apa jumlah entri dalam database memengaruhi kinerja situs web front-end?

Ketika pertanyaan mulai mengenai batas sumber daya dari akun hosting Anda.

Apa yang dapat Anda lakukan sebagai pengelola situs web agar ini berjalan dengan lancar seiring pertumbuhan basis data Anda?

Mengawasi penggunaan sumber daya. Ambil langkah-langkah untuk meningkatkan sumber daya dan / atau mengoptimalkan penggunaan.

Apa yang dapat Anda harapkan dari segi kinerja setelah tahun ke-5 ketika database Anda berukuran 25 - 30mb besar?

Seharusnya tidak ada perubahan dalam kinerja pada database kecil itu.

Jika Anda berharap situs Anda tumbuh selambat itu, maka Anda punya banyak waktu untuk mempelajari cara mengelola pertumbuhan.

shanebp
sumber