![]() |
| | |||||||
Mysql Optimizasyonu AyarlarıFTP - DNS - Database icinde Mysql Optimizasyonu Ayarları konusu , Yoğun siteler için mysql sunuclarında dikkat etmemiz gereken değişkenler var. Ancak bu değişkenlerle oynarken sistemin kullandığı ram oldukça yükselebilir swap?e geçebilir böylelikle makinayı kilitleyebiliriz. Azar azar artırıp testler yaparak değişkenlerin ... Konu İle Alakalı Etiketler: vbulletin mycnf,mycnf vbulletin,,keybuffersize mysql, |
| | LinkBack | Seçenekler | Stil |
| | #1 (permalink) |
| Administrator ![]() Üyelik tarihi: Nisan 2008 Bulunduğu yer: ROFB.!
Mesajlar: 3.672
Tecrübe Puanı: 100 |
Yoğun siteler için mysql sunuclarında dikkat etmemiz gereken değişkenler var. Ancak bu değişkenlerle oynarken sistemin kullandığı ram oldukça yükselebilir swap?e geçebilir böylelikle makinayı kilitleyebiliriz. Azar azar artırıp testler yaparak değişkenlerin değerlerini analiz edip gerekli değişiklikleri yapmak gerekir. Performasn artırmak için işimize en çok yarayacak değişkenler: table_cache key_buffer_size query_cache_size tmp_table_size max_connections wait_timeout thread_cache_size table_cache Hali hazırda kullanılan değerleri mysql komut satırından SHOW STATUS komutu ile yada komut satırından mysqladmin ?i10 processlist extended-status komutu ile listeleyebiliriz. İhtiyacımıza göre bu değerleri /etc/my.cnf den set edebiliriz. 1) Eğer opened_tables değeriniz yüksekse mutemelen table_cache değeriniz oldukça düşüktür. table_cache 64 Open_tables 64 Opened_tables 544468 table_cache tüm thread?lerdeki açık tablo sayısıdır. Mysql multi-threaded olduğundan tablodaki birçok sorguyu aynı anda çalıştırıyor olabilir ve bunların her biri yeni bir tablo açacaktır. Bu nedenle bir kaç tablomuz olmasına rağmen daha fazla open_table ihtiyacımız olacaktır. opened_tables değerinin yüksek olması bize daha fazla cache ihtiyacımız olduğunu gösterir. Performansı artırıcı en öenemli şeylerden bir tanesi table_cache değerini yükseltmek olacaktır. 2) Eğer key_reads değeriniz yüksekse muhtemelen key_buffer_size değeriniz çok düşüktür. Cache hit oranı Key_reads ve key_read_requests değerleriyle hesaplanabilir. key_buffer_size 16M Key_read_requests 2973620399 Key_reads 8490571 (cache hit rate = 0.0028) key_buffer_size index buffer larının boyutunu ve okuma işlemi için index handle etme hızını etkiler. Mysql manuelinde de belirttiği gibi Key_reads/Key_read_request oranı 0.01 değerinden düşük olmalıdır. Ayrıca key_writes ve key_writes_request değerlerine de dikkat etmek gerekir. key_writes/key_writes_request oranı 1 den küçük olmalıdır. 3) Wait_timeout max_connection thread_cache değerleri Sleeping modunda uyuyan birçok process mevcut çünkü default olarak wait_timeout değeri oldukça yüksek. wait_timeout değerini iyice düşürürsek örneğin 30 saniyeye böylelikle mysql 30 saniye boşta kalan bağlantıları kapayacaktır. Yoğun sunucularda Max_connection değerini de yükseltmemiz gerekecektir. Şu anda benim sunucumuzda set ettiğim değer 750. Idle client ların boşu boşuna boşuna tuttukları bağlantılar yeni bağlantı isteği yapan client ları engelleyebilir. Max_connection değerini artırarak bundan kaçınabiliriz. Mysql multi-threaded olduğundan sunucu yeni threadler yaratacaktır. Bu da CPU zamanından oldukça çalacaktır. Bu problemin önüne geçmek için Thread_cache değişkeninden faydalanabiliriz. Mysql manuelinde de belirttiği gibi Kaç adet thread ?i tekrar kullanım için cahce de tutmalıyız? Bir client disconnect olduğunda client ?ın thread leri eğer thread_cache_size değeri kadar thread önceden kalmadıysa cache de tutulur . Tüm yeni thread ler en önce cache den alınır. Ve yanlız cache boş olduğunda yeni bir thread yaratılır. Eğer çok sayıda yeni bağlantı isteği (connection attemp) oluyorsa bu değişken performans artırımı için kullanılabilir. (Normalde iyi bir thread implementasyonunuz varsa çokda kayda değer bir peformasn kazanımı sağlamaz). Connections ve Threads_created değerlerini kıyaslayarak varolan thread cache inizin verimini gözlemleyebilirsiniz. Threads_created değeri yüksekse thread_cache_size değişkeninin artırmayı düşünebiliriz. Cache hit rate threads_created/Connections ile hesaplanabilir. Threads_created/Connections. thread_cache_size 0 Threads_created 150022 Connections 150023 thread_cache_size değeri my-large.cnf de 8 mb olarak önerilmiş. Biz alttaki formülü uygulayabiliriz. table_cache = opened table / max_used_connection 4) tmp_table_size and Handler_read_rnd / Handler_read_rnd_next Created_tmp_disk_tables değeri yüksekse tmp_table_size değişkeninin değerini artırmayı düşünebilirsiniz. Böylelikle temporary (geçici) tabloları diskte oluşmaktansa memory üzerinde oluşmasını sağlamış oluruz. tmp_table_size 32M Created_tmp_disk_tables 3227 Created_tmp_tables 159832 Created_tmp_files 4444 Created_tmp_disk_tables değeri statement lar çalıştırılırken disk üzerinde yaratılan temporary tabloların sayısıdır. Created_tmp_tables ise memory üzerinde yaratılanlardır. Memory de yaratmak varken disk üzerinde yaratmak kötü bir durum. tmp_tables ın %2 kadarı diske giderse o kadar da kötü değil aslında. Yinde de tmp_table_size değerini artırmak fena fikir değil. Handler_read_rnd çok yüksekse muhtemelen Mysql in tüm tabloları taramasını gerektirecek çok sayıda sorgunuz var ya da key ?leri doğru dürüst kullanamayan Join ?leriniz var demektir. Handler_read_rnd 27712353 Handler_read_rnd_next 283536234 Örneğin üstteki değerler yüksek. Indexlerimizi ve sorgularımızı gözden geçirmemiz gerekiyor olabilir. Son olarak değerleri çok yüksek değerlere almamanı gerekir. Sistemin çkmesine neden olabilirsiniz. Azar azar artırarak denemeler yapmalı değişkenlerde gödrdüğünüz değerlere göre analiz yapmalısınız. Örneğin Max_conneciton değeri artırıldığında ram kullnımı oldukça artacaktır. Max_connections hesabı için Used MySQL memory = key_buffer + max_connections * (join_buffer + sort_buffer + thread_stack + tmp_table_size) Bir de table_cache değerini artırırken dikaktli olmak gerekir. Çoğu işletim sistemi ?open file descriptors? sayısını limitler. Mysql bir çok dosyayı açmak istediğinde işletim sistemi bu işlemi red edebilir. Tüm bu bilgileri öğrenmemi sağlayan InterWorx ?dan Pascal?a teşekkürler. Tüm bu bilgilerin ışığında benim sunucumda yaptığım ve gayet memnun kaldığım ayarlar. Benim mysql sunucum için yaptığım ayarlar : # The MySQL server [mysqld] key_buffer = 384M max_allowed_packet = 8M table_cache = 1024 sort_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size = 32M optimizasyon 2 adet Xeon 2.8 cpu bulunan 2 gb ram sunucuda denenmiştir . |
| | |
| | |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Seçenekler | |
| Stil | |
| |
| | ||||
| Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
| my-huge.cnf ve my.cnf mysql optimizasyon | Shevko | FTP - DNS - Database | 0 | Temmuz-02-2009 12:53 |
| profilinizi kişiselleştirin ayarları değişmiyor | yenibeyin | Diğer Sorular/Sorunlar | 5 | Ekim-14-2008 17:32 |
| vBulletin Optimizasyonu | Shevko | vBulletin Genel | 2 | Haziran-03-2008 13:17 |
| MySQL Güvenliği | Shevko | Webmaster Genel | 0 | Mayıs-25-2008 19:34 |
| vBulletin Forum Optimizasyonu | Shevko | vBulletin Genel | 0 | Mayıs-13-2008 08:20 |
| | |
| |