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

Guia do Lag em Jogos › Problemas que só afetam alguns

Personagem com dados grandes demais One character with oversized data (inventory, mail, buffs)

ID da causa pt-heavy-char · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Infraestrutura de banco de dados (Equipe de infraestrutura)

Abrir o card interativo, com figuras e simulações →

Um personagem com milhares de itens ou mensagens no correio acumulados, ou com listas de amigos e bloqueados ou buffs fora do comum, tem várias vezes mais dados para carregar no login, salvar e enviar aos jogadores próximos. Fica lento só com esse personagem, seja qual for a conexão.

Por quê Personagens antigos ou recompensas de evento acumulam milhares de entradas no inventário e no correio → Efeito Em cada login, troca de mapa e salvamento, o BD lê e grava tudo isso, e as informações de equipamento e buffs enviadas aos jogadores próximos também são grandes → Na tela Só esse personagem tem carregamento longo ao entrar e engasga ao abrir inventário ou correio. Em servidores que esperam o salvamento na thread do jogo, até quem está perto tem uma pausa curta

Sintomas
Não conecta / loading infinito, Input lag, Travamento
Fatores
Paralisação
Quem é afetado
Só eu, Só um recurso específico
Quando
Logo após login ou manutenção, Ao fazer ações específicas, Em movimento ou ao trocar de mapa
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Infraestrutura de banco de dados (Equipe de infraestrutura)
O que fazer (Equipe de desenvolvimento)
Limite de armazenamento de inventário e correio e limpeza automática de mensagens antigas, carregar em partes só o necessário, salvar só o que mudou, fora da thread do jogo.
O que fazer (Equipe de infraestrutura)
Procurar no log de queries lentas consultas lentas repetidas com o mesmo personagem e passar para a equipe de desenvolvimento, fornecer o ranking de personagens com mais linhas de itens e correio.
Números de referência
Se cada item é uma linha no BD, um personagem com 5.000 itens lê 5.000 linhas a cada login. São dezenas de vezes mais que um personagem comum.
No gráfico
Alto só em alguns · Tempo de login e salvamento por personagem, linhas lidas no BD por personagem
Onde olhar
Procurar no log de queries lentas do BD (MySQL slow query log, PostgreSQL log_min_duration_statement) leituras e gravações lentas repetidas com o mesmo ID de personagem e tirar o ranking de linhas por personagem nas tabelas de itens e correio
Confirma se
As queries lentas se concentram em alguns IDs de personagem, esses personagens têm dezenas de vezes mais linhas de itens e correio que a média e ficam igualmente lentos em outro PC ou conexão
Descarta se
Outros personagens da mesma conta ou outros jogadores também lentos: aponta para hardware ou locks do BD. Personagem normal em outro PC: ambiente do jogador
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Saiba mais
Se o mesmo personagem fica igualmente lento conectando de outro PC ou conexão, e os outros personagens da mesma conta estão normais, suspeite dos dados do personagem. É por isso que o nome do personagem é indispensável no report.

Fontes

  1. Extraneous Fetching antipattern Microsoft Azure
    Buscar mais dados do que o necessário aumenta a carga de I/O e deixa as respostas lentas
  2. PostgreSQL Documentation: Error Reporting and Logging PostgreSQL
    log_min_duration_statement: registra o SQL que passa de um certo tempo, para rastrear queries lentas
  3. The Slow Query Log MySQL
    Log de queries lentas que registra as queries acima de long_query_time

Veja também

Mesma camada: Problemas que só afetam alguns

Mesmo sintoma (Não conecta / loading infinito) em outras camadas

Ver o card interativo, com figuras e simulações