한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Buku Putih Lag Game › L12 Database

Connection pool habis Connection pool exhaustion

ID penyebab db-pool · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur DB (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

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

Gejala
Tidak bisa masuk / loading tanpa henti, Input lag
Faktor
Stall, Latensi
Siapa yang mengalami
Seluruh server, Fitur tertentu saja
Kapan
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

  1. Number Of Database Connections PostgreSQL
    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
  2. Too many connections MySQL
    Jika max_connections sudah terpakai semua, koneksi baru ditolak dengan error Too many connections
  3. Connections and Authentication (PostgreSQL Documentation) PostgreSQL
    max_connections: batas atas jumlah koneksi bersamaan, dengan nilai default biasanya 100
  4. SHOW PROCESSLIST Statement MySQL
    Host (alamat klien), Command (sesi idle tampil sebagai Sleep), Time, State
  5. Server Status Variables MySQL
    Threads_connected dan Threads_running, Connection_errors_max_connections (jumlah koneksi yang ditolak karena mencapai max_connections)
  6. The Cumulative Statistics System (PostgreSQL Documentation) PostgreSQL
    pg_stat_activity: client_addr dan state (active, idle, idle in transaction, dan lainnya) untuk setiap koneksi

Lihat juga

Lapisan yang sama: L12 Database

Penyebab di lapisan lain dengan gejala yang sama (Tidak bisa masuk / loading tanpa henti)

Lihat kartu interaktif dengan gambar dan simulasi