Bağlantı havuzunu kullanın

Lakebase, bir sunucu bağlantıları havuzu tutan ve bunları birçok istemci bağlantısında paylaşan yerleşik bir PgBouncer bağlantı havuzu oluşturucu içerir. Havuz oluşturucu 10.000'e kadar eşzamanlı istemci bağlantısını destekleyip sunucusuz işlevler, web API'leri ve birçok kısa süreli bağlantı açan diğer uygulamalar için uygun olmasını sağlar.

Bağlantı havuzu yerel Postgres parola kimlik doğrulaması gerektirir. OAuth rolleri için kullanılamaz.

Bağlantı havuzu nasıl çalışır?

Postgres her istemci için ayrı bir işlem oluşturduğundan her Postgres bağlantısı sunucu kaynaklarını kullanır. Eşzamanlı bağlantılar büyüdükçe, sunucunun bağlantı sınırını hızla tüketebilir.

Bağlantı havuzu oluşturucu, uygulamanızla Postgres arasında yer alır. İstemciler havuza bağlanır ve havuz oluşturucu sorguları gerçek sunucu bağlantılarının daha küçük bir havuzuna iletir. Lakebase, PgBouncer'ı işlem modunda çalıştırır, bu nedenle sunucu bağlantısı yalnızca tek bir işlem süresi boyunca tutulur ve ardından havuza döndürülür. Bu, birçok istemcinin küçük bir sunucu bağlantısı havuzunu paylaşmasına olanak tanır.

Bağlantı havuzları

PgBouncer, her veritabanı ve kullanıcı bileşimi için ayrı bir havuz oluşturur. Aynı veritabanına bağlanan iki kullanıcı bağımsız havuzlar alır. Her havuzun boyutu, işlem boyutuna göre değişen Postgres max_connections sınırının yaklaşık 90%'dir.

Havuzdaki tüm bağlantılar kullanımda olduğunda, yeni istemci istekleri kuyrukta bekler. Sunucu bağlantısı 2 dakika içinde kullanılabilir duruma gelmezse istemci bir zaman aşımı hatası alır.

Birden çok istemci bağlantısının PgBouncer üzerinden, kullanıcı ve veritabanı başına ayrı havuzlara yönlendirildiğini ve bu havuzların max_connections ile sınırlanan sınırlı sayıdaki doğrudan Postgres bağlantısını paylaştığını gösteren diyagram.

Diyagramda, farklı kullanıcılardan gelen birden çok istemci bağlantısının, sınırlı sayıda gerçek Postgres bağlantısını paylaşan ayrı PgBouncer havuzları (kullanıcı/veritabanı bileşimi başına bir tane) üzerinden nasıl yönlendirildiği gösterilir.

Bağlantı sınırları

Bağlantı havuzunu idare eden üç sınır:

Sınır Değer Neleri denetler?
İstemci bağlantıları (max_client_conn) 10.000 Uygulamanızdan PgBouncer'a en fazla bağlantı
Havuz boyutu (default_pool_size) Yaklaşık %90 max_connections (kullanıcı, veritabanı) çifti başına etkin sunucu bağlantıları
Doğrudan bağlantılar (max_connections) İşlem boyutuna göre değişir En fazla doğrudan Postgres bağlantısı

Doğrudan bağlantı sınırı, işlem boyutunuza bağlıdır. Örneğin, 8 CU işlem 1.678 doğrudan bağlantıyı ve 16 CU işlem 3.357'yi destekler. Tam liste için bkz . İşlem belirtimleri.

10.000 istemci bağlantı sınırı, 10.000 eşzamanlı sorgu sonucu anlamına gelmez. PgBouncer'ın kabul ettiği en fazla istemci bağlantısı sayısını temsil eder. Eşzamanlı etkin işlemlerin sayısı havuz boyutuyla sınırlanır ve bu da yaklaşık olarak 90% olur max_connections.

Bağlantı havuzunu etkinleştirme

Prerequisites

  • Lakebase Otomatik Ölçeklendirme projeniz etkin olmalıdır.
  • Projede yerel bir Postgres parola rolünüz olmalıdır. Yönergeler için bkz. Yerel Postgres parola rolü oluşturma.
  • Bağlantı havuzunu salt okunur işlem örnekleriyle kullanmak için Salt okunur işlem örneklerine erişime izin ver seçeneğinin etkinleştirildiği yüksek kullanılabilirlik uç noktanız olmalıdır. Bkz. Yüksek kullanılabilirlik.

Steps

  1. Lakebase Uygulamasında projenize gidin ve Bağlan'a tıklayın.
  2. Bağlanmak istediğiniz şubeyi ve bilgisayarı seçin.
  3. Rol açılan listesinden yerel bir Postgres parola rolü seçin. Bağlantı havuzu anahtarı yalnızca bir parola rolü seçildiğinde görünür. OAuth rolleri için gizlidir.
  4. Bağlantı havuzu özelliğini açın.
  5. bağlantı dizesi kopyalayın ve uygulamanızda kullanın.

Yerel Postgres parola rolü için etkinleştirilmiş Bağlantı havuzu geçiş düğmesini gösteren Bağlan iletişim kutusu.

Bağlantı dizesi biçimleri

Pooler için kullanılan bağlantı dizeleri, doğrudan veritabanı bağlantılarından farklı bir ana makine adı kullanır. Ana bilgisayar adı, okuma-yazma işlem altyapısı için uç nokta kimliğinden sonra -pooler veya salt okunur işlem altyapısı için -ro-pooler içerir:

İşlem türü Ana bilgisayar adı biçimi Ne zaman kullanılır?
Okuma-yazma işlemi <endpoint-id>-pooler.<region>.<cloud>.databricks.com Tüm yazma ve okuma trafiği
Salt okunur hesaplama <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com Trafiği yalnızca oku. Okuma erişimi etkinleştirilmiş yüksek kullanılabilirlik uç noktası gerektirir.

Her ikisi de 5432 numaralı bağlantı noktasını kullanır.

Note

Uç noktanız, bölgeniz ve bulutunuz için doğru ana bilgisayar adını almak amacıyla pooler bağlantı dizesi'ini Lakebase Uygulamasındaki Connect iletişim kutusundan doğrudan kopyalayın.

PgBouncer yapılandırması

Lakebase, PgBouncer'ı aşağıdaki ayarlarla yönetir. Bu ayarlar sabittir ve özelleştirilemez.

[pgbouncer]
pool_mode=transaction
max_client_conn=10000
default_pool_size=0.9 * max_connections
max_prepared_statements=1000
query_wait_timeout=120
Setting Description
pool_mode=transaction Sunucu bağlantıları her işlemden sonra havuza geri döner. Bkz. İşlem modu.
max_client_conn=10000 PgBouncer tarafından kabul edilen en fazla eşzamanlı istemci bağlantısı.
default_pool_size=0.9 * max_connections (kullanıcı, veritabanı) çifti başına etkin sunucu bağlantıları. İşlem boyutuna göre değişir.
max_prepared_statements=1000 İşlem modunda protokol düzeyinde hazırlanmış deyimlere izin verir. İstemci bağlantısı başına izlenen ifadeleri 1.000 ile sınırlar.
query_wait_timeout=120 İstemcinin, zaman aşımı hatası almadan önce sunucu bağlantısı için beklediği saniye sayısı.

İşlem modu

İşlem modu bağlantı verimliliğini artırır ancak kalıcı sunucu bağlantısı gerektiren bazı Postgres özelliklerini kısıtlar. Bağlantı havuzu oluşturucu kullanılırken aşağıdaki özellikler kullanılamaz:

  • SQL düzeyinde hazırlanmış deyimler: PREPARE ve DEALLOCATE deyimleri işlem modunda desteklenmez. Sürücü düzeyindeki hazırlanmış ifadeler (psycopg, node-postgres, JDBC ve benzeri kütüphanelerin dahili olarak kullandığı) PgBouncer'ın protokol düzeyindeki desteği sayesinde doğru şekilde çalışır. JDBC için, hazırlanan deyimlerle ilgili hatalar görürseniz, adlandırılmış sunucu tarafı hazırlanmış deyimlerin önbelleğe alınmasını devre dışı bırakmak için prepareThreshold=0 ayarlayın.

  • Oturum düzeyi ayarları: SET her işlem farklı bir sunucu bağlantısı kullanabileceğinden komutlar işlemler arasında kalıcı olmaz. Örneğin:

    BEGIN;
    SET search_path TO myschema;
    SELECT * FROM mytable; -- works in this transaction
    COMMIT;
    -- connection returns to pool after COMMIT
    SELECT * FROM mytable; -- ERROR: relation "mytable" does not exist
    

    Bir ayarı kalıcı olarak uygulamak için şunu kullanın ALTER ROLE :

    ALTER ROLE myrole SET search_path TO myschema, public;
    
  • Oturumda tutulan geçici tablolar: İşlemler arasında kalıcı olan geçici tablolar kullanılamaz. Havuza döndürülen bir bağlantı, sonraki işlemde farklı bir istemciye atanabilir.

  • WITH HOLD imleçler: ile WITH HOLD bildirilen imleçler kalıcı bir bağlantı gerektirir ve desteklenmez.

  • Danışmanlık kilitleri: PgBouncer danışmanlık kilitlerini desteklemez. Danışman kilitler, işlem modunda mevcut olmayan kalıcı bir sunucu bağlantısı gerektirir.

  • LISTEN/NOTIFY: Desteklenmez. Pub/sub mesajlaşması gerektiren uygulamalar için doğrudan bir bağlantı kullanın.

  • pg_dump ve şema geçişleri: Şema geçişleri, oturum düzeyi durumunu kullanan diğer araçlar ve pg_dump için doğrudan bağlantı kullanın.

Note

Oturum düzeyinde Postgres özellikleri gerektiren uygulamalar için, Connect iletişim kutusundan, Connection pooling anahtarını etkinleştirmeden doğrudan bir bağlantı dizesi kullanın.