PostgreSQL için max_connections ve pgbouncer için default_pool_size nasıl hesaplanır?


17

Bir kural falan ben için iyi bir sayısını hesaplamak için kullanabileceğiniz var mı max_connections, default_pool_sizeve max_client_conn?

Varsayılan değerler tuhaftır. PostgreSQL varsayılanı max_connections = 100, pgbouncer varsayılanı default_pool_size = 20'dir. Default_pool_size her zaman max_connections'dan yüksek olmamalı mı? Aksi takdirde, ne anlamı var? Pgbouncer'in ek yüklerini azaltarak (PostgreSQL'in bağlantılarını yeniden kullanarak) daha fazla bağlantıyı ele almamızı sağladığını düşündüm. Kafam karıştı.

PostgreSQL'in wiki'sinde bulunanlara benzer tavsiyeler arıyorum , "bu parametre hafızanızın ~% 50'si olmalıdır" gibi.

Bu tür parametreleri hesaplamanıza izin veren MySQL için bir elektronik tablo olduğunu hatırlıyorum. PostgreSQL / pgbouncer için böyle bir şeye sahip olmak harika olurdu.

Yanıtlar:


12

Öncelikle, Kapasite Planlama hakkındaki kanonik sorumuzu okuyun .
Sorduğunuz özel tavsiye, kapasite planlama tavsiyesidir ve bunu, kendi ortamınız için kendi başınıza halletmeniz gerekecektir.

İkincisi, buna yanlış bakıyorsunuz.
Bellek (veya başka bir kaynak) miktarı, ayarladığınız bağlantı sayısını, ihtiyacınız olan bağlantı sayısını, bir sunucuyu ne kadar satın almanız gerektiğini belirler.
Bağlantı başına kaynak gereksinimleri , kılavuzda önemli ölçüde ayrıntılı olarak verilmiştir ve bağlandığınız Wiki'de tartışılmıştır. Ortamınızın neye ihtiyacı olduğunu belirleyin (veya eğitimli bir tahminde bulunun) ve çalışacağınız donanımın ona atacağınız şeyle başa çıkabileceğinden emin olun.


Özellikle yeniden: bağlantı sınırları ve havuz boyutu, tek bir sunucuda veya bir havuz / bouncer aracılığıyla uygulamanızın gereksinimlerini karşılamak için "yeterli" bağlantınız olmalıdır.

"Yeterli" göreceli bir sayıdır: Bir bağlantıyı yapan (ve sürekli olarak yeniden kullanan) bir uygulama yalnızca bir bağlantı gerektirir. Oturum açan her son kullanıcı için bağlantı kuran bir uygulama, kullanıcısı kadar DB bağlantısı gerektirir.

Her iki Postgres için de varsayılan değerler ve varsayılanpgbouncer olarak duyarlıdır :

  • Postgres'i bir ortama atan tipik bir kişi için 100 veritabanı bağlantısı çoktur.
    Geliştiriciler muhtemelen 10'dan daha fazlasına ihtiyaç duymayacaklar.

  • pgbouncerDB havuzu başına 20 bağlantı , bir sunucuya işaret eden 4 havuz alabileceğiniz ve varsayılan Postgres bağlantı sınırını aşmayacağınız anlamına gelir. Bir arka uç veritabanına işaret eden
    birden fazla havuzlanmış kaynağa sahip olmak mümkündür pgbouncerve her zaman arka uç sunucularınızda bazı kullanılabilir bağlantılar istersiniz.

Eğer varsayılan ortamınız için uygun değildir bunları değiştirmek bekleniyor.

Havuzlanmış bağlantıların "her zaman kullanılabilir her veritabanı bağlantısını bağlayın" anlamına gelmediğini unutmayın. Belirttiğiniz
nokta, bağlantıları yeniden kullanmaktır . Buradaki verimlilik kazancı, mevcut her bağlantıyı bağlamanızı gerektirmez; yalnızca bağlantıyı kesmeyin, yeniden bağlanmayın, yeniden pazarlık yapmayın, veritabanında yeniden kimlik doğrulaması yapmayın ve bağlantı kurulum sorgularınızı her seferinde yeniden çalıştırmayın.pgbouncer


8
Bir şeyleri düzgün yapılandırmadan önce daha fazla donanım satın alma noktasını görmüyorum. "Başkasının sayısını artırmak için yeterli bilecek" . Peki, yeterince bilmeyi nereden öğrenebilirim? Bağlantılar hakkında fazla malzeme bulamıyorum. Sadece deneme yanılma mı? MySQL için bahsettiğim elektronik tablo bir cazibe gibi çalışıyordu. Belirtilenden daha fazla bağlantı kullanılması, sunucunun belleğinin bitmesine neden olur. Şu anda 4GB'ım var, varsayılanları artırmayı bekliyordum. Ayrıca, 20x4 = 80, diğer 20 ne için?
ChocoDeveloper

1
@ChocoDeveloper Lütfen yanıtımı bütünüyle tekrar okuyun (zaten ele aldığım bazı şeyleri soruyorsunuz) ve bağlantı verdiğim belgelerle birkaç dakika geçirin. Hala buna geriye bakıyorsunuz (cevabımın ilk paragrafına bakınız). Postgres'in MySQL DEĞİLDİR: MySQL ayar deneyiminizden bildiğinizi düşündüğünüz her şeyi unutmanız gerekir. Postgres daha çok Oracle'a benziyor. Kılavuzu inceleyin ve size verdiği talimatlara göre ilerleyin.
voretaq7

1

Belgelerin tanımına dikkat edindefault_pool_size

Kullanıcı / veritabanı çifti başına kaç sunucu bağlantısına izin verilir.

Bu nedenle, varsayılan yapılandırma toplam 100 bağlantıdan 20 havuz büyüklüğündeyse, bu 5 farklı kullanıcı / veritabanı çiftinin, genel sınıra ulaşmadan önce havuz boyutlarını maksimize etmek zorunda kalacağı anlamına gelir. Tersine, örneğin tek bir kullanıcı üzerinden tek bir veritabanına yönlendirmek için pgbouncer kullanıyorsanız, etkin bağlantı sınırınız 100 değil, 20'dir, bu nedenle bu kullanım durumu için havuz boyutunu buna göre ayarlamanız gerekir. YMMV.

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.