Jumlah koneksi yang dibuka ke DB terbatas, jadi jika query lambat menahan koneksi, request lainnya harus menunggu.
Mengapa Semua koneksi terpakai karena query lambat atau lonjakan request → Akibatnya Request baru menunggu sampai ada koneksi yang kosong → Di layar Loading tanpa henti saat login, penyimpanan tertunda, timeout
Tepat setelah login atau maintenance, Saat banyak pemain berkumpul
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur DB (Tim Infrastruktur)
Tugas Tim Pengembang Game
Hilangkan query lambat, sesuaikan ukuran pool dan timeout tunggu (jangan asal memperbesar pool), pisahkan pool per fitur.
Tugas Tim Infrastruktur
Periksa batas koneksi maksimum DB serta sisa kapasitas CPU dan IOPS, pastikan jumlah server × ukuran pool masih di bawah batas koneksi maksimum sebelum menambah server atau autoscaling, tambahkan metrik waktu tunggu koneksi dan waktu tunggu lock ke monitoring.
Kisaran angka
Jumlah koneksi yang dibutuhkan diperkirakan dengan “request per detik × waktu satu request menahan koneksi”. Dengan 2.000 request per detik dan 5 ms per request, rata-rata 10 koneksi selalu sibuk. Untuk mengantisipasi lonjakan, biasanya disiapkan dua hingga tiga kali lipatnya. Jika query melambat menjadi 150 ms, request yang sama membutuhkan 300 koneksi.
Di grafik
Mendatar di batas · Jumlah koneksi DB yang terpakai, waktu tunggu koneksi
Yang diperiksa
Hitung status koneksi per server game dari sisi DB. MySQL: periksa Host, Command (koneksi idle tampil sebagai Sleep), dan Time di SHOW PROCESSLIST, serta Threads_connected, Threads_running, dan jumlah koneksi yang ditolak Connection_errors_max_connections. PostgreSQL: kelompokkan pg_stat_activity per client_addr dan state lalu hitung. Jika library connection pool di server game mengekspor jumlah dan waktu tunggu, periksa juga
Cocok jika
Semua koneksi satu server game, sebanyak ukuran pool, sedang menjalankan query dan koneksi idle 0, dan selama itu login dan penyimpanan menunggu. Atau jumlah koneksi seluruh DB mencapai max_connections sehingga koneksi baru ditolak
Tidak cocok jika
Koneksi idle masih banyak tetapi tetap lambat: lebih mungkin latensi query itu sendiri (db-no-index, db-hot-row) atau resource DB jenuh
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Jika pool diperbesar tanpa perhitungan, yang bertambah hanya beban CPU DB dan perebutan lock, sehingga semuanya ikut melambat. Selain itu, jika jumlah server × ukuran pool melebihi batas koneksi maksimum DB, server yang baru ditambahkan atau baru dimulai ulang bahkan tidak bisa membuka koneksi. Ini sering terjadi saat autoscaling atau tepat setelah maintenance.
Sumber
Number Of Database ConnectionsPostgreSQL Setelah resource DB habis terpakai, menambah koneksi justru menurunkan throughput; menyesuaikan jumlah koneksi aktif dengan resource dan menaruh sisanya di antrean memberi latensi dan throughput yang lebih baik
Too many connectionsMySQL Jika max_connections sudah terpakai semua, koneksi baru ditolak dengan error Too many connections
SHOW PROCESSLIST StatementMySQL Host (alamat klien), Command (sesi idle tampil sebagai Sleep), Time, State
Server Status VariablesMySQL Threads_connected dan Threads_running, Connection_errors_max_connections (jumlah koneksi yang ditolak karena mencapai max_connections)