Postgres'te maksimum bağlantı nasıl artırılır?


109

Ürünüm için Postgres DB kullanıyorum. Slick 3 kullanarak toplu ekleme yaparken bir hata mesajı alıyorum:

org.postgresql.util.PSQLException: FATAL: üzgünüm, zaten çok fazla istemci.

Toplu ekleme işlemim binlerce kayıttan fazla olacak. Postalarım için maksimum bağlantı 100'dür.

Maksimum bağlantı nasıl artırılır?



PgBouncer veya pgPool gibi bir bağlantı havuzu kullanın
Frank Heikens

2
1. Öncelikle ara yazılımınızın çok fazla bağlantıyı açık tutmadığını veya sızdırıp sızdırmadığını kontrol edin. 2. (belki) bir sonraki bağlantı pooler kullanın. 3. Bu tür problemlerde izin verilen bağlantı sayısını (neredeyse) asla artırmayın, çoğu durumda bu işleri daha da kötüleştirecektir. (kesinlikle emin olmadığınız sürece)
joop

Yanıtlar:


221

Sadece artırmak max_connectionskötü bir fikir. Sen artırmak gerekir shared_buffersve kernel.shmmaxde.


Düşünceler

max_connectionsveritabanı sunucusuna maksimum eşzamanlı bağlantı sayısını belirler. Varsayılan, tipik olarak 100 bağlantıdır.

Bağlantı sayınızı artırmadan önce dağıtımınızı büyütmeniz gerekebilir. Ancak bundan önce, gerçekten artırılmış bir bağlantı sınırına ihtiyacınız olup olmadığını düşünmelisiniz.

Her PostgreSQL bağlantısı, bağlantıyı veya onu kullanan istemciyi yönetmek için RAM kullanır. Ne kadar çok bağlantınız olursa, o kadar çok RAM kullanırsınız, bu da veritabanını çalıştırmak için kullanılabilir.

İyi yazılmış bir uygulama genellikle çok sayıda bağlantıya ihtiyaç duymaz. Çok sayıda bağlantıya ihtiyaç duyan bir uygulamanız varsa, pg_bouncer gibi sizin için bağlantıları bir araya toplayabilen bir araç kullanmayı düşünün . Her bağlantı RAM tükettiğinden, kullanımlarını en aza indirmeye çalışmalısınız.


Maksimum bağlantı nasıl artırılır

1. Artırın max_connectionveshared_buffers

içinde /var/lib/pgsql/{version_number}/data/postgresql.conf

değişiklik

max_connections = 100
shared_buffers = 24MB

-e

max_connections = 300
shared_buffers = 80MB

shared_buffersKonfigürasyon parametresi ne kadar belirler hafıza olduğu adanmış kullanım için PostgreSQL verileri önbelleğe .

  • 1GB veya daha fazla RAM'e sahip bir sisteminiz varsa, paylaşılan_buffers için makul bir başlangıç ​​değeri, sisteminizdeki belleğin 1 / 4'üdür.
  • Daha küçük bir miktardan (% 25 gibi) daha iyi çalışmak için RAM'in% 40'ından fazlasını kullanmayı bulmanız pek olası değildir
  • Sisteminiz veya PostgreSQL derlemeniz 32-bit ise, shared_buffers'ı 2 ~ 2.5GB'nin üzerine ayarlamanın pratik olmayabileceğini unutmayın.
  • Windows'ta, paylaşılan_buffers için büyük değerlerin o kadar etkili olmadığını ve nispeten düşük tutarak ve bunun yerine işletim sistemi önbelleğini daha fazla kullanarak daha iyi sonuçlar bulabileceğinizi unutmayın. Windows'ta kullanışlı aralık 64MB ile 512MB arasındadır .

2. kernel.shmmax'ı değiştirin

Sen olmak çekirdek maksimum segmenti boyutunu artırmak gerekir biraz daha büyük daha shared_buffers.

Dosyada /etc/sysctl.confparametreyi aşağıda gösterildiği gibi ayarlayın. postgresqlYeniden başlatıldığında etkili olacaktır (Aşağıdaki satır, çekirdeği maksimize eder 96Mb)

kernel.shmmax=100663296

Referanslar

Postgres Max Bağlantıları ve Paylaşılan Tamponlar

PostgreSQL Sunucunuzu Ayarlama


mükemmel cevap. birkaç soru .. 100663296 nasıl 96MB'ye eşittir? ve neden shmmax'ı değiştiririz bu ne yapar?
Robbo_UK

3
100663296 Bayt = 96 MB (ikili olarak). shmmax, paylaşılan bir bellek bölümünün maksimum boyutudur . Şimdi, paylaşılan arabelleklerin boyutunu artırdığımız için, shmmax'ı önbelleğe alma için artırılmış belleği barındıracak şekilde değiştirmemiz gerekiyor.
Ankit

1
@Robbo_UK 96 * 1024 * 1024 = 100663296
skrebbel

6
Sisteminiz için bu ayarları belirlemenize yardımcı olması için PGTune'u kullanabilirsiniz
Yoan Tournade

11
Değiştirmeden cat /proc/sys/kernel/shmmaxönce mevcut kernel.shmmax ayarınızı ( ) kontrol edin . Modern sistemlerde zaten gülünç derecede yüksek ayarlanmış ve değiştirilmemesi gerekiyor. Mine ayarlandığında 18446744073692774399Ubuntu 18.04 üzerinde varsayılan olarak.
Carl Zulauf

30

Winnie'nin harika cevabına ek olarak,

Postgresql.conf dosyasının konumunu herhangi biri kurulumunuzda bulamazsa, postgres'in kendisine her zaman sorabilirsiniz.

SHOW config_file;

Benim için max_connections'ı değiştirmek tek başına hile yaptı.


2
Teşekkür ederim. Ubuntu /etc/postgresql/11/main/postgresql.conf
18.04'te

1

/ var / lib / pgsql / data veya / usr / local / pgsql / data / içinde bulunan postgresql.conf dosyasındaki max_connections değişkenini değiştirin


2
Neden pg_hba.conf? Bağlantıların sayısı ile ilgili herhangi bir parametresi yoktur, sadece nasıl bağlanılacağı vardır. Öte yandan postgresql.conf .... Ancak yüzlerce bağlantı kötü bir fikirdir, bunu yapmayın, bir bağlantı havuzu kullanın veya performans sorunları yaşayın. PostgreSQL 8.3 yıllarca EOL'dir, lütfen güncel bir sürüm kullanın.
Frank Heikens
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.