:::: MENU ::::

Mysql Hızlandırmak İçin Öneriler

Mysql hızlandırmak için öneriler aşağıda kısaca anlatmaya çalıştım. umarım faydalı olur.

Mysql Slow Queries

Mysql sunucu üzerindeki problemli (Yüksek I/O ‘ya ve CPU utilizasyonuna neden olan) ve index kullanmayan veya yanlış index kullanan sorgular belirlenebilir.

Ayarların kalıcı olması için/etc/my.cnf dosyasına aşağıdaki satırlar ekleyebiliriz.

Mevcut session’da gerekli ayarları düzenleyebiliriz.

Cache Queries

Mysql veritabanı sunucusuna  sql sorgusu her geldiğinde mysql sunucusu bu sorgular için herdefasında bir grup işlem yapar. Bu işlemler sorgunun analiz edilmesi ve parçalara bölünmesi, çalıştırılma şeklinin belirlenmesi, sonucun diske yazılması veya diskten yüklenmesi ve  cevabın (result) client ‘a döndürülmesi olarak sıralanabilir.

Mysql sunucusu,tekrar edilen sorgular için sonuçları memory’de tutularak bu süreçlerin hızlanmasını sağlar. Bunu query cache kullanarak yapabiliriz.

Query Cache değişkenlerinin monitör edilmesi;

Qcache_free_blocks : Bitişik memory bloklarının sayısını verir. Bu sayının yüksek olması datanın dağılmış (dağıtık) şekilde memory’de barındığını gösterir. Bu durumda FLUSH QUERY CACHE komutu ile boş bloklar oluşturulabilir.

Qcache_free_memory: Query cache için ayırdığımız memory’deki kullanılmayan cache miktarını gösterir.

Qcache_hits: Gelen sorgulardan kaçının query cache kullanılarak cevaplandığı sayısını gösterir.

Qcache_inserts: Gelen sorgulardan query cache ‘e eklenenlerin sayısını gösterir.

Önemli : (1 – (Qcache_inserts / Qcache_hits ) ) formulü query cahce hit oranını vermektedir. Bu örnekte sorguların %15 ‘i query cache den cevaplanmaktadır.Eğer oran düşükse problem query_cache_limit değişkeninden kaynaklanıyor olabilir. query_cache_limit query cache’ e eklenecek sorgu sonçlarının mb cinsinden maksimum değeridir. Bu değerin 512 ‘den daha yüksek tutulması önerilmez.

Qcache_lowmem_prunes : Query cache ‘in kaç kere mevcut memory’den taştığını göstermektedir. (Out of memory). Bu durumda sunucumuzda memory kaynağı problemi bulunduğu söyelenebilir. Eğer bu değer sürekli olarak artıyorsa ciddi bir fragmantasyon sorunuda oluşabilir.

Qcache_not_cached: Cache işlemine uygun olmayan sorguların sayısını gösterir. Yüksek oranla bu sorgular “select” sorgusu dışında kalan sorgulardır.

Qcache_queries_in_cache: Sunucuda şu anda cache ‘lenmiş sorgu sayısını gösterir.

Qcache_total_blocks: Cache üzerindeki toplam blok sayısını gösterir.

 

Limitlemeler

max_connections değişkeni sunucuya aynı anda açılabilecek en fazla bağlantı sayısını gösteremektedir. Bu değişkeni belirlemek için aşağıdaki komut kullanılabilir.

wait _timeout idle(Boş bağlantı) olarak kalan mysql bağlantılarının otomatik olarak kapatılması için geçmesi gereken süredir. 300 saniye optimum değer olarak belirlenebilir.

Table Cache

Mysql dosya okuma işlemini hızlandırmak için açılan tablolalar  için bir cache oluşturur.

Yukarıdaki örnekte Open_tables değişkeni sistemde 748 tablonun şu anda açık olduğunu ve 253 tanesininde kapatıldığını, sistemde ihtiyaç olan file descripter sayısının geçildini göstermektedir.

Eğer open tables değişkeni table_open_cache değişkeninden çok düşükse table_open_cache değişkeni düşürülebilir.

 

Thread Cache

Mysql table cache ‘de olduğu gibi açılan thread ‘ler içinde cache oluşturmaktadır. Mysql oluşan bağlantılar için yeni thread’ler oluşturmaktadır. Özellikle yoğun sistemlerde Threadlerin oluşması sırasında geçen sürenin kısaltılabilmesi için thread_cache kullanılmaktadır.

Önemli:Bu bölümde önemli olan değişken Threads_created değişkenidir. Eğer bu değer hızlı bir şekilde artıyorsa thread_cache değişkenin değeri arttırılmalıdır.

 

Key Buffer

Key buffer Myisam index bloklarını barındırmaktadır. Bu bloklardan yapılacak olan taleplerin disk yerine memory ‘den gelmesi gerekmektedir.

Key_reads diskten okunan talepleri gösteremektedir. key_reads / key_read_requests formulü miss rate değşikenini vermektedir. Bu durumda bu formül sonucunda 1000 talepte 1 den fazla talep diskten okunuyorsa key_buffer değeri arttırılmalıdır.

 

Temporary Tables

Groub By gibi Komplex sorgular için mysql memory üzerinde geçici tablolar oluşturmaktadır. Ancak bu geçici tablo boyutu çok büyük olursa mysql tabloları disk üzerinde oluşturmaya başlar. Bu nedenle temporary tables değişkenleri kontrol edilmelidir.

Temp tables her kullanıldığında Created_tmp_tables değikeni artar. Disk üzerinde oluşan temp. tables ise created_tmp_disk_tables değişkeninde ifade edilmektedir. tmp_table_size ve max_heap_table_size değişkenlerinin değerleri değiştirilerek disk üzerinde oluşan temp. tables değeri düşürülebilir.

 

Sorting

Mysql sort işlemi gerçekleştirirken diskten okuduğu satır değerlerini bir sorf buffer alanı içerisinde tutar. Eğer data boyutu çok yüksek ise data için disk üzerinde bir temp. tablo oluşturulur ve sort işlemi bu tablo üzerinde gerçekleştirilir.

Eğer sort_merge_passes değişken değeri yüksek ise sort_buffer_size değeri arttırılmalıdır. Ancak bu bölümde gerçekleştirilecek olan arttırmalar küçük değerler ile olmalıdır. Çünkü sorting session base bir değişkendir.

Sort_range: Aralık belirtilerek gerçekleştirilen sort işlemleri

Sort_rows: Sort edilmiş satır sayısı.

Sort_scan: Sort işlemini gerçekleştirmek için taranmış olan tablo sayısı.

 

Scan Ratio

Mysql tabloları okumak için memory’deki alanı kullanmaktadır. Index’ler satırları okumak için gerekli bilgiyi barındırmaktadır. Ancak bazen daha büyük data parçarlarınıda tablolardan okumak gerekir. Bu durumda sistemde kaç adet select sorgusunun çalıştırıldığını ve kaç kere bir sonraki satırın okunduğunu bulmamız gerekir. (Index kullanılmadığı yani direk erişim bulunmadığı için)

Handler_read_rnd_next / Com_select formülü scan oranını bize verecektir. Bu oran ‘ın 4000 de 1 den az olması beklenir. Eğer yüksek ise read_buffer_size değişkenini arttırmak gerekecektir.


So, what do you think ?

You must be logged in to post a comment.