У персонажа, у которого накопились тысячи предметов и писем или необычно много друзей, записей в чёрном списке и баффов, данных для загрузки при входе, сохранения и рассылки окружающим в разы больше, чем у других. Тормозит только этот персонаж, независимо от подключения.
Почему У давно прокачиваемого персонажа в инвентаре и почте скопились тысячи предметов или наград за события → Следствие При каждом входе, переходе между локациями и сохранении приходится читать и писать в БД соответствующий объём, и данные о снаряжении и баффах для рассылки окружающим тоже большие → На экране Только у этого персонажа долгая загрузка при входе и замирания при открытии инвентаря или почты. Если сервер ждёт сохранения в игровом потоке, на мгновение замирают и окружающие
Сразу после входа или техработ, При определённом действии, В движении и при смене локации
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Инфраструктура БД
Команда разработки: задачи
Ввести лимиты на хранение в инвентаре и почте и автоочистку старых писем, загружать данные частями по мере надобности, сохранять только изменения и вне игрового потока.
Команда инфраструктуры: задачи
Найти в логе медленных запросов повторяющиеся медленные чтения по одному и тому же персонажу и передать команде разработки, предоставить топ персонажей по числу строк предметов и писем.
Цифры для ориентира
Если один предмет занимает одну строку в БД, персонаж с 5 000 предметов при каждом входе читает 5 000 строк. Это в десятки раз больше, чем у обычного персонажа.
На графике
Высоко только у некоторых · время входа и сохранения по персонажам, число строк, читаемых из БД, по персонажам
Где смотреть
Найти в логе медленных запросов БД (MySQL slow query log, PostgreSQL log_min_duration_statement) медленные чтения и сохранения, повторяющиеся с одним и тем же ID персонажа, и выгрузить топ персонажей по числу строк в таблицах предметов и писем
Подтверждает
Медленные запросы сосредоточены на нескольких ID персонажей, у этих персонажей строк предметов и писем в десятки раз больше среднего, и при входе с другого ПК и подключения они тормозят так же
Опровергает
Если вместе тормозят и другие персонажи того же аккаунта или другие игроки, причина в серверах БД или блокировках. Если на другом ПК с этим персонажем всё нормально, причина в окружении игрока
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
Если тот же персонаж тормозит так же при входе с другого ПК и подключения, а другие персонажи того же аккаунта в порядке, подозревают данные персонажа. Поэтому в жалобе обязательно нужно имя персонажа.
Источники
Extraneous Fetching antipatternMicrosoft Azure Если извлекать больше данных, чем нужно, растёт нагрузка на ввод-вывод и замедляются ответы