Too Many Connections Hatası Nedir?
Her şeyden önce, "Too Many Connections" hatasını tam olarak anlayalım. Bu hata, PostgreSQL veritabanı sistemine çok fazla eşzamanlı bağlantı yapıldığında ortaya çıkar. PostgreSQL'in, aynı anda kaç bağlantıyı kabul edebileceği belirli bir sınır vardır. Bu sınır aşılırsa, veritabanı yeni bağlantıları reddeder ve “Too Many Connections” hatası alırsınız. Bu durumda, veritabanınızın işlemleri durdurabilir ve kullanıcılarınızın erişimi kesilebilir.
1. Bağlantı Limitini Artırın
PostgreSQL'in varsayılan bağlantı limiti genellikle 100’dür. Eğer çok fazla kullanıcıya sahip bir veritabanı yönetiyorsanız, bu limit yetersiz kalabilir. Bağlantı limitini artırarak bu sorunu geçici olarak çözebilirsiniz.
Bağlantı limitini arttırmak için aşağıdaki adımları izleyebilirsiniz:
1. PostgreSQL’in konfigürasyon dosyasını açın:
sudo nano /etc/postgresql/12/main/postgresql.conf
2. “max_connections” parametresini bulun ve değeri istediğiniz sayıya artırın. Örneğin:
max_connections = 200
3. PostgreSQL servisini yeniden başlatın:
sudo service postgresql restart
Bu işlem, PostgreSQL’in daha fazla bağlantı kabul etmesine olanak tanır. Ancak dikkat etmeniz gereken bir nokta, çok fazla bağlantı açmak sunucunuzun performansını olumsuz etkileyebilir. Bu yüzden sınırları artırırken sunucu kapasitenizi göz önünde bulundurmalısınız.
2. Bağlantıları Yönetme ve Sonlandırma
Bazen, "Too Many Connections" hatası, veritabanında açık kalan gereksiz bağlantılardan kaynaklanabilir. Kullanıcıların bağlantılarını düzgün bir şekilde kapatmamaları veya bağlantı havuzlaması yapılmaması bu durumu tetikleyebilir. Bağlantıları sonlandırarak bu sorunu çözebilirsiniz.
Aktif bağlantıları görmek ve sonlandırmak için şu komutları kullanabilirsiniz:
1. Aktif bağlantıları listeleyin:
SELECT * FROM pg_stat_activity;
2. Gereksiz bağlantıları sonlandırmak için aşağıdaki komutu kullanın:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle' AND pid <> pg_backend_pid();
Bu komut, gereksiz ve boşta kalan bağlantıları sonlandırır. Ancak dikkatli olmanızda fayda var, çünkü aktif kullanıcıları sonlandırmak istemezsiniz. Yalnızca "idle" durumdaki bağlantıları hedef alın.
3. Bağlantı Havuzlaması Kullanın
PostgreSQL, bağlantı havuzlama kullanarak çok sayıda veritabanı bağlantısını daha verimli bir şekilde yönetmenize olanak tanır. Bağlantı havuzlama, veritabanı bağlantılarının yeniden kullanılmasını sağlar ve böylece kaynakların verimli bir şekilde yönetilmesini sağlar. Eğer uygulamanızda bağlantı havuzlaması kullanmıyorsanız, bunu uygulamanızda devreye sokmak "Too Many Connections" hatasının önüne geçebilir.
Bağlantı havuzlaması için en popüler araçlardan biri PgBouncer'dır. PgBouncer, PostgreSQL ile çalışan bağlantıları yönetir ve yeniden kullanır, böylece veritabanına yapılan her yeni bağlantı yerine mevcut bir bağlantıyı kullanır.
PgBouncer’ı kurmak için şu adımları takip edebilirsiniz:
1. PgBouncer’ı yükleyin:
sudo apt install pgbouncer
2. PgBouncer konfigürasyon dosyasını düzenleyin:
sudo nano /etc/pgbouncer/pgbouncer.ini
3. Konfigürasyonu düzenledikten sonra PgBouncer’ı başlatın:
sudo service pgbouncer start
PgBouncer, veritabanı bağlantılarını havuzlamak için mükemmel bir çözümdür ve "Too Many Connections" hatasının sıklıkla yaşandığı durumlarda devreye sokulması önerilir.
4. Veritabanı Kullanıcılarını İzleyin ve Yönetim Sağlayın
Ayrıca, PostgreSQL veritabanınızdaki her kullanıcıyı ve bağlantısını izlemek önemlidir. Eğer belirli bir kullanıcı aşırı bağlantı açıyorsa, bu kullanıcıyı kısıtlamak ya da ona özel sınırlamalar getirmek, sorunun önüne geçebilir. Bunun için pg_hba.conf dosyasını düzenleyebilirsiniz.
Bağlantı limitlerini yönetmek için, kullanıcılar için spesifik kısıtlamalar getirebilirsiniz:
# /etc/postgresql/12/main/pg_hba.conf
host all all 192.168.1.0/24 md5
Bu şekilde bağlantıların sadece belirli bir IP aralığından yapılmasına izin verebilir, kaynak kullanımını azaltabilirsiniz.
Sonuç
PostgreSQL “Too Many Connections” hatası, genellikle yönetilebilir bir sorundur. Yukarıdaki adımları izleyerek veritabanı bağlantılarınızı daha verimli hale getirebilir ve bu hatadan kurtulabilirsiniz. Bağlantı limitini artırmak, bağlantıları yönetmek, bağlantı havuzlaması kullanmak ve kullanıcıları izlemek, bu tür hataların önüne geçmenin en etkili yollarıdır.
PostgreSQL'inizle ilgili sorunları daha hızlı çözebilmek için bu yöntemleri hemen uygulamaya başlayın. Unutmayın, veritabanı yönetimi sabır gerektiren bir süreçtir, ama doğru adımları atarak işleriniz çok daha kolay hale gelebilir.