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

Buku Putih Lag Game › L12 Database

Cold cache (tepat setelah restart) Cold buffer pool after restart

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

Buka kartu interaktif dengan gambar dan simulasi →

Setelah DB dimulai ulang, cache di memori kosong, sehingga untuk sementara semua pembacaan data diambil dari disk.

Mengapa DB dimulai ulang karena maintenance → Akibatnya Data yang sering dipakai tidak ada di memori sehingga dibaca dari disk → Di layar Login dan loading lambat untuk sementara tepat setelah maintenance

Gejala
Tidak bisa masuk / loading tanpa henti, Input lag
Faktor
Latensi
Siapa yang mengalami
Seluruh server
Kapan
Tepat setelah login atau maintenance
Penanggung jawab
Penanggung jawab utama Infrastruktur DB (Tim Infrastruktur) · Turut terlibat Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Buka server secara bertahap (gunakan antrean login untuk menambah jumlah pemain yang login sedikit demi sedikit).
Tugas Tim Infrastruktur
Lakukan warm-up cache setelah restart (periksa pengaturan simpan dan pulihkan buffer pool), untuk DB yang dipulihkan dari snapshot baca juga disknya lebih dulu.
Di grafik
Melonjak tepat setelah server dibuka · Pembacaan disk, hit rate buffer cache
Yang diperiksa
MySQL: periksa rasio Innodb_buffer_pool_reads (jumlah pembacaan dari disk karena data tidak ada di buffer pool) terhadap Innodb_buffer_pool_read_requests, serta progres warm-up di Innodb_buffer_pool_load_status. PostgreSQL: periksa blks_read dan blks_hit di pg_stat_database. Periksa juga jumlah pembacaan disk di server DB
Cocok jika
Tepat setelah restart, pembacaan disk melonjak dan hit rate rendah, lalu pulih seiring waktu, dan selama rentang itu login dan loading lambat
Tidak cocok jika
Hit rate sama seperti biasa tetapi lambat tepat setelah maintenance: lebih mungkin lonjakan login dan N+1 (db-login-storm) atau connection pool (db-pool)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
MySQL menyimpan daftar page di buffer pool saat dimatikan, lalu membacanya kembali di latar belakang saat dinyalakan, tetapi butuh waktu sampai buffer pool terisi penuh. Jika DB di cloud dipulihkan dari snapshot (salinan disk), disk itu sendiri juga lambat pada setiap blok yang pertama kali dibaca, sehingga masa lambat ini berlangsung lebih lama.
Kasus nyata
Roblox 2021: Gangguan 73 jam di Roblox: perebutan sumber daya di cluster service discovery (Consul)

Sumber

  1. Saving and Restoring the Buffer Pool State MySQL
    Untuk mempersingkat waktu warm-up setelah restart, daftar page yang baru dipakai (default 25%) disimpan saat dimatikan dan dibaca kembali saat dinyalakan; keduanya aktif secara default
  2. pg_prewarm — preload relation data into buffer caches PostgreSQL
    Isi shared buffer dicatat secara berkala lalu dimuat kembali setelah restart (autoprewarm)
  3. Initialize Amazon EBS volumes AWS
    Volume yang dibuat dari snapshot mengalami latensi lebih tinggi dan performa lebih rendah sampai semua bloknya selesai diambil
  4. Server Status Variables MySQL
    Innodb_buffer_pool_reads (jumlah logical read yang harus dibaca langsung dari disk karena tidak ada di buffer pool), Innodb_buffer_pool_read_requests, Innodb_buffer_pool_load_status (progres warm-up)
  5. The Cumulative Statistics System (PostgreSQL Documentation) PostgreSQL
    blks_read (jumlah blok yang dibaca dari disk) dan blks_hit (jumlah blok yang ditemukan di buffer cache) di pg_stat_database

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