После перезапуска БД кэш в памяти пуст, и какое-то время все запросы читают данные с диска.
Почему БД перезапускается на техработах → Следствие Часто используемых данных нет в памяти, они читаются с диска → На экране Сразу после техработ какое-то время медленно проходят вход и загрузка
Основной ответственный Команда инфраструктуры · Инфраструктура БД · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Открывать сервер постепенно (через очередь на вход поэтапно увеличивать число входящих игроков).
Команда инфраструктуры: задачи
Прогревать кэш после перезапуска (проверить настройки сохранения и восстановления буферного пула), у БД, восстановленной из снапшота, заранее прочитать и диск.
На графике
Всплеск сразу после входа или техработ · чтение с диска, доля попаданий в буферный кэш
Где смотреть
В MySQL смотреть отношение Innodb_buffer_pool_reads (сколько раз данных не было в буферном пуле и пришлось читать с диска) к Innodb_buffer_pool_read_requests и ход прогрева в Innodb_buffer_pool_load_status. В PostgreSQL смотреть blks_read и blks_hit в pg_stat_database. Смотреть и число чтений с диска на сервере БД
Подтверждает
Сразу после перезапуска чтение с диска подскакивает, доля попаданий низкая и со временем восстанавливается, и на этом отрезке медленно проходят вход и загрузка
Опровергает
Если доля попаданий обычная, а после техработ всё медленно, это наплыв входов и N+1 (db-login-storm) или пул соединений (db-pool)
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
MySQL при выключении сохраняет список страниц буферного пула, а при запуске в фоне читает их заново, но на полное заполнение нужно время. Если в облаке БД восстановлена из снапшота (копии диска), то и сам диск медленно отдаёт каждый блок при первом чтении, и прогрев затягивается ещё сильнее.
Saving and Restoring the Buffer Pool StateMySQL Чтобы сократить прогрев после перезапуска, при выключении сохраняется список недавно использованных страниц (по умолчанию 25%), а при запуске они читаются заново. Обе функции включены по умолчанию
Initialize Amazon EBS volumesAWS Том, созданный из снапшота, пока не подтянет все блоки, работает с повышенной задержкой и пониженной производительностью
Server Status VariablesMySQL Innodb_buffer_pool_reads (число логических чтений, которые не нашли данных в буферном пуле и читали напрямую с диска), Innodb_buffer_pool_read_requests, Innodb_buffer_pool_load_status (ход прогрева)