Merhabalar,
Bugün makalemizde WordPress içerik yönetim sistemi kullanan kullanıcılara yönelik olarak WordPress Hızlandırma işlemlerini anlatacağız. Öncelikle makale seviyesi minimum Orta düzey teknik bilgisi bulunan kullanıcılar için olup teknik bilgisi bulunmayan kişilerin hosting / sunucu firmalarından destek istemeleri gerekmektedir.
WordPress'in MySQL veritabanı üzerinde koştuğunu hepimiz biliyoruzdur. Makalemizde yapacağımız işlemler MySQL veritabanı üzerinde yapacağımız işlemlerdir.
Problem Nedir?
Hepimizin bildiği gibi, WordPress, özellikle siteniz büyümeye başladığında optimize edilmediğini takdirde hız zorluklarına yol açan bir veritabanı uygulamasıdır.
Peki WordPress sitelerimiz neden yavaş açılır?
- Database
- PHP
- CSS
- JS
- Images
- Webserver
Çözüm
Veritabanı (Database) haricinde bulunan hızlandırma ve optimize çalışmalarını yapmanıza rağmen wordpress siteniz yavaş açılıyor ise, veritabanı kısmında yapmamız gereken işlem aşağıdaki gibidir.
Örnek sorgu analiz çıktımız aşağıdaki gibidir.
# Rank Query ID Response time Calls R/Call V/M Item # ==== ================== ============== ===== ======= ===== ============= # 1 0xC1623E6807CB8BE5 207.3160 45.9% 15 13.8211 1.83 SELECT wp_posts wp_term_relationships wp_term_taxonomy # 2 0x5167A4457BE9231B 100.7565 22.3% 10 10.0756 0.83 SELECT wp_posts wp_postmeta # 3 0xB6BD43F5DAA5EF11 67.0009 14.8% 17 3.9412 1.33 SELECT wp_posts wp_term_relationships wp_postmeta # 4 0x2CCE270A1F4865ED 49.2758 10.9% 27 1.8250 0.15 SELECT wp_posts # 5 0x626B2BE09C53BCF4 8.4502 1.9% 1 8.4502 0.00 SELECT wp_posts wp_postmeta wp_term_relationships # MISC 0xMISC 19.0393 4.2% 1752 0.0109 0.0
Partition işlemi yapacağız yani bölümleme bu işlem için baz almış olduğumuz satır sayıları aşağıdaki gibidir.
- wp_postmeta (3,049,294) satır
- wp_term_relationships (571,138) satır
- wp_posts (230,532) satır
makalemizde wp_term_relationships tablosunu bölerek performansını gözlemleyeceğiz.
Stratejimiz
MySQL burada sağlanan detaylar ile birkaç bölümleme seçeneği sunuyor. Tablo yapılarını ve bölümleme seçeneklerini gözden geçirdikten sonra, Aralıklara göre bölümlemeye karar verdik ve aralığın ayarlanması için tablonun PRIMARY anahtarını kullandık.
mysql>describewp_term_relationships;
+------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------+---------------------+------+-----+---------+-------+ | object_id | bigint(20) unsigned | NO | PRI | 0 | | | term_taxonomy_id | bigint(20) unsigned | NO | PRI | 0 | | | term_order | int(11) | NO | | 0 | | +------------------+---------------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
Partiton sorgumuz aşağıdaki gibi olacaktır.
ALTERTABLE wp_term_relationships PARTITION BYRANGE(object_id) ( PARTITION sc0 VALUESLESS THAN(50000), PARTITION sc1 VALUESLESS THAN(100000), PARTITION sc2 VALUESLESS THAN(150000), PARTITION sc3 VALUESLESS THAN(200000), PARTITION sc4 VALUESLESS THAN(250000), PARTITION sc5 VALUESLESS THAN(300000), PARTITION sc6 VALUESLESS THAN(350000) );
Sonuç;
Karşılaştırma üzerine, ortalama sorgu sürelerinin % 50 oranında düştüğünü gördük.
Bol trafikler dileriz.