PostgreSQL Performans: max_connections

max_connections PostgreSQL performans ayarlarında önemli bir yere sahiptir. Her açılan bağlantının, kapatılıp yeniden açılması esnasında bir yoğunluk ve kaynak tüketimi oluşmaktadır. Dolayısı ile güçlü donanımlar üzerinde bu değer yüzlerce olarak ifade edilebilir ancak ihtiyacının daha fazlası ise, örneğin binlerce bağlantı ihtiyacınız olacaksa bu değerle oynamak yerine bağlantı havuzlama yöntemlerinden birisi kullanılabilir.

Bağlantı Havuzu olarak çevirebileceğimiz yöntem ile en yüksek bağlantı sayısı olan max_connections değişkeninin değeri ile oynamadan PostgreSQL performansını artırmak mümkün olabilir. max_connections ayarının varsayılan değeri 100’dür. Bu değerin azaltılması work_mem değerinin artırılabilmesini sağlar. Ancak kullanım yoğunluğuna göre max_connections değerini azaltamıyorsanız o zaman bir bağlantı havuzu sistemi kullanarak bağlantıların kapatılıp açılması arasında kaybedilen zamandan tasarruf etmek ve performansı artırmak mümkündür.

Pgbouncer

https://pgbouncer.github.io/

Pgbouncer az kaynak tüketen bit bağlantı havuzu (connection pooling) mekanizmasıdır. 3 farklı şekilde çalışabilir:
Session pooling
En standart çalışma şeklidir. İstemci bağlandığı zaman havuzdan bir bağlantı istemciye sunulur, bağlı kaldığı süre boyunca aynı bağlantı kullanılarak sorguları işletilir. İstemci bağlantıyı kestiği zaman aynı bağlantı ucu tekrar havuza atılır ve başka bir istemcinin ihtiyacı olana kadar sırasını beklemeye başlar.
Transaction pooling
Sadece transaction esnasında devreye girer ve istemciye bir bağlantı verir. Tüm transaction boyunca istemcinin aynı baağlantıyı kullanması sağlanır.
Statement pooling
En agresif kullanım metodudur. Transaction metoduna benzer ancak multi-statement sorgular dessteklenmez. Yani transaction söz konusu olduğunda “autocommit” modu devreye girer, daha çok PL/Proxy için kullanılır.

  • Az bellek ihtiyacı vardır (2kb bağlantı başına).
  • Hedef veritabanı sunucuları farklı hostlar üzerinde olabilir.
  • Çalışmakta iken ayar değişikliklerine izin verir.
  • Mevcut bağlantıları düşürmeden yeniden başlatma, yeniden yükleme işlemlerine izin verir.

Pgpool-II

http://www.pgpool.net/

pgpool-II, PostgreSQL sunucu ve istemci arasında çalışan bir orta katman (middleware) servisidir. Pgpool, gelen SELECT sorgularını farklı sunucuya yönlendirmek şeklinde  yük dengeleme yapabildiği gibi, replikasyon ve bağlantı havuzlama (connection pooling) de yapabilir. Pgpool istemcinin özelliklerine göre, – kullanıcı adı, veritabanı, protokol – bağlantıları havuzdan kullandırır.

Pgpool aynı zamanda bağlantı limitleme için de kullanılabilir. max_connections değerinde belirlenenden farklı olarak en fazla bağlantı sayısı değerini aşan geri kalan bağlantı istekleri reddedilmek yerine kuyruğa alınabilmektedir.