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)
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
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
Extraneous Fetching antipatternMicrosoft Azure Buscar mais dados do que o necessário aumenta a carga de I/O e deixa as respostas lentas