Если посреди тика ждать ответа БД или записи в файл, на это время останавливается вся игра на сервере.
Почему Внутри тика поток ждёт запросов и сохранений в БД, записи логов, вызовов внешних API → Следствие Если БД отвечает 100 ms, тик тоже стоит 100 ms → На экране Каждый раз, когда тормозит БД или диск, вся открытая локация на миг замирает
Основной ответственный Команда разработки · Разработка сервера
Команда разработки: задачи
Всю медленную работу (запросы и сохранения в БД, запись логов, вызовы внешних API) выполнять асинхронно, а результат применять в следующем тике (если только поставить таймаут, на время ожидания игра всё равно встанет).
Цифры для ориентира
Даже RTT до БД в том же ЦОД 0,5 ms при 100 вызовах за тик даёт 50 ms. Это весь бюджет 20-тикового сервера.
На графике
Случайные всплески · время тика сервера, задержка запросов к БД
Где смотреть
Наложить на одну временную ось график времени тика, задержку запросов к БД (slow query log и т. п.) и задержку диска. Если метрик тика нет, смотреть через bcc offcputime -p, где ждёт игровой поток
Подтверждает
Всплески времени тика совпадают со всплесками задержки БД или файлов, а ожидание игрового потока приходится на стеки вызовов приёма ответа БД и записи в файл
Опровергает
Если задержки БД и диска ровные, а время тика скачет, дело в паузах GC или конкуренции за блокировки
ASP.NET Core Best PracticesMicrosoft Доступ к данным, ввод-вывод и долгие операции вызывать асинхронно. Синхронные блокирующие вызовы ведут к исчерпанию пула потоков и задержкам ответа