Connection pooling: kenapa aplikasi butuh pool koneksi database
Ketahui alasan koneksi database sebaiknya dipakai ulang, bukan dibuka dan ditutup setiap permintaan.
Biaya membuka koneksi
Membuka koneksi baru ke database melibatkan proses jabat tangan jaringan, otentikasi, dan alokasi sumber daya di sisi server. Jika setiap permintaan aplikasi membuka koneksi baru, biaya ini akan berulang terus-menerus.
Apa itu connection pool
Connection pool adalah kumpulan koneksi yang sudah dibuka sebelumnya dan dipakai bergantian oleh permintaan yang datang. Setelah selesai dipakai, koneksi dikembalikan ke pool, bukan ditutup.
// Contoh konfigurasi pool sederhana pada driver PDO (php-pgsql, php-mysql, dll.)
// umumnya diatur lewat konfigurasi koneksi persisten
$pdo = new PDO($dsn, $user, $password, [
PDO::ATTR_PERSISTENT => true,
]);
Ukuran pool yang wajar
Pool yang terlalu kecil membuat permintaan menunggu koneksi tersedia. Pool yang terlalu besar bisa membebani database karena setiap koneksi memakai memori di sisi server. Ukuran ideal biasanya disesuaikan dengan jumlah proses worker aplikasi dan batas koneksi maksimum database.
Koneksi yang macet
Koneksi yang tidak dikembalikan ke pool, misalnya karena exception yang tidak tertangani, bisa membuat pool kehabisan slot. Pastikan kode selalu mengembalikan atau menutup koneksi lewat blok yang dijamin selalu berjalan.
Pool di level aplikasi vs level infrastruktur
Selain pool bawaan driver, ada juga proxy khusus seperti PgBouncer untuk PostgreSQL yang mengelola pool di luar proses aplikasi. Pendekatan ini berguna ketika banyak instance aplikasi berbagi satu batas koneksi database.
Latihan
Periksa konfigurasi koneksi database pada aplikasi Anda saat ini, lalu cari tahu berapa jumlah koneksi maksimum yang diizinkan database dan bandingkan dengan jumlah proses worker aplikasi.
