20 Ekim 2010 Çarşamba

MySQL - Too Many Connections error

"Too Many Connections" hatası çeşitli nedenlerle oluşabilir;

* Aynı anda çok sayıda connection oluşturulması
* Eski connection ların yeteri kadar hızlı serbest bırakılamaması
* Eski konnection ların bir nedenle kapatılmaması

MySQL ayarlarında ve application kodlarında çeşitli
değişiklikler yapılarak bu hata düzeltilir.

KOD SEVİYESİNDE YAPILABİLECEKLER
-----------------------------------------
* Eğer kalıcı bir connection dan bahsetmiyorsak, açılan connection un kapatılmasının
garanti altına alınmış olmalıdır. Aksi taktirde, mesela bir exception sonucu açılan connection nun
close edilmemesi, gibi bir nedenle Too Many Connections error alınabilir. Yada açılan connection un kapatılması unutulmuş olabilir.

* Uzun zaman alan query lerin tune edilmesi

MYSQL SERVER AYARLARI İLE İLGİLİ YAPILABİLECEKLER
---------------------------------------------------
* max_connections parametresinin arttırılması
Açılabilecek max. connection sayısı "max_connections" global değişkeni ile kontrol edilir.
MySQL 5.1.15 ve sonrasında bu değişkenin default değeri 151 gelmektedir.
mysql, max_connectionsparametresi değerinin 1 fazlası kadar bağlantıya izin verir.
Bu bir fazla kısma sadece SUPER yetkisine sahip kullanıcı bağlanabilir.
Bu nedenle de applicationda kullanılan user ın SUPER yetkisine sahip bir user olmaması
önemlidir.

Şu andaki aktif bağlantılar SHOW PROCESSLIST komutu ile görüntülenebilir.

max_connections parametresinin değeri arttırırken dikkatli olmak gereklidir.
Çünkü sonuçta her yeni connection bir miktar sistem kaynağı kullanır.

* max_user_connections parametresinin set edilmesi

Herhangibir user için veya genel olarak bir user ın
açabileceği maximum connection sayısı set edilmelidir.
Default olarak her kullanıcı sınırsız sayıda session açabilir.

* wait_timeout ve interactive_timeout parametrelerinin set edilmesi

Bu parametreler set edilerek, belli bir süre iş yapmayan sessionlar
otomatik olarak sonlandırılabilir.
Default olarak wait_timeout ve interactive_timeout
değişkenlerinin değeri 8 saattir.
Yani mysql e bağlanan kullanıcı hiçbir iş yapmazsa
8 saat sonra connection otomatik kapatılır.

Daha fazla bilgi için aşağıdaki bağlantılar faydalı olacaktır.

http://dev.mysql.com/doc/refman/5.1/en/too-many-connections.html
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_wait_timeout
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_interactive_timeout
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_user_connections

Hiç yorum yok:

Yorum Gönder