wp_options

wp_options tablosunu kontrol altında tutun

İşim gereği sık sık WordPress optimizasyonu ile ilgili işler karşıma çıkıyor. Kimi zaman web sunucusunun ayarları, kimi zaman PHP ayarları, kimi zamansa genel bir temizlik etkili sonuçlar verebiliyor. Bazen de tüm bunları ve hatta daha fazlasını yapmak gerekebiliyor. İşte bu zamanlar olası tüm optimizasyon seçeneklerini değerlendirmek gerekiyor. Bu yazıda sizlere çok bilinmeyen, pek göz önünde olmayan bir optimizasyon yönteminden bahsedeceğim; Seçenekler tablosu (wp_options)

WordPress kurulumunuz sırasında tablo ön ekini değiştirmediyseniz (ki değiştirmeniz önerilir) seçenekler tablosu veritabanında wp_options ismiyle yer almaktadır. Yazının kalanında ben de bu şekilde bahsedeceğim. Aşağıda da görebileceğiniz gibi bu tablo WordPress veritabanı modelinde başka bir tablo ile ilişkisi olmayan tek tablodur;

WordPress database model

Bu tablo diğer tablolardan çok farklı verileri saklamaktadır. Diğer tablolar sitenizin içeriği ile ilgili verileri saklarken, bu tablo sitenin kendisi ile ilgili verileri saklar. Sitenizin başlığı, tarih/saat biçimi, sitenin dili gibi yönetim panelinin sol menüsünde yer alan Ayarlar bölümü ve alt başlıklarında yer alan seçenekler, hep bu tabloda saklanırlar. Bileşenlerinizin ayarları da yine bu tabloda saklanmaktadır.

Temalar ve eklentiler

Ayarların haricinde kullanmakta olduğunuz eklentiler ve temalar da bu tabloda kendi ayarlarını, seçeneklerini saklarlar. Düzgün yapılandırılmamış tema ve/veya eklentiler kaldırıldıklarında, oluşturdukları kayıtları temizlemediklerinde geride bir sürü işe yaramaz, artık kayıtlar bırakabilirler.

Ek olarak kısa süreli verilerin saklanması için de bu tablo kullanılmaktadır. Transient adıyla anılan bu verilerin, normal şartlarda zaman aşımına uğradıklarında silinmeleri gerekmektedir. Fakat kötü yapılandırılmış eklentiler ya da henüz silinemeden eklentinin/temanın kaldırılması gibi durumlar nedeniyle kimi zaman bu kayıtlar veritabanında artık olarak kalabilirler.

Tüm bu saydığımız sebepler zamanla wp_options tablosundaki kayıt sayısının hatırı sayılır ölçüde artmasına sebep olur. Bulaşık makinesi reklamlarında olduğu gibi; zamanla makine tıkanır ve çalışmaz hale gelir.

Kaputun altında neler oluyor?

İster ön yüz, ister yönetim panelindeki neredeyse tüm WordPress sayfaları aşağıdaki sorguyu çalıştırır;

SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'
Code language: JavaScript (javascript)

Eğer bu sorgu düzgün bir şekilde çalışmıyorsa/çalışamıyorsa, bunun web sitesi için yıkıcı sonuçları olabilir.

Tüm WordPress tabloları bu şekilde çalışmamaktadır. Örneğin yazıların saklandığı wp_posts tablosunda milyonlarca kayıt olsa bile, sitenin performansını ciddi şekilde etkilemeyebilir. Bu biraz da wp_posts tablosunda uygulanmış olan indeksleme stratejisi ile ilişkilidir.

wp_options optimizasyonu için neler yapılabilir?

Üstteki sorgunun hemen her sayfada çalıştığını göz önünde bulundurursak, öncelikli olarak bu sorguyu hızlandırmayı düşünebiliriz. Bunun için de autoload sütunundaki veriler için bir indeks oluşturulabilir. WordPress’e özel hizmet veren bir çok barındırma firması/servis sağlayıcı, bu indeksi otomatik olarak oluşturuyorlar. Her ne kadar bu konu hakkında 3,5 yılı aşkın bir süredir açık olan bir bilet üzerinde tartışmalar sürüyor olsa da, deneyip sitenizin için faydası olup olmadığını görebilirsiniz. İndeksi oluşturmak için aşağıdaki sorguyu kullanabilirsiniz;

ALTER TABLE wp_options ADD INDEX (autoload);

Eğer tablo ön ekiniz wp_ değilse sorguyu çalıştırmadan önce doğru tablo ön eki ile sorguyu güncellediğinizden emin olun.

Uygulayabileceğiniz diğer bir yöntem ise biraz uğraştırıcı. Tablodaki option_key alanındaki verileri gruplayıp inceleyebilirsiniz. Daha önce de bahsettiğim gibi, artık tema ve eklenti ayarlarına denk gelebilirsiniz. Bunları temizleyerek tabloyu biraz zayıflatabilirsiniz.

Bir başka yöntem ise transient kayıtları temizlemektir. Zaten önemli olan transient kayıtlar otomatik olarak tekrar oluşturulacaktır;

DELETE FROM 'wp_options' WHERE 'option_name' LIKE '_transient_%'; 
Code language: JavaScript (javascript)

Bu değişikliklere başlamadan önce her zamanki uyarımı yineleyeyim;

Herhangi bir değişiklik yapmadan önce veritabanınızın yedeğini mutlaka alın!

Bitirirken

wp_options tablosu pek çok optimizasyon işleminden biridir. Çokça ziyaret alan sitelerde ciddi performans farklarına sebep olabilir. İndeks oluşturmak bir çözüm olabileceği gibi, tablo için bir uyarı mekanizması kurarak, belli bir sayının üzerinde kayıt oluştuğunda bilgilenebilir, gerekirse manuel optimizasyon yapabilirsiniz. Bu durumun sürekli olması halinde kullandığınız eklenti ve temaları inceleyerek sorunun kaynağını tespit edebilirsiniz.

Fotoğraf: Denys Nevozhai

WordPress konusunda destek ihtiyacınız varsa Ada’nın özel çözümlerine başvurabilirsiniz.