Merhaba, Bahattin ARICI wrote On 31-01-2010 14:12: > Tabloların %90'ı innodb yapısı üzerine kurulu > 370mb civarı innodb index büyüklüğü > 250mb civarı innodb veri büyüklüğü > toplam 320mb data > toplam 430mb index boyutu
Veritabanınız çok küçükmüş. Verdiğiniz makine değil, Celeron 500 MHz işlemcili bir makine bile olsa rahat yetmesi gerekirdi. > Uygulama gereği her bağlantı 5sn'de bir select sorgusu yapıyor. > Bunun dışında kullanıcılar insert, update ve delete işlemleri > gerçekleştiriyor. Bu dert değil, sorgu önbelleği bunu halleder. > innodb_buffer_pool_size = 3192M #innodb genel bellek Veri boyunuzun 250 MB olduğu düşünülürse bu biraz fazla olmuş. Makinede sadece Mysql çalışıyor demiştiniz. Thread önbellekleri ile birlikte Mysql'in fazla ram kullanıp takas alanına düşmediğine eminsiniz değil mi? > innodb_flush_method = O_DIRECT Eğer verileri SAN'de tutacak olursanuz bu ayar çok yavaşlatır unutmayın. Bence default'ta bıraksanız daha iyiydi. > innodb_flush_log_at_trx_commit = 1 #log dosyasina guvenli > yazim yapmak icin. Log dosyasına güvenli yazıyor ancak çok hızlı (~100ms) yazmaya çalışıyor. Bunu 2 yaparsanız log'lara ortalama saniyede bir kez yazar, bu disk performansını biraz artabilir. > innodb_lock_wait_timeout = 200 #Saniye Bunu niçin arttırma gereği duydunuz? Bir thread bir satırı kitlediğinde başka bir thread aynı satıra yazmak istediğinde bekleme süresini arttırmışsınız. Bu uzun beklemelere neden olabilir. Standart olarak 40-50 gibi bir şeydi, bence ellemeyin. > join_buffer_size = 1M Eğer uygulamalarınızda join kullanan sorgular varsa bunu biraz daha arttırmanızı öneririm. Örneğin 4 veya 8 MB gibi. > log = /var/log/mysql/mysql.log #mysql islem raporlari Bu disklerinizi çok yavaşlatabilir. Özellikle de flush_log_at_trx_commit ile birleşince. :) Sunucuda saniyedeki sorgu sayınız nedir? Çoğu yazma mı okuma mı? > log_slow_queries = /var/log/mysql/mysql-slow.log #yavas sorgular icin > long_query_time = 10 #yavas sorgular icin Bunu 3 sn gibi bir değere çekerek yavaş sorguların log'lanmasını sağlayabilirsiniz. > key_buffer = 256M #myisam index dosyalari icindir. Çok büyük myisam tablolarınız yoksa key_buffer'a bu kadar bellek ayırmanıza gerek yok. > record_buffer = 1M > read_buffer_size = 1M > read_rnd_buffer_size = 1M Bunları azar daha arttırsanız özellikle index kullanmayan tablo taraması yapılan sorgularda yardımı olabilir. Mesela 2 ya da 4'er MB gibi. > query_cache_limit = 8M #sorgular icin ayrilan > bellek miktari > query_cache_size = 16M #sorgular icin ayrilan Sorgu önbelleğinizin doluluğu ve hit oranı nedir bilmiyorum, ama query_cache_limit'i düşürmenizi önereceğim. Şu haliyle büyük sonuç döndüren sorgular önbelleği yiyor ve sadece 2 sorgu önbellekleyebiliyorsunuz. Örneğin limit=1M ve size=16M yaparsanız daha fazla sayıda sorguyu belleğe sığdırabilirsiniz. Sorgularınızın çoğu yanıtının 8 MB tutacağını pek sanmıyorum da.. > [isamchk] > key_buffer = 512M Tabloların çoğu innodb demiştiniz. Bence bunu 2-3 MB'a kadar azaltın. :) Aslında bizim buradaki yorumlarımız biraz farazi oluyor. Mutlaka şu iki betiği çalıştırarak onların raporlarını inceleyin: http://blog.mysqltuner.com https://launchpad.net/mysql-tuning-primer Özellikle tuning primer çok güzel bir rapor veriyor. Yalnız verdikleri raporlara güvenebilmeniz için Mysql sunucunuzun en azından birkaç saattir çalışıyor ve aktif kullanımda olması gerekir. -- Alper Oğuz [email protected] _______________________________________________ Linux-sunucu E-Posta Listesi [email protected] Liste kurallarını http://liste.linux.org.tr/kurallar.php bağlantısından okuyabilirsiniz; Bu Listede neden bulunduğunuzu bilmiyorsanız veya artık bu listeden gelen e-postaları almak istemiyorsanız aşağıdaki bağlantı adresini kullanarak 1 dakika içinde üyeliğinizi sonlandırabilirsiniz. http://liste.linux.org.tr/mailman/listinfo/linux-sunucu
