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

Sách trắng lag game › Sự cố chỉ một số người gặp

Dữ liệu của một nhân vật quá lớn One character with oversized data (inventory, mail, buffs)

ID nguyên nhân pt-heavy-char · Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Hạ tầng DB (Đội hạ tầng)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Nhân vật tích hàng nghìn vật phẩm, thư, hoặc có danh sách bạn bè, danh sách chặn, buff nhiều bất thường thì lượng dữ liệu phải xử lý khi vào game, khi lưu và khi thông báo cho xung quanh lớn gấp nhiều lần người khác. Chỉ nhân vật đó chậm, bất kể đường truyền.

Vì sao Nhân vật chơi lâu năm hoặc nhận nhiều phần thưởng sự kiện có tới hàng nghìn món trong túi đồ, hộp thư → Dẫn đến Mỗi lần vào game, chuyển bản đồ, lưu đều phải đọc và ghi DB tương ứng, thông tin trang bị và buff gửi cho xung quanh cũng lớn → Trên màn hình Chỉ nhân vật đó loading vào game lâu, khựng khi mở túi đồ hoặc hộp thư. Nếu server chờ lưu trên thread game thì cả những người xung quanh cũng bị đứng hình chốc lát

Triệu chứng
Không vào được·kẹt loading, Trễ thao tác, Đứng hình
Yếu tố
Ngưng trệ
Ai gặp phải
Chỉ mình tôi, Chỉ một tính năng
Khi nào
Ngay sau đăng nhập hoặc bảo trì, Khi làm một thao tác nhất định, Khi di chuyển hoặc chuyển bản đồ
Phụ trách
Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Hạ tầng DB (Đội hạ tầng)
Việc cần làm (Đội phát triển game)
Giới hạn sức chứa túi đồ và hộp thư, tự động dọn thư cũ, chia nhỏ để chỉ tải phần cần thiết, chỉ lưu phần thay đổi và lưu ngoài thread game.
Việc cần làm (Đội hạ tầng)
Tìm trong slow query log các truy vấn chậm lặp lại với cùng một nhân vật rồi chuyển cho đội phát triển game, cung cấp danh sách top nhân vật có nhiều dòng vật phẩm, thư.
Con số tham khảo
Nếu mỗi vật phẩm là một dòng trong DB, nhân vật có 5.000 vật phẩm sẽ đọc 5.000 dòng mỗi lần vào game, gấp vài chục lần một nhân vật bình thường.
Trên đồ thị
Chỉ một phần cao · Thời gian vào game và lưu theo nhân vật, số dòng DB truy vấn theo nhân vật
Chỗ cần xem
Trong log truy vấn chậm của DB (MySQL slow query log, PostgreSQL log_min_duration_statement), tìm các truy vấn đọc, lưu chậm lặp lại với cùng một ID nhân vật, và lấy danh sách top số dòng theo nhân vật trong bảng vật phẩm, thư
Đúng nếu
truy vấn chậm dồn vào vài ID nhân vật, số dòng vật phẩm, thư của các nhân vật đó gấp vài chục lần trung bình, và vào từ PC hoặc đường truyền khác vẫn chậm như vậy
Loại trừ nếu
nhân vật khác cùng tài khoản hoặc người chơi khác cũng cùng chậm → xem thiết bị DB hoặc khóa. Nhân vật đó bình thường trên PC khác → môi trường của người chơi
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
Nếu vào bằng cùng một nhân vật từ PC hoặc đường truyền khác vẫn chậm y như vậy, còn nhân vật khác cùng tài khoản thì bình thường, hãy nghi ngờ dữ liệu nhân vật. Đó là lý do báo cáo lag nhất định phải có tên nhân vật.

Nguồn

  1. Extraneous Fetching antipattern Microsoft Azure
    Lấy nhiều dữ liệu hơn mức cần thiết thì tải I/O tăng và phản hồi chậm đi
  2. PostgreSQL Documentation: Error Reporting and Logging PostgreSQL
    log_min_duration_statement: ghi lại các câu SQL mất từ một khoảng thời gian nhất định trở lên để theo dõi truy vấn chậm
  3. The Slow Query Log MySQL
    Slow query log ghi lại các truy vấn vượt quá long_query_time

Nguyên nhân nên xem cùng

Cùng tầng: Sự cố chỉ một số người gặp

Nguyên nhân ở tầng khác gây cùng triệu chứng (Không vào được·kẹt loading)

Xem thẻ gốc có hình minh họa và thí nghiệm