Что такое "дедлоки" с которыми борется АД-ия? Небольшой урок по БД.
Это состояние, когда два процесса начинают блокировать таблицы в разных порядках и в один момент Процессу 1 нужна заблокированная запись из Таблицы 2, которую уже заблокировал Процесс 2, а Процессу 2 тем временем нужна запись из Таблицы 1, которую до этого заблокировал процесс 1.
Эта ситуация принципиально не решается и возникает состояние "дедлока" - "смертельная блокировка", если по простому. Выход - откатить одну из транзакций.
При этом игроки видят сообщение, что "Произошла ошибка номер такой-то".
Решается эта проблема очень тяжело - потому что у MariaDB не очень хорошие инструменты диагностики. Да и скажем прямо - за годы развития проекта код очень сильно запутался. Это тоже не помогает.
А самое "интересное", что со времен MySQL 5.5, на который писался движок и на котором он долгое время работал стратегии работы с транзакциями поменялись слегка. Не помогает и то, что текущий сервер - это совсем не MySQL и уж точно не 5.5.
Дополнительно, как писалось раньше, более быстрая реакция сервера на запросы - и, соответственно, большее количество ситуаций, когда могут возникнуть дедлоки - тоже не помогает.
И вишенка на торте - пока ты не понимаешь, почему возникает дедлок - ты не можешь его промоделировать. А дедлоки возникают только на нагруженном сервере - у меня в локальной копии всё работает отлично, даже если я пытаюсь сделать нагрузочные тесты.
В общем - мы работаем над этим... Прогресс есть - от части дедлоков удалось избавиться (судя по логам). |