Aracılığıyla paylaş


PostgreSQL için Azure Veritabanı esnek sunucusunda 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 pgbouncer.enableddeğiştirintrue. Sunucuyu yeniden başlatmanız gerekmez.

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

Not

Aşağıdaki PgBouncer sunucu parametreleri listesi, Sunucu parametreleritrue. Aksi takdirde, bunlar kasıtlı olarak gizlenir.

Parametre adı Açıklama Varsayılan
pgbouncer.default_pool_size (pgbouncer varsayılan havuz boyutu) 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 PgBouncer istemci bağlantısı sayısı üst sınırına ayarlayın. Varsayılan değer 5000'dir ve izin verilebilen aralık 1 ile 50.000 arasındadır 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 (Bağlantı havuzunun minimum boyutu) 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 (Kullanıcı istatistikleri) 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ümlerine (17 (önizleme), 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

Etkin bağlantılar, boşta bağlantılar, toplam havuza alınan bağlantılar ve bağlantı havuzlarının sayısı gibi PgBouncer işleminin performansını izlemek için PgBouncer ölçümlerini kullanabilirsiniz. Her ölçüm 1 dakikalık bir aralıkta yayılır ve 93 güne kadar geçmişe sahiptir. Müşteriler ölçümler üzerinde uyarılar yapılandırabilir ve ayrıca ölçüm verilerini veritabanı adına göre bölmek ve filtrelemek için yeni ölçüm boyutlarına erişebilir.

PgBouncer ölçümlerini etkinleştirme

  • PgBouncer ölçümlerini izlemek için pgbouncer özelliğinin sunucu parametresi pgbouncer.enabled aracılığıyla etkinleştirildiğinden ve ölçümler parametresinin metrics.pgbouncer_diagnostics etkinleştirildiğinden emin olun.
  • Bu parametreler dinamiktir ve örneğin yeniden başlatılmasını gerektirmez.
  • PgBouncer ölçümleri varsayılan olarak devre dışı bırakılır.

PgBouncer ölçümlerinin listesi

Görünen ad Ölçüm Kimliği Birim Açıklama Boyut Varsayılan etkin
Etkin istemci bağlantıları client_connections_active Sayı PostgreSQL için Azure Veritabanı esnek sunucu bağlantısıyla ilişkili istemcilerden gelen bağlantılar. Veritabanı Adı Hayır
İstemci bağlantısı bekleniyor client_connections_waiting Sayı PostgreSQL için Azure Veritabanı esnek sunucu bağlantısının hizmet vermesini bekleyen istemcilerden gelen bağlantılar. Veritabanı Adı Hayır
Etkin sunucu bağlantıları server_connections_active Sayı Bir istemci bağlantısı tarafından kullanılmakta olan PostgreSQL esnek sunucu için Azure Veritabanı bağlantıları. Veritabanı Adı Hayır
Boşta kalan sunucu bağlantıları server_connections_idle Sayı Boşta olan ve yeni bir istemci bağlantısına hizmet vermek için hazır olan PostgreSQL için Azure Veritabanı esnek sunucusuna bağlantılar. Veritabanı Adı Hayır
Toplam havuz bağlantıları total_pooled_connections Sayı Şu anki havuzlanmış bağlantıların sayısı. Veritabanı Adı Hayır
Bağlantı havuzu sayısı num_pools Sayı Toplam bağlantı havuzu sayısı. Veritabanı Adı Hayır

PgBouncer ölçümlerini kullanmayla ilgili dikkat edilmesi gerekenler

  • DatabaseName boyutunu kullanan PgBouncer ölçümlerinin veritabanı sınırı 30'dur.
  • Burstable SKU'da, DatabaseName boyutuna sahip 10 veri tabanı sınırı bulunmaktadır.
  • DatabaseName boyut sınırı, veritabanı oluşturma sırasını yansıtan OID sütununa uygulanır.

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

Yönetici konsolu

PgBouncer, adlı bir pgbouncer 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=<password> 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=<password> 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.

  • Azure AD Kimlik Doğrulaması ile Belirteç Boyutu Kısıtlaması - Çok sayıda grup üyeliğine sahip 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 require_secure_transportolarak ayarlandığındaON, 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 . PostgreSQL için Azure Veritabanı esnek sunucusunda TLS ve SSL ile güvenli bağlantı.

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.