Gunakan pengumpulan koneksi

Penting

Lakebase Autoscaling adalah versi terbaru Lakebase, dengan komputasi penskalaan otomatis, skala-ke-nol, percabangan, dan pemulihan instan. Untuk wilayah yang didukung, lihat Ketersediaan wilayah. Jika Anda adalah pengguna Lakebase Provisioned, lihat Lakebase Provisioned.

Lakebase menyertakan pengumpul koneksi PgBouncer bawaan yang memelihara kumpulan koneksi server dan membagikannya di banyak koneksi klien. Pooler mendukung hingga 10.000 koneksi bersamaan, sehingga cocok untuk fungsi tanpa server, API web, dan aplikasi lain yang membuka banyak koneksi berumur pendek.

Pengumpulan koneksi memerlukan autentikasi kata sandi Postgres asli. Ini tidak tersedia untuk peran identitas OAuth atau Azure Databricks.

Cara kerja pengumpulan koneksi

Setiap koneksi Postgres menggunakan sumber daya server karena Postgres membuat proses terpisah untuk setiap klien. Aplikasi yang membuka banyak koneksi berumur pendek, seperti API web dan fungsi tanpa server, dapat menghabiskan batas koneksi server dengan cepat.

Pengumpul koneksi berada di antara aplikasi Anda dan Postgres. Klien terhubung ke pengumpul, dan pengumpul meneruskan kueri ke kumpulan koneksi server yang lebih kecil. Ketika transaksi selesai, pengumpul mengembalikan koneksi server ke kumpulan, membuatnya tersedia untuk klien berikutnya.

Lakebase menjalankan PgBouncer dalam mode transaksi. Dalam mode transaksi, koneksi server disimpan selama satu transaksi dan kemudian dikembalikan ke kumpulan. Ini memungkinkan banyak klien berbagi kumpulan kecil koneksi server.

Mode transaksi meningkatkan efisiensi koneksi tetapi membatasi fitur Postgres tertentu yang memerlukan koneksi server persisten. Lihat Batasan mode transaksi.

Kumpulan koneksi

PgBouncer membuat kumpulan terpisah untuk setiap kombinasi database dan pengguna. Dua pengguna yang tersambung ke database yang sama mendapatkan kumpulan independen. Ukuran setiap kumpulan adalah sekitar 90% dari batas koneksi langsung komputasi.

Ketika semua koneksi dalam kumpulan sedang digunakan, permintaan klien baru menunggu dalam antrean. Jika koneksi server tidak tersedia dalam waktu 2 menit, klien akan menerima kesalahan batas waktu.

Batas koneksi

Tiga batas mengatur pengumpulan koneksi:

Batasan Nilai Apa yang dikontrolnya
Koneksi klien (max_client_conn) 10,000 Koneksi maksimum dari aplikasi Anda ke PgBouncer
Ukuran kumpulan (default_pool_size) ~90% dari max_connections Koneksi server aktif per pasangan (pengguna, database)
Koneksi langsung (max_connections) Bervariasi menurut ukuran komputasi Koneksi Postgres langsung maksimum

Batas koneksi langsung tergantung pada ukuran komputasi Anda. Misalnya, komputasi CU 8 mendukung 1.678 koneksi langsung dan komputasi CU 16 mendukung 3.357. Untuk daftar lengkapnya, lihat Spesifikasi komputasi.

Pooling koneksi memungkinkan aplikasi Anda mendukung jauh lebih banyak pengguna bersamaan daripada yang diizinkan oleh batas koneksi langsung saja.

Prasyarat

  • Proyek Autoscaling Lakebase Anda harus aktif.
  • Anda harus memiliki peran kata sandi Postgres asli dalam proyek. Untuk petunjuknya, lihat Membuat peran kata sandi Postgres asli.
  • Untuk menggunakan pengumpul baca-saja, Anda harus memiliki titik akhir ketersediaan tinggi dengan Izinkan akses ke instans komputasi baca-saja diaktifkan. Lihat Ketersediaan tinggi.

Aktifkan pengumpulan koneksi

  1. Di Aplikasi Lakebase, buka proyek Anda dan klik Sambungkan.
  2. Pilih cabang dan komputasi yang ingin Anda sambungkan.
  3. Dari menu drop-down Peran , pilih peran kata sandi Postgres asli. Tombol Pengumpulan koneksi hanya terlihat saat peran kata sandi dipilih. Ini disembunyikan untuk peran identitas OAuth dan Azure Databricks.
  4. Aktifkan Penggunaan koneksi bersama.
  5. Salin string koneksi dan gunakan di aplikasi Anda.

Dialog Sambungkan memperlihatkan tombol Pengumpulan koneksi diaktifkan untuk peran kata sandi Postgres asli.

Format koneksi string

String koneksi pooler menggunakan nama host yang berbeda dari koneksi database langsung:

Tipe Format nama host Kapan digunakan
Pengumpul baca-tulis <endpoint-id>-pooler.<region>.<cloud>.databricks.com Semua lalu lintas tulis dan baca dirutekan melalui pooler
Pooler Baca-Saja <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com Membaca lalu lintas saja. Memerlukan titik akhir ketersediaan tinggi dengan akses baca diaktifkan.

Kedua jenis pooler menggunakan port 5432.

Note

Salin pooler string koneksi Anda langsung dari dialog Connect di Aplikasi Lakebase untuk mendapatkan hostname yang benar untuk endpoint, wilayah, dan cloud Anda.

Batasan mode transaksi

Fitur Postgres berikut ini tidak tersedia saat menggunakan pengumpul koneksi:

  • Pernyataan yang disiapkan tingkat SQL: PREPARE dan DEALLOCATE pernyataan tidak didukung dalam mode transaksi. Pernyataan yang telah disiapkan pada level driver (digunakan secara internal oleh psycopg2, node-postgres, JDBC, dan pustaka serupa) berfungsi dengan baik melalui dukungan tingkat protokol PgBouncer. Untuk JDBC, jika Anda melihat kesalahan yang terkait dengan pernyataan yang disiapkan sisi server bernama, atur prepareThreshold=0 untuk menonaktifkan penyimpanan sementara pernyataan tersebut.

  • Pengaturan tingkat sesi: SET perintah tidak bertahan di seluruh transaksi karena setiap transaksi dapat menggunakan koneksi server yang berbeda. Contohnya:

    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
    

    Untuk menerapkan pengaturan secara permanen, gunakan ALTER ROLE sebagai gantinya:

    ALTER ROLE myrole SET search_path TO myschema, public;
    
  • Tabel sementara dalam sesi: Tabel sementara yang berlangsung di antara transaksi tidak tersedia. Koneksi yang dikembalikan ke pool dapat ditetapkan ke klien lain pada transaksi berikutnya.

  • WITH HOLD kursor: Kursor yang dideklarasikan dengan WITH HOLD memerlukan koneksi persisten dan tidak didukung.

  • Kunci penasihat: PgBouncer tidak mendukung kunci penasihat. Kunci penasihat memerlukan koneksi server persisten, yang tidak tersedia dalam mode transaksi.

  • LISTEN/NOTIFY: Tidak didukung. Gunakan koneksi langsung (tanpa kumpulan) untuk aplikasi yang memerlukan pengiriman pesan (pub/sub).

  • pg_dump dan migrasi skema: Gunakan koneksi langsung untuk pg_dump, migrasi skema, dan alat lain yang mengandalkan status tingkat sesi.

Note

Untuk aplikasi yang memerlukan fitur pada level sesi Postgres, gunakan string koneksi langsung dari dialog Connect tanpa mengaktifkan toggle pooling koneksi.

Langkah berikutnya

  • String koneksi: Referensi format string koneksi untuk koneksi langsung. Lihat String koneksi.
  • Buat peran Postgres: Cara membuat peran kata sandi Postgres asli yang diperlukan untuk pengumpulan koneksi. Lihat Membuat peran Postgres.
  • Tentang autentikasi: Perbandingan OAuth dan metode autentikasi kata sandi. Lihat Tentang autentikasi.