Uygulamanız çok sayıda kısa ömürlü bağlantı oluşturuyorsa veya yüksek bağlantı değişim oranına sahipse bağlantı havuzunu (PgBouncer) etkinleştirmek veritabanı sunucu yükünü azaltır ve yanıt süresini iyileştirir. PgBouncer, uygulamanız ile ApsaraDB RDS for PostgreSQL arasında konumlanarak arka uç bağlantılarını birçok istemci bağlantısı arasında yeniden kullanır; böylece veritabanının sürekli olarak bağlantı açıp kapatması engellenir.
Bağlantı havuzunun ne zaman kullanılacağı
Her iş yükü PgBouncer'dan fayda görmez. Havuzlu veya doğrudan bağlantı türlerinden hangisini seçmeniz gerektiğine karar vermek için aşağıdaki tabloyu kullanın.
| Senaryo | Bağlantı türü | Neden |
|---|---|---|
| Sunucusuz veya uç işlevler | Havuzlu | Her çağrı yeni bir bağlantı oluşturur |
| Çok sayıda eşzamanlı isteğe sahip web uygulamaları | Havuzlu | İstek başına bağlantı ek yükünü azaltır |
| ORM çerçevelerinden kaynaklanan yüksek bağlantı değişimi | Havuzlu | Arka uç bağlantılarını yeniden kullanır |
| Şema geçişleri | Doğrudan | Geçiş araçları SET deyimlerini veya danışman kilitlerini kullanabilir |
| Uzun süren analitik sorgular | Doğrudan | Havuz rekabetini önler |
pg_dump veya pg_restore |
Doğrudan | Oturum düzeyinde SET deyimlerini kullanır |
| Mantıksal çoğaltma | Doğrudan | Kalıcı bir oturum gerektirir |
| Hazırlanmış ifadeler (işlem modunda) | Doğrudan | İşlem havuzlamasında desteklenmez |
Ön koşullar
Başlamadan önce ApsaraDB RDS for PostgreSQL örneğinizin aşağıdaki tüm gereksinimleri karşıladığından emin olun:
Ana motor sürümü: PostgreSQL 11 veya üzeri
Ürün serisi: Basic Edition veya High-availability Edition
Faturalama yöntemi: abonelik veya kullandıkça öde
Küçük motor sürümü: 20240830 veya üzeri,
babelfishsoneki olmadan
Küçük motor sürümünü görüntülemek veya yükseltmek için bkz. ApsaraDB RDS for PostgreSQL örneğinin küçük motor sürümünü yükseltme.
Faturalama
Bu özellik ücretsizdir.
Nasıl çalışır?
PgBouncer, uygulamanız ile veritabanı arasında bir ara katman görevi görür. İstemciler varsayılan olarak 6432 numaralı bağlantı noktasından PgBouncer'a bağlanır. PgBouncer, PostgreSQL'e yönelik arka uç bağlantılarını varsayılan olarak 5432 numaralı bağlantı noktasında tutar ve yapılandırılan havuz moduna göre bunları istemcilere atar.
PgBouncer etkinleştirildiğinde:
Yeni bir PgBouncer bağlantı noktası (varsayılan: 6432) tahsis edilir. Mevcut bağlantılarınız orijinal veritabanı bağlantı noktası (5432) üzerinden etkilenmez.
Sistem, bağlantı havuzu ölçümlerini desteklemek üzere
postgresveritabanınapgbouncer_fdwvedblinkeklentilerini yükler. Bu eklentiler kaldırılamaz.
Bağlantı havuzunu etkinleştirin veya devre dışı bırakın
Örnekler sayfasına gidin. Üst gezinme çubuğundan RDS örneğinizin bulunduğu bölgeyi seçin. Örneği bulun ve ID değerine tıklayın.
Sol gezinme bölmesinde Database Connection öğesine tıklayın.
Enable PgBouncer veya Disable PgBouncer seçeneğine tıklayın.
Görüntülenen iletişim kutusunda OK düğmesine tıklayın.
PgBouncer etkinleştirildikten sonra Database Connection sayfasında PgBouncer bağlantı noktası (varsayılan: 6432) görünür. Bağlantı noktasını değiştirmek için Modify Endpoint seçeneğine tıklayın, bir uç nokta türü seçin ve PgBouncer Port alanını güncelleyin.
PgBouncer'ı devre dışı bıraktıktan sonra 6432 numaralı bağlantı noktasını kullanacak şekilde yapılandırılmış uygulamalar bağlanamaz. Devre dışı bırakmadan önce uygulamalarınızı orijinal veritabanı bağlantı noktasına (varsayılan: 5432) geri yönlendirin.
Bağlantı havuzu üzerinden bağlanma
PgBouncer'ı etkinleştirdikten sonra uygulamanızın bağlantı bağlantı noktasını 5432'den 6432'ye güncelleyin. Diğer tüm bağlantı parametreleri — uç nokta, kullanıcı adı ve parola — değişmeden kalır.
Önce (doğrudan bağlantı):
postgresql://<username>:<password>@<endpoint>:5432/<database>
Sonra (havuzlu bağlantı):
postgresql://<username>:<password>@<endpoint>:6432/<database>
Daha fazla bilgi için bkz. ApsaraDB RDS for PostgreSQL örneğine bağlanma.
Bağlantı havuzu parametrelerini yapılandırma
PgBouncer'ı etkinleştirdikten sonra bağlantı havuzu davranışını ayarlamak için Parameter Settings özelliğini kullanın.
Parameter Settings, yalnızca PgBouncer etkinleştirildikten sonra PgBouncer parametrelerini gösterir. Parametreleri toplu olarak değiştirmek için bir
uygulamak istiyorsanız önce PgBouncer'ı etkinleştirin, ardından şablonu uygulayın.
Varsayılan parametre şablonu PostgreSQL_PgBouncer_Default Parameter Template (rpg-sys-pgsql-pgbouncer) şeklindedir.
Havuz modu
pgbouncer.pool_mode parametresi, PgBouncer'ın arka uç bağlantısını havuza ne zaman iade edeceğini kontrol eder.
| Mod | Varsayılan | Nasıl çalışır | Ne zaman kullanılır |
|---|---|---|---|
transaction |
Evet | Her işlemden sonra bağlantıyı iade eder | Çoğu uygulama. En yüksek bağlantı yeniden kullanımını sağlar. |
session |
Hayır | İstemci bağlantısı kesildiğinde bağlantıyı iade eder | Oturum düzeyi özellikleri kullanan uygulamalar (SET, LISTEN, hazırlanmış ifadeler, danışman kilitleri) |
statement |
Hayır | Her deyimden sonra bağlantıyı iade eder. Yalnızca otomatik onaylama iş yükleri için geçerlidir. Birden çok deyimi kapsayan işlemler desteklenmez. | Yalnızca otomatik onaylama iş yükleri |
Bağlantı sınırları
Aşağıdaki parametreler, PgBouncer'ın kabul ettiği ve veritabanına ilettiği bağlantı sayısını kontrol eder. max_client_conn ve default_pool_size farklı katmanlarda çalışır: max_client_conn gelen istemci bağlantılarını sınırlarken default_pool_size giden arka uç bağlantılarını sınırlar. Birçok istemci, daha küçük bir arka uç bağlantı havuzunu paylaşabilir; bu, bağlantı havuzlamanın temel faydasıdır.
| Parametre | Tür | Varsayılan | Ne kontrol eder |
|---|---|---|---|
pgbouncer.max_client_conn |
int | 100 | PgBouncer'ın kabul ettiği maksimum istemci bağlantısı sayısı |
pgbouncer.default_pool_size |
int | 20 | Bağlantı havuzunda izin verilen varsayılan bağlantı sayısı |
pgbouncer.min_pool_size |
int | 0 | Bağlantı havuzu tarafından izin verilen minimum istemci bağlantısı sayısı |
Diğer parametreler
| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
pgbouncer.query_wait_timeout |
int | 120 | Bir sorgunun kuyrukta bekleyebileceği maksimum süre (saniye). Zaman aşımına ulaşıldığında istemcinin bağlantısı kesilir. Süresiz bekleme için 0 olarak ayarlayın. |
pgbouncer.ignore_startup_parameters |
string | "extra_float_digits" |
PgBouncer'ın yoksaydığı başlangıç parametrelerinin virgülle ayrılmış listesi. Varsayılan olarak PgBouncer yalnızca çekirdek parametreleri (client_encoding, datestyle, timezone, standard_conforming_strings) işler ve bilinmeyen parametreler gönderen bağlantıları reddeder. Ekstra parametreleri buraya ekleyin. PostgreSQL JDBC (Java Database Connectivity) sürücüleriyle uyumluluğu korumak için her zaman extra_float_digits parametresini saklayın. |
pgbouncer.stats_users |
string | "" |
PgBouncer sanal veritabanına bağlanmaya ve salt okunur sorgular çalıştırmaya izin verilen kullanıcıların virgülle ayrılmış listesi. |
Tam parametre referansı için resmi PgBouncer belgelerine bakın.
Bağlantı havuzu ölçümlerini görüntüleme
Bağlantı havuzu etkinliğini izlemek için Enhanced Monitoring kullanın. Ölçümler yalnızca PgBouncer etkinleştirildikten sonra kullanılabilir.
| Ölçüm | Açıklama |
|---|---|
db.pgbouncer.client_connections.active |
Etkin istemci bağlantıları |
db.pgbouncer.client_connections.waiting |
Arka uç bağlantısı bekleyen istemci bağlantıları |
db.pgbouncer.server_connections.active |
Etkin arka uç bağlantıları |
db.pgbouncer.server_connections.idle |
Boştaki arka uç bağlantıları |
db.pgbouncer.total_pooled_connections |
Havuzdaki toplam bağlantı sayısı |
db.pgbouncer.num_pools |
Bağlantı havuzu sayısı |
Sınırlamalar
Havuzdaki bir bağlantı için maksimum boşta kalma süresi 10 dakikadır. Bu süreyi aşan boşta kalan bağlantılar otomatik olarak kapatılır. Bu değer değiştirilemez.
Örnekte SSL şifrelemesi etkinleştirildiğinde PgBouncer da SSL'yi etkinleştirir. PgBouncer, Erişim Kontrol Listesi (ACL)
verify-caveyaverify-fullolarak ayarlandığında bağlantı kimlik doğrulamasını desteklemez ve istemci sertifikası iptal dosyalarını desteklemez.
API referansı
PgBouncer'ı programatik olarak etkinleştirmek veya devre dışı bırakmak için ModifyDBInstanceConfig işlemini çağırın.
| Parametre | Açıklama | Örnek |
|---|---|---|
DBInstanceId |
RDS for PostgreSQL örneğinin ID değeri | pgm-**** |
ConfigName |
Yapılandırma öğesinin adı | pgbouncer |
ConfigValue |
Etkinleştirmek için true, devre dışı bırakmak için false |
true |