Khi DB khởi động lại, cache trong bộ nhớ trống trơn, nên một thời gian mọi truy vấn đều phải đọc từ ổ đĩa.
Vì sao DB khởi động lại trong đợt bảo trì → Dẫn đến Dữ liệu hay dùng không có trong bộ nhớ nên phải đọc từ ổ đĩa → Trên màn hình Ngay sau bảo trì, đăng nhập và loading chậm một thời gian
Phụ trách chính Hạ tầng DB (Đội hạ tầng) · Phối hợp Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Mở cửa từ từ (dùng hàng chờ đăng nhập để tăng dần số người vào game).
Việc cần làm (Đội hạ tầng)
Làm nóng cache sau khi khởi động lại (warm-up, kiểm tra cấu hình lưu và khôi phục buffer pool), với DB khôi phục từ snapshot thì đọc trước cả ổ đĩa.
Trên đồ thị
Tăng vọt ngay sau đăng nhập hoặc bảo trì · Lượng đọc ổ đĩa, tỷ lệ hit của buffer cache
Chỗ cần xem
MySQL: xem tỷ lệ giữa Innodb_buffer_pool_reads (số lần phải đọc từ ổ đĩa vì không có trong buffer pool) và Innodb_buffer_pool_read_requests, tiến độ làm nóng Innodb_buffer_pool_load_status. PostgreSQL: xem blks_read, blks_hit trong pg_stat_database. Xem cả số lần đọc ổ đĩa của server DB
Đúng nếu
ngay sau khi khởi động lại, lượng đọc ổ đĩa vọt lên và tỷ lệ hit thấp rồi dần hồi phục, và trong khoảng đó đăng nhập, loading chậm
Loại trừ nếu
tỷ lệ hit như bình thường mà ngay sau bảo trì vẫn chậm → đăng nhập ồ ạt, N+1 (db-login-storm) hoặc connection pool (db-pool)
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Tìm hiểu thêm
MySQL lưu danh sách page trong buffer pool khi tắt, rồi đọc lại ở chế độ chạy nền khi bật, nhưng phải mất thời gian mới nạp đầy. Nếu DB trên cloud được khôi phục từ snapshot (bản sao ổ đĩa), bản thân ổ đĩa cũng chậm ở mỗi block đọc lần đầu nên tình trạng kéo dài hơn.
Saving and Restoring the Buffer Pool StateMySQL Để rút ngắn thời gian làm nóng sau khi khởi động lại, khi tắt thì lưu danh sách các page dùng gần đây (mặc định 25%), khi bật thì đọc lại; cả hai đều bật mặc định
Initialize Amazon EBS volumesAWS Volume tạo từ snapshot có độ trễ tăng và hiệu năng giảm cho đến khi tải về hết mọi block
Server Status VariablesMySQL Innodb_buffer_pool_reads (số lần đọc logic không có trong buffer pool nên phải đọc thẳng từ ổ đĩa), Innodb_buffer_pool_read_requests, Innodb_buffer_pool_load_status (tiến độ làm nóng)