Eticaret Sunucuları için Database Optimizasyonu

Eticaret siteleri için sunucu hızının önemini çok kez duymuş olabilirsiniz.
Ülkemizde genellikle bu konu güçlü donanımlar ve yüksek hızlarla çözümlenmeye çalışıyor. Dolayısıyla aylık kiralama maliyetleriniz yükseliyor. Özellikle yeni eticarete başlayacak girişimciler için büyük bütçeli sunuculara gerek yoktur. Birkaç ayarla istenilen performanslara ulaşılabilir.


Ancak binlerce kişinin ziyaret ettiği bir eticaret sitesi hedefliyorsanız sadece güçlü donanımınız olması yeterli olmayacaktır.
Eticaret yazılımı ne kadar iyi yapılırsa yapılsın doğru şekilde konfigürasyonu ayarlanmamış bir sunucuyla hız problemi yaşamanız muhtemeldir.

Sunucunuzun doğru yapılandırılmasının yanısıra mysql sunucunuzun da yük yapısına göre analiz edilip konfigürasyonunda optmizasyon yapmanız gerekir.
Doğru yapılandırılmamış bir mysql sunucusu size tam performans üretmiyor olabilir ve ciddi yatırımlarla alınan sunucunuz size gerçek performansıyla hizmet vermiyor olabilir.

Bu yazımızda linux sunucunuzda (centos&cpanel) mysql sunucu optimizasyonuna değineceğiz.

aşağıdaki ayarlar /etc/my.cnf dosyasında yapılmalı ve değişikliklerin geçerli olması için mysql sunucusunun restart edilmesi gereklidir.

key_buffer_size : Eğer MyISAM tabloları kullanıyorsanız bu değişken çok önemlidir.
bu ayar mevcut belleğin %25-30 u seviyesinde olmalıdır, ancak doğru değer index büyüklüğüne, veri boyutuna ve yüklenmeye bağlı ayarlanmalıdır.
MyISAM veri cache lemek için işletim sistemi cache ini kullanır dolayısıyla bunun için en az 32MB bellek ayırın, böylece geçici tablolar için oluşturulan indekslere yeterli olur.

innodb_buffer_pool_size: Eğer Innodb tabloları kullanıyorsanız bu ayar önemlidir.
innodb tablolarda tampon bellekler MyISAM a göre çok daha hassastır. MyIsam default tampon bellek ayarlarıyla genelde sorunsuz çalışır.

innodb_log_file_size : Büyük veritabanlarında yazma işlemi yoğun ise çok önemli hale gelir.
64M-512M arasında sunucu belleğine göre bir değer belirlenebilir ve performansı direk etkiler.

innodb_log_buffer_size: default ayarları genelde çok yoğun olmayan yüklenmelerde ve kısa transaction ların olduğu sistemlerde sorun yaratmaz.
8-16M arasında bir değer vermek ve değeri çok yükseltmemek gerekir , yoksa belleğiniz boşa gider. her saniyede boşaltılan bir log dur.


innodb_flush_log_at_trx_commit:  Innodb MyIsam dan 100 kat yavaş mı geliyor ? öyleyse bu değeri ayarlamamışsınız demektir.
default "1" dir, tüm transaction larda loglar diske boşaltılır
"2" loglar disk yerine işletim sistemi cache ine gönderilir,
"0" bu değerle daha hızlı çalışsada mysql sunucu çakılmalarında güvenli olmaz.

table_cache : birkaç yüz tablo için ideal değer 1024, çok fazla tablo ve connection varsa artırılabilir.

thread_cache : tüm connect ve disconnect lerde thread oluşur, 16 ve daha yüksek bir değer verilebilir.

query_cache_size : Veritabanı sorgu sonuçlarında kullanıcak bellektir,
sonuçlar query cache inde tutulduğundan işlem hızını doğrudan etkiler.
4Gb dan büyük bir belleğiniz varsa 64M- 512M arasında bir değer verilerek ölçümleme yapmak gerekir.

tmp_table_size: Bazı kompleks query lerde mysql geçici bir dosya oluşturur ve bu ayar yoksa bu oluşturulan geçici tablo disk üzerinde oluşur.
dolayısyla bu değer set etmekte performansı artıracaktır, Mysqltuner aracı bu değer için 32MB öneriyor.

Budeğerleri verdikten sonra mysqltuner uygulaması ile ölçümleme yapıp daha doğru değerlere ulaşılabilir.

yüklemek için:
cd usr/local
mkdir mysqltuner
cd mysqltuner

wget http://mysqltuner.com/mysqltuner.pl

chmod +x mysqltuner.pl

mysql root şifresi sorabilir bilmiyorsak whm den değiştirebiliriz.

./mysqltuner.pl


programı çalıştırdıkça database durumunu değerlendirip
ayarlanması gereken my.cnf değişkeni belirliyor.
buna göre ilgili ayarı yapıp mysql sunucuyu restart ediyoruz.

kolay gelsin.