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

Buku Putih Lag Game › L12 Database

Deadlock DB Database deadlock

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

Buka kartu interaktif dengan gambar dan simulasi →

Jika dua transaksi (sekumpulan operasi DB yang diproses sebagai satu kesatuan) saling menunggu baris yang dikunci pihak lain, DB membatalkan salah satunya secara paksa.

Mengapa Trade A mengunci dengan urutan item→mata uang game, trade B dengan urutan mata uang game→item → Akibatnya DB mendeteksi deadlock dan melakukan rollback pada salah satunya → Di layar Trade dan crafting sesekali gagal, item kembali seperti semula

Gejala
Aksi hilang / rollback, Input lag
Faktor
Packet loss, Stall
Siapa yang mengalami
Fitur tertentu saja
Kapan
Saat banyak pemain berkumpul, Saat melakukan aksi tertentu
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur DB (Tim Infrastruktur)
Tugas Tim Pengembang Game
Samakan urutan penguncian, persingkat transaksi, coba ulang otomatis saat gagal.
Tugas Tim Infrastruktur
Biarkan deteksi deadlock aktif, kumpulkan catatan deadlock lalu bagikan, perpendek batas waktu tunggu lock (default 50 detik) di server MySQL yang deteksinya dimatikan.
Kisaran angka
Waktu sampai terdeteksi: MySQL (InnoDB) hampir seketika, PostgreSQL default 1 detik, SQL Server hingga sekitar 5 detik. Selama itu kedua request tertahan. Pada server MySQL yang deteksinya dimatikan karena request bersamaan sangat banyak, request menunggu sampai batas waktu tunggu lock (default 50 detik).
Di grafik
Melonjak acak sesekali · Jumlah deadlock, jumlah trade gagal
Yang diperiksa
MySQL: periksa LATEST DETECTED DEADLOCK di SHOW ENGINE INNODB STATUS (hanya 1 yang terbaru), semua deadlock yang tercatat di error log jika innodb_print_all_deadlocks diaktifkan, dan lock_deadlocks di INFORMATION_SCHEMA.INNODB_METRICS. PostgreSQL: deadlocks di pg_stat_database. SQL Server: xml_deadlock_report di sesi system_health yang aktif secara default. Kode error di sisi server game: MySQL 1213, PostgreSQL 40P01, SQL Server 1205
Cocok jika
Saat trade dan crafting gagal, jumlah deadlock naik, dan dua transaksi yang tercatat mengunci tabel yang sama dengan urutan saling berlawanan
Tidak cocok jika
Jumlah deadlock tidak berubah tetapi tetap gagal: lebih mungkin batas waktu tunggu lock terlampaui (error MySQL 1205) atau hot row (db-hot-row)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)

Sumber

  1. InnoDB Startup Options and System Variables MySQL
    Jika deteksi aktif (default), InnoDB langsung mendeteksi deadlock dan melakukan rollback; innodb_lock_wait_timeout default 50 detik
  2. Deadlock Detection MySQL
    Pada konkurensi sangat tinggi, deteksi itu sendiri bisa menjadi lambat, sehingga kadang dimatikan dan diserahkan ke batas waktu tunggu lock
  3. Lock Management (PostgreSQL Documentation) PostgreSQL
    deadlock_timeout default 1 detik: pemeriksaan deadlock baru dilakukan setelah menunggu lock selama itu
  4. Deadlocks guide Microsoft SQL Server
    Interval default pemeriksaan deadlock 5 detik, dipersingkat hingga 100 ms jika deadlock sering terjadi; sesi system_health yang aktif secara default mengumpulkan xml_deadlock_report; pihak yang dikorbankan menerima error 1205
  5. How to Minimize and Handle Deadlocks MySQL
    Selalu ubah banyak baris dan tabel dengan urutan yang sama, coba lagi jika gagal, catat semua deadlock dengan innodb_print_all_deadlocks
  6. InnoDB Standard Monitor and Lock Monitor Output MySQL
    LATEST DETECTED DEADLOCK: dua transaksi pada deadlock terbaru, lock yang dipegang dan ditunggu, serta transaksi yang dibatalkan (rollback)
  7. InnoDB INFORMATION_SCHEMA Metrics Table MySQL
    Counter lock_deadlocks di INNODB_METRICS (aktif secara default)
  8. Server Error Message Reference MySQL
    1213 ER_LOCK_DEADLOCK (deadlock), 1205 ER_LOCK_WAIT_TIMEOUT (batas waktu tunggu lock terlampaui)
  9. The Cumulative Statistics System (PostgreSQL Documentation) PostgreSQL
    deadlocks di pg_stat_database: jumlah deadlock yang terdeteksi di DB ini
  10. PostgreSQL Error Codes (PostgreSQL Documentation) PostgreSQL
    40P01 deadlock_detected

Lihat juga

Lapisan yang sama: L12 Database

Penyebab di lapisan lain dengan gejala yang sama (Aksi hilang / rollback)

Lihat kartu interaktif dengan gambar dan simulasi