| Jul 18, 2019

5 MIN READ

Written by Nikhil Shetty
Grafana Alerting

Segala yang anda perlu tahu mengenai Connection Pooling dalam Postgres

Connection pooling merujuk kepada kaedah membuat pengumpulan sambungan dan menyimpan sambungan itu agar ia dapat diguna semula.
PostgreSQL, mempunyai satu proses postmaster, yang mewujudkan beberapa proses baru untuk setiap satu sambungan baru ke pangkalan data. Proses ini mengambil kira-kira 2 ke 3 MB memori, yang berlaku setiap kali anda membuat satu sambungan ke pangkalan data. Tanpa pengumpulan sambungan, bagi setiap sambungan, proses postmaster akan perlu mewujudkan satu proses baru di bahagian belakang menggunakan 2 ke 3 MB memori dan ini menimbulkan satu masalah jika jumlah sambungan terlalu tinggi (selalunya dilihat pada aplikasi misi kritikal). Lebih banyak jumlah sambungan, lebih banyak jumlah memori digunakan untuk membuat sambungan-sambungan itu.
Dengan Connection Pooling, apabila terdapat satu permintaan dari bahagian hadapan aplikasi untuk membuat sambungan ke pangkalan data, satu sambungan akan dibuat dari pengumpulan. Selepas sesi atau transaksi tersebut selesai, sambungan itu dipulangkan semula ke pengumpulan.

Jadi bagaimanakah ini membantu meningkatkan prestasi?

Sekiranya terdapat beberapa permintaan untuk membuat beberapa sambungan ke pangkalan data yang sama dan butiran nama pengguna yang sama seperti sambungan terdahulu – pengumpul sambungan tidak akan membuat satu sambungan baru setiap kali ke pangkalan data, tetapi ia akan menggunakan semula sambungan terdahulu dari pengumpulan. Ini membantu dalam mencegah overhed dalam membuat satu sambungan baru ke pangkalan data setiap kali terdapat satu permintaan bagi satu sambungan pangkalan data dengan nama pengguna dan butiran pangkalan yang sama.  Pengumpulan sambungan membantu dalam persekitaran di mana terdapat jumlah sambungan serentak yang lebih tinggi ke pangkalan data.
Walaupun PostgreSQL tidak mempunyai pengumpul sambungan terbina, kebanyakan perisian pelanggan yang digunakan sebagai server aplikasi menyediakan pengumpulnya sendiri. PostgreSQL ada menyediakan dua alatan hebat untuk menyelesaikan masalah pembaziran sumber untuk setiap sambungan ke pangkalan data.

  • PGPOOL
  • PGBOUNCER

Kedua-dua alatan ini telah dibangunkan oleh komuniti yang menyedari akan senibina PostgreSQL dan direkabentuk khas untuk pangkalan data PostgreSQL. Sementara pgbouncer hanya menyediakan pengumpulan sambungan, pgpool menyediakan pengumpulan sambungan, keseimbangan muatan, ketersediaan tinggi dan replikasi.
Mana-mana satu daripada alatan ini boleh diguna berdasarkan pada jumlah trafik yang anda jangka dan keseluruhan senibina pangkalan data anda. Ayuh lihat bagaimana pgbouncer membantu dalam meningkatkan prestasi pangkalan data anda dengan meminimakan masa yang diperlukan untuk membuat sambungan ke pangkalan data.
Seperti yang telah dijelaskan tadi, Pgbouncer adalah pengumpul sambungan yang ringan bagi PostgreSQL, yang dengan ketara mengurangkan masa dan sumber pemprosesan untuk mengekalkan jumlah sambungan pelanggan ke satu atau lebih pangkalan data. Pgbouncer menyokong tiga jenis pengumpulan semasa putaran sambungan:

  • Pengumpulan Sesi: Satu sambungan pelayan diberikan kepada aplikasi pelanggan untuk sepanjang tempoh sambungan pelanggan. PgBouncer melepaskan semula sambungan pelayan balik ke pengumpulan sebaik sahaja aplikasi pelanggan melepaskan sambungan. Ini adalah kaedah lalai.
  • Pengumpulan Transaksi: Satu sambungan pelayan diberikan kepada aplikasi pelanggan untuk selama tempoh satu transaksi. Apabila PbBouncer mengesan transaksi telah selesai, ia melepaskan semula sambungan pelayan balik ke pengumpulan.
  • Pengumpulan Pernyataan: Satu sambungan pelayan diberikan kepada aplikasi pelanggan untuk setiap pernyataan. Apabila pernyataan lengkap, sambungan pelayan tersebut dikembalikan semula ke pengumpulan. Transaksi beberapa pernyataan serentak tidak dibenarkan bagi mod ini.

Bagaimana memasang dan menkonfigurasi Pgbouncer:

Untuk ini, saya akan menggunakan Pgbouncer versi 1.9 pada mesin CentOS 7.

Pemasangan

  • Muat turun fail pgbouncer-1.9.0.tar.gz pada mesin Linux anda untuk pemasangan. Anda boleh memuat turunnya dari Pgbouncer Download.
  • Untar fail tersebut, ini akan membuat satu folder bernama pgbouncer-1.9.0.
  • Sila pastikan bahawa pakej gcc, libevent-devel dan openssl-devel dipasang sebelum meneruskan konfigurasi. Pindahkannya ke dalam folder pgbouncer-1.9.0 dan jalankan:
    • ./configure –prefix=/opt/pgbouncer

-prefix akan membenarkan anda untuk mengkhususkan direktori bagi pemasangan. Secara lalai, ia akan dipasang dalam /usr/local

  • Selepas konfigurasi, jalankan arahan di bawah untuk memasang Pgbouncer
    • make
    • make install
  • Selepas pemasangan, fail konfigurasi anda dan fail untuk menjalankan Pgbouncer akan dipasang di dalam lokasi di bawah
  • /opt/pgbouncer/share/doc/pgbouncer
  • /opt/pgbouncer/bin
  • Untuk memulakan Pgbouncer dalam mod daemon, jalankan arahan di bawah:
    • pgbouncer -d /opt/pgbouncer/share/doc/pgbouncer/pgbouncer.ini

Konfigurasi

    • Terdapat dua fail konfigurasi yang penting untuk Pgbouncer iaitu pgbouncer.ini dan userlist.txt
      • pgbouncer.ini – Fail ini mengandungi semua parameter yang diperlukan untuk konfigurasi Pgbouncer anda
      • userlist.txt – Fail ini mengandungi nama pengguna dan kata laluan pangkalan data anda untuk pengesahan.
    • Saya telah konfigurasikan pgbouncer.ini dan userlist.txt seperti di bawah:
      • Pgbouncer.ini

      pool-img01

      • Benchmarkdb dan enterprise adalah nama lain untuk dua rentetan sambungan tersebut.  Sila beri perhatian, pool_size telah ditetapkan untuk tujuan ujian sahaja. Ianya bukanlah nilai yang disarankan.
    • Userlist.txt
      pool-img02
      Fail ini menerima input seperti “username””password”. Di mana kata laluan boleh jadi sama ada dalam format biasa atau format md5. Kami telah menggunakan kata laluan dalam format md5 untuk kedua-dua pengguna.
    • Kini hanya mulakan semula perkhidmatan pgbouncer seperti di bawah
      • pgbouncer -R -d /opt/pgbouncer/share/doc/pgbouncer/pgbouncer.ini
    • Anda boleh semak status pengumpulan dan pangkalan data dengan log masuk ke pangkalan data pgbouncer seperti yang ditunjukkan di bawah:

pool-img03
Kini, untuk menyemak dan mengesahkan kesan pada pengumpulan sambungan, kita akan menggunakan pgbench untuk menanda aras dan pgbouncer dalam mod sesi pengumpulan.

  • pgbench telah diasalkan dengan faktor skala 30. Pgbouncer mempunyai pool_size bernilai 100.
  • Kita akan menguji senario-senario dengan kenaikan sambungan serentak bermula daripada 300, 400 dan 460. Untuk setiap sambungan, pgbench akan menjalankan 20 transaksi yang mana masing-masing akan menghasilkan sejumlah 6000, 8000 dan 9200 transaksi.

Berikut ialah output dari analisis ujian tersebut

image-Conn
Analisis aktiviti am bagi sambungan

  • Sambungan Pgbouncer
  • pool-img04
  • Sambungan Terus
  • pool-img04

Ujian boleh dijalankan dengan tetapan berbeza untuk pool_size dan pool_mode untuk hasil yang lebih baik sejajar dengan keperluan aplikasi.
Selain daripada pool_size, pool_mode dan butiran sambungan, anda juga boleh menetapkan parameter lain dalam fail konfigurasi pgbouncer. Beberapa parameter lain yang berguna adalah seperti berikut: –

  • min_pool_size– Parameter ini menetapkan bilangan minima untuk sambungan pelayan dalam pengumpulan. Pada bila-bila masa, semasa menggunakan pgbouncer, anda akan dapat lihat sejumlah sambungan ini pada pelayan anda sama ada ianya melahu atau aktif.
  • reserve_pool_size– Sambungan tambahan untuk digunakan semasa terdapat isu.
  • server_idle_timeout (seconds) – Semua sambungan pelayan akan dilepaskan selepas melahu sebanyak tempoh saat ini.
  • idle_transaction_timeout (seconds) – Tutup sambungan yang berada dalam keadaan ‘idle in transaction’ selama tempoh saat ini.
  • max_client_conn – Jumlah bilangan pelanggan yang boleh membuat sambungan

Akhir sekali, untuk rumusan, seperti yang dilihat pada graf di atas, dengan kenaikan sambungan serentak, pgbouncer menaikkan daya pemprosesan keseluruhan. Nantikan artikel saya yang akan datang. Saya akan menjelaskan dengan lebih terperinci mengenai pgpool. Awasi ruang ini!


Go to Top