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

Buku Putih Lag Game › L12 Database

Batch job berskala besar Batch jobs during service

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

Buka kartu interaktif dengan gambar dan simulasi →

Agregasi ranking, pengiriman mail massal, dan pembersihan data lama yang dijalankan saat layanan berjalan menahan lock dan menyita kapasitas disk.

Mengapa Pekerjaan berskala besar dijalankan pada jam layanan → Akibatnya Lock dengan cakupan luas, disk dan CPU tersita → Di layar Trade dan penyimpanan gagal pada jam tertentu, loading tertunda

Gejala
Input lag, Aksi hilang / rollback
Faktor
Latensi, Stall
Siapa yang mengalami
Fitur tertentu saja, Seluruh server
Kapan
Secara berkala
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur DB (Tim Infrastruktur)
Tugas Tim Pengembang Game
Pecah pekerjaan menjadi potongan kecil dan jalankan sedikit demi sedikit, jalankan agregasi di replika.
Tugas Tim Infrastruktur
Sediakan replika khusus agregasi, jadwalkan batch job di jam sepi, pantau lock escalation dan waktu tunggu gap lock.
Di grafik
Melonjak secara berkala · Latensi query DB, waktu tunggu lock
Yang diperiksa
Cari query panjang yang berjalan pada waktu lag. Periksa slow query log (MySQL) atau query_start dan query di pg_stat_activity (PostgreSQL), lalu cocokkan dengan metrik waktu tunggu lock pada waktu yang sama dan jadwal batch (cron, event scheduler DB). Di SQL Server, catat lock escalation dengan extended event lock_escalation
Cocok jika
UPDATE, DELETE, atau query agregasi berskala besar berjalan pada jam yang sama setiap kali, dan selama itu waktu tunggu lock serta utilisasi disk naik bersamaan
Tidak cocok jika
Tidak ada query panjang pada waktu itu: lebih mungkin checkpoint (db-checkpoint) atau backup server (dk-backup)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Jika satu statement memegang lebih dari sekitar 5.000 row lock, SQL Server mengubahnya menjadi table lock (lock escalation). Saat itu semua request yang memakai tabel yang sama tertahan. Dengan pengaturan default, MySQL juga mengunci celah di antara baris (gap lock) saat data diubah dengan kondisi rentang, sehingga baris baru tidak bisa ditambahkan.

Sumber

  1. Transaction Locking and Row Versioning Guide Microsoft SQL Server
    Jika satu statement memegang 5.000 lock atau lebih pada satu tabel (atau indeks), terjadi lock escalation; dicatat dengan extended event lock_escalation
  2. InnoDB Locking MySQL
    Pada isolation level default InnoDB, yaitu REPEATABLE READ, pencarian dan scan memakai next-key lock, sehingga gap lock mencegah penambahan baris baru di celah tersebut
  3. The Slow Query Log MySQL
    Mencatat query yang melebihi long_query_time beserta waktu eksekusi (Query_time), waktu lock (Lock_time), dan jumlah baris yang dibaca
  4. The Cumulative Statistics System (PostgreSQL Documentation) PostgreSQL
    pg_stat_activity: query yang sedang berjalan (query) dan waktu mulainya (query_start) untuk setiap sesi

Lihat juga

Lapisan yang sama: L12 Database

Penyebab di lapisan lain dengan gejala yang sama (Input lag)

Lihat kartu interaktif dengan gambar dan simulasi