PostgreSQL için Azure Veritabanı-Esnek Sunucuda PgBouncer

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Esnek Sunucu

esnek sunucu tekliflerini PostgreSQL için Azure VeritabanıYerleşik bağlantı havuzu çözümü olarak PgBouncer. PgBouncer, veritabanı başına sunucu temelinde etkinleştirebileceğiniz isteğe bağlı bir özelliktir. Hem genel erişim hem de özel erişim ağlarında Genel Amaçlı ve Bellek için İyileştirilmiş işlem katmanlarında desteklenir.

PgBouncer, PostgreSQL için Azure Veritabanı esnek sunucu için veritabanı sunucusuyla aynı sanal makinede (VM) çalışır. Postgres, bağlantılar için işlem tabanlı bir model kullandığı için birçok boşta bağlantı tutmak pahalıdır. Postgres, sunucu birkaç binden fazla bağlantı çalıştırdığında kaynak kısıtlamalarıyla karşılaşır. PgBouncer'ın birincil avantajı, veritabanı sunucusunda boşta bağlantıları ve kısa süreli bağlantıları geliştirmektir.

PgBouncer, zaman uyumsuz G/Ç kullanan basit bir model kullanır. Postgres bağlantılarını yalnızca gerektiğinde, yani açık bir işlemin içinde veya bir sorgu etkinken kullanır. Bu model, düşük ek yükle 10.000 bağlantıya kadar ölçeklendirmeye olanak tanır.

PgBouncer, veritabanı sunucunuzdaki 6432 numaralı bağlantı noktasında çalışır. Uygulamanızın veritabanı bağlantı yapılandırmasını aynı ana bilgisayar adını kullanacak şekilde değiştirebilirsiniz, ancak PgBouncer kullanmaya başlamak ve boşta bağlantıların geliştirilmiş ölçeklendirmesinden yararlanmak için bağlantı noktasını 6432 olarak değiştirebilirsiniz.

PostgreSQL için Azure Veritabanı esnek sunucudaki PgBouncer, Microsoft Entra kimlik doğrulamayı (Azure AD) destekler.

PgBouncer'ı etkinleştirme ve yapılandırma

PgBouncer'ı etkinleştirmek için Azure portalında Sunucu parametreleri bölmesine gidin, PgBouncer'ı arayın ve ayarını olarak truedeğiştirinpgbouncer.enabled. Sunucuyu yeniden başlatmanız gerekmez.

Bu parametreleri kullanarak PgBouncer ayarlarını yapılandırabilirsiniz.

Not

Aşağıdaki PgBouncer sunucu parametreleri listesi, Sunucu parametreleri bölmesinde yalnızca sunucu parametresi olarak ayarlandıysa truepgbouncer.enabled görünür. Aksi takdirde, bunlar kasıtlı olarak gizlenir.

Parametre adı Açıklama Varsayılan
pgbouncer.default_pool_size Bu parametre değerini kullanıcı/veritabanı çifti başına bağlantı sayısına ayarlayın. 50
pgbouncer.ignore_startup_parameters PgBouncer'ın yoksayabileceği virgülle ayrılmış bir parametre listesi girin. Örneğin, PgBouncer parametresini extra_float_digits yoksayabilir. Bazı parametrelere izin verilir; diğer tüm kullanıcılar hataya neden olur. Bu özellik, başlatma paketlerinde koşulsuz olarak ayarlanmasını extra_float_digits=2 isteyen aşırı bellekli Java Veritabanı Bağlantısı'na (JDBC) tolerans sağlamak için gereklidir. Kullandığınız kitaplık gibi pq: unsupported startup parameter: extra_float_digitshatalar bildiriyorsa bu seçeneği kullanın.
pgbouncer.max_client_conn Bu parametre değerini, desteklemek istediğiniz en fazla PgBouncer istemci bağlantısı sayısına ayarlayın. Kategori 5000
pgbouncer.max_prepared_statements Bu sıfır olmayan bir değere ayarlandığında PgBouncer, istemci tarafından işlem ve deyim havuzu modunda gönderilen protokol düzeyinde adlandırılmış hazırlanmış deyimlerle ilgili komutları izler. 0
pgbouncer.min_pool_size Bu numaranın altındaysa havuza daha fazla sunucu bağlantısı ekleyin. 0
pgbouncer.pool_mode Bu parametre değerini işlem havuzu için TRANSACTION olarak ayarlayın (çoğu iş yükü için önerilen ayardır). işlem
pgbouncer.query_wait_timeout Sorguların yürütmeyi beklerken harcadığı en uzun süre (saniye cinsinden). Sorgu bu süre boyunca bir sunucuya atanmazsa istemcinin bağlantısı kesilir. 120
pgbouncer.server_idle_timeout Bir sunucu bağlantısı bu kadar saniyeden fazla boşta kalırsa bırakılır. 0 ise zaman aşımı devre dışı bırakılır. 600
pgbouncer.stats_users pgBouncer konsolunda salt okunur sorgulara bağlanmasına ve çalıştırmasına izin verilen veritabanı kullanıcılarının virgülle ayrılmış listesi.

PgBouncer yapılandırmaları hakkında daha fazla bilgi için pgbouncer.ini belgelerine bakın.

PgBouncer sürümü

Şu anda, PostgreSQL için Azure Veritabanı Esnek Sunucu'da altyapının desteklenen tüm ana sürümlerinde (16, 15, 14, 13, 12, 11) dağıtılan PgBouncer sürümü 1.22.1'dir.

Sosyal haklar

Esnek PostgreSQL için Azure Veritabanı sunucu ile yerleşik PgBouncer özelliğini kullanarak şu avantajları elde edebilirsiniz:

  • Basitleştirilmiş yapılandırma kolaylığı: PgBouncer esnek PostgreSQL için Azure Veritabanı sunucuyla tümleştirildiğinden ayrı bir yükleme veya karmaşık kuruluma gerek yoktur. Bunu doğrudan sunucu parametrelerinden yapılandırabilirsiniz.

  • Yönetilen hizmetin güvenilirliği: PgBouncer, Azure yönetilen hizmetlerinin avantajlarını sunar. Örneğin Azure, PgBouncer güncelleştirmelerini yönetir. Otomatik güncelleştirmeler, el ile bakım gereksinimini ortadan kaldırır ve PgBouncer'ın en son özellikler ve güvenlik yamaları ile güncel kalmasını sağlar.

  • Çeşitli bağlantı türleri için destek: esnek PostgreSQL için Azure Veritabanı sunucudaki PgBouncer hem genel hem de özel bağlantılar için destek sağlar. Özel ağlar üzerinden güvenli bağlantılar kurmak veya özel gereksinimlerinize bağlı olarak dışarıdan bağlanmak için bunu kullanabilirsiniz.

  • Yük devretme senaryolarında yüksek kullanılabilirlik: Bir yük devretme sırasında hazır bekleyen sunucu birincil role yükseltilirse, PgBouncer yeni yükseltilen beklemede sorunsuz bir şekilde yeniden başlatılır. Uygulama bağlantı dizesi herhangi bir değişiklik yapmanız gerekmez. Bu özellik sürekli kullanılabilirlik sağlamaya yardımcı olur ve uygulamanın bağlantı havuzunda kesintiyi en aza indirir.

PgBouncer İzleme

Ölçümler

PostgreSQL için Azure Veritabanı esnek sunucu, PgBouncer bağlantı havuzunu izlemek için altı ölçüm sağlar:

Görünen ad Ölçüm Kimliği Unit açıklama Boyut Varsayılan etkin
Etkin istemci bağlantıları (önizleme) client_connections_active Sayı PostgreSQL için Azure Veritabanı esnek sunucu bağlantısıyla ilişkili istemcilerden gelen bağlantılar DatabaseName Hayır
İstemci bağlantıları bekleniyor (önizleme) client_connections_waiting Sayı hizmet vermek için PostgreSQL için Azure Veritabanı esnek sunucu bağlantısı bekleyen istemcilerden gelen bağlantılar DatabaseName Hayır
Etkin sunucu bağlantıları (önizleme) server_connections_active Sayı İstemci bağlantısının kullandığı PostgreSQL için Azure Veritabanı esnek sunucuya bağlantılar DatabaseName Hayır
Boşta sunucu bağlantıları (önizleme) server_connections_idle Sayı Boşta olan ve yeni bir istemci bağlantısına hizmet etmeye hazır PostgreSQL için Azure Veritabanı esnek sunucuya bağlantılar DatabaseName Hayır
Toplam havuza alınan bağlantı sayısı (önizleme) total_pooled_connections Sayı Geçerli havuza alınan bağlantı sayısı DatabaseName Hayır
Bağlantı havuzu sayısı (önizleme) num_pools Sayı Toplam bağlantı havuzu sayısı DatabaseName Hayır

Daha fazla bilgi edinmek için bkz . PgBouncer ölçümleri.

Yönetici konsolu

PgBouncer, adlı pgbouncerbir veritabanı da sağlar. Bu veritabanına bağlandığınızda, PgBouncer'ın geçerli durumu hakkında bilgi sağlayan komutları çalıştırabilirsiniz SHOW .

Veritabanına bağlanmak için pgbouncer :

  1. parametresini pgBouncer.stats_users var olan bir kullanıcının adına ayarlayın (örneğin, myUser) ve değişiklikleri uygulayın.

  2. pgbouncer Veritabanına bu kullanıcı olarak bağlanın ve bağlantı noktasını olarak 6432ayarlayın:

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=myPassword sslmode=require"
    

Veritabanına bağlandıktan sonra PgBouncer istatistiklerini görüntülemek için komutları kullanın SHOW :

  • SHOW HELP: Kullanılabilir SHOW tüm komutları listeleyin.
  • SHOW POOLS: Her havuz için her durumdaki bağlantı sayısını gösterir.
  • SHOW DATABASES: Her veritabanı için geçerli uygulanan bağlantı sınırlarını gösterin.
  • SHOW STATS: Her veritabanı için istekler ve trafik istatistiklerini gösterin.

PgBouncer SHOW komutları hakkında daha fazla bilgi için bkz . Yönetim konsolu.

Uygulamanızı PgBouncer kullanacak şekilde değiştirme

PgBouncer'ı kullanmaya başlamak için şu adımları izleyin:

  1. Veritabanı sunucunuza bağlanın ancak normal 5432 numaralı bağlantı noktası yerine 6432 numaralı bağlantı noktasını kullanın. Bu bağlantının çalıştığını doğrulayın.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. Uyumluluk sorunları yaşamadığınızdan emin olmak için uygulamanızı PgBouncer'a karşı bir Soru-Cevap ortamında test edin. PgBouncer projesi bir uyumluluk matrisi sağlar ve çoğu kullanıcı için işlem havuzu oluşturmanızı öneririz.

  3. Üretim uygulamanızı 5432 yerine 6432 numaralı bağlantı noktasına bağlanacak şekilde değiştirin. Uyumluluk sorunlarına işaret eden uygulama tarafı hatalarını izleyin.

Alanlar arası yedekli yüksek kullanılabilirlik içinde PgBouncer

Alanlar arası yedekli, yüksek kullanılabilirlik (HA) sunucularında birincil sunucu PgBouncer çalıştırır. 6432 numaralı bağlantı noktası üzerinden birincil sunucuda PgBouncer'a bağlanabilirsiniz. Yük devretme işleminden sonra PgBouncer, artık birincil sunucu olan yeni yükseltilen beklemede yeniden başlatılır. Bu nedenle, yük devretme sonrasında uygulamanız bağlantı dizesi aynı kalır.

PgBouncer'ı diğer bağlantı havuzlarıyla kullanma

Bazı durumlarda, uygulama tarafı bağlantı havuzunuz veya uygulama tarafınızda PgBouncer ayarlanmış olabilir (örneğin, Azure Kubernetes Service sepet). Bu gibi durumlarda, yerleşik PgBouncer özelliği boşta bağlantı ölçeklendirmenin avantajlarını sağladığından hala yararlı olabilir.

Veritabanı sunucusunda PgBouncer ile birlikte uygulama tarafı havuzu kullanmak yararlı olabilir. Burada uygulama tarafı havuzu, ilk bağlantı gecikme süresini kısaltır (bağlantıyı başlatmak için gidiş dönüş çok daha hızlı olduğundan) ve veritabanı tarafı PgBouncer boşta bağlantı ölçeklendirmesi sağlar.

Sınırlamalar

  • PgBouncer özelliği şu anda Burstable sunucusu işlem katmanında desteklenmiyor. İşlem katmanını Genel Amaçlı veya Bellek için İyileştirilmiş olan Veri Artırılabilir olarak değiştirirseniz yerleşik PgBouncer özelliğini kaybedersiniz.

  • Sunucu ölçeklendirme işlemleri, HA yük devretme veya yeniden başlatma sırasında yeniden başlatıldığında PgBouncer ve VM de yeniden başlatılır. Daha sonra mevcut bağlantıları yeniden kurmanız gerekir.

  • Portalda tüm PgBouncer parametreleri gösterilmiyor. PgBouncer'ı etkinleştirdikten ve parametreleri kaydettikten sonra Sunucu parametreleri bölmesini kapatmanız (örneğin, Genel Bakış'ı seçmeniz) ve ardından Sunucu parametreleri bölmesine geri dönmeniz gerekir.

  • Deyim havuzu modlarını hazırlanmış deyimlerle birlikte kullanamazsınız. PgBouncer'ın geçerli sürümü, işlem modunda hazırlanan deyimler için destek ekledi. Bu destek max_prepared_statements parametresi aracılığıyla etkinleştirilebilir ve yapılandırılabilir. Bu parametrenin varsayılan 0 değerinin üzerine ayarlanması, hazırlanan deyimler için desteği açar. Bu destek yalnızca protokol düzeyinde hazırlanmış deyimler için geçerlidir. Çoğu programlama dili için bu, istemcide PQprepare libpq işlevini kullandığımız, PgBouncer'ın araya girebileceği protokol düzeyinde komutlar gönderdiğimiz anlamına gelir. Bu komut, PgBouncer'ın doğru yorumlayacağı metni gönderen PREPARE proc AS'ye benzer dinamik bir SQL komutu göndermek yerine. Seçtiğiniz havuz modunun diğer sınırlamalarını denetlemek için PgBouncer belgelerine bakın.

  • PgBouncer bir özellik olarak dağıtılırsa, olası bir hata noktası haline gelir. PgBouncer özelliği kapalıysa, veritabanı bağlantı havuzunun tamamını kesintiye uğratabilir ve uygulama için kapalı kalma süresine neden olabilir. Tek hata noktasını azaltmak için, Azure VM'lerinde yüksek kullanılabilirlik için bir yük dengeleyicinin arkasında birden çok PgBouncer örneği ayarlayabilirsiniz.

  • AAD Kimlik Doğrulaması ile Belirteç Boyutu Kısıtlaması - Çok sayıda grup üyeliği olan kullanıcılar, belirteç boyutu kısıtlaması nedeniyle PgBouncer üzerinden bağlanamaz. Az sayıda grubu olan uygulamalar, hizmetler ve kullanıcılar çalışır.

  • PgBouncer, tek iş parçacıklı mimari kullanan basit bir uygulamadır. Bu tasarım çoğu uygulama iş yükü için mükemmeldir. Ancak çok sayıda kısa süreli bağlantı oluşturan uygulamalarda bu tasarım pgBouncer performansını etkileyebilir ve uygulamanızı ölçeklendirme yeteneğinizi sınırlayabilir. Şu yaklaşımlardan birini denemeniz gerekebilir:

Önemli

Yerleşik PgBouncer özelliğinin parametresi pgbouncer.client_tls_sslmode esnek PostgreSQL için Azure Veritabanı sunucuda kullanım dışı bırakılmıştır.

esnek PostgreSQL için Azure Veritabanı sunucuya bağlantılar için TLS/SSL, sunucu parametresi ONolarak ayarlandığındarequire_secure_transport, yerleşik PgBouncer özelliğine yapılan bağlantılar için TLS/SSL otomatik olarak zorlanır. Yeni bir PostgreSQL için Azure Veritabanı esnek sunucu örneği oluşturduğunuzda ve yerleşik PgBouncer özelliğini etkinleştirdiğinizde bu ayar varsayılan olarak açıktır. Daha fazla bilgi için bkz. Özel erişimli PostgreSQL için Azure Veritabanı - Esnek Sunucu için ağa genel bakış.

Basitleştirilmiş yönetim, yerleşik yüksek kullanılabilirlik, kapsayıcılı uygulamalarla kolay bağlantı ve en popüler yapılandırma parametrelerini kullanabilmek isteyen müşteriler için yerleşik PgBouncer özelliği iyi bir seçimdir. Çok iş parçacıklı ölçeklenebilirlik, tüm parametrelerin tam denetimi ve hata ayıklama deneyimi isteyen müşteriler için, Azure VM'lerinde PgBouncer'ı ayarlamak alternatif olabilir.

Sonraki adımlar