Jika memuat satu karakter butuh puluhan query terpisah, login bersamaan puluhan ribu pemain berubah menjadi jutaan query.
Mengapa Saat memuat karakter, item, skill, dan quest diambil dengan query terpisah satu per satu → Akibatnya Tepat setelah maintenance, login bersamaan membuat jumlah query melonjak → Di layar Loading tanpa henti saat login, penyimpanan pemain yang sedang bermain pun ikut tertunda
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur DB (Tim Infrastruktur)
Tugas Tim Pengembang Game
Gabungkan query agar data diambil sekaligus, gunakan antrean login dan cache, periksa jumlah query yang dihasilkan lazy loading ORM.
Tugas Tim Infrastruktur
Buat peringkat query dengan jumlah pemanggilan terbanyak lalu bagikan, pantau jumlah query dan koneksi pada jam login tepat setelah maintenance.
Di grafik
Melonjak tepat setelah server dibuka · Jumlah query DB per detik, jumlah login
Yang diperiksa
Tumpangkan jumlah login tepat setelah maintenance dengan jumlah query DB per detik (MySQL: kenaikan Questions), lalu hitung jumlah query per satu login. Ambil query dengan jumlah pemanggilan teratas dari COUNT_STAR di events_statements_summary_by_digest (MySQL) atau calls di pg_stat_statements (PostgreSQL)
Cocok jika
Satu login menghasilkan puluhan query, dan query teratas adalah query pendek berpola sama yang mencari berdasarkan satu ID karakter. Jika jumlah query per login naik setelah patch, patch itulah titik awalnya
Tidak cocok jika
Jumlah query per login sedikit tetapi setiap query lambat: lebih mungkin cold cache (db-cold-cache) atau indeks (db-no-index)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Lazy loading pada ORM (library yang membuatkan query DB secara otomatis) menghasilkan query seperti ini tanpa disadari pengembang. Di server development hanya ada beberapa karakter sehingga tidak terasa, dan masalahnya baru muncul saat login bersamaan di server live.
Sumber
Efficient Querying.NET Lazy loading pada ORM menimbulkan masalah N+1, yaitu satu query tambahan untuk setiap item, sehingga performa turun drastis; dianjurkan memuat data sekaligus (eager loading)