MySQL "заблокировал" процессы при копировании таблицы tmp
У меня есть запрос, который занимает очень много времени, но в итоге создает новую таблицу. Реальные объединения не все такие медленные, но они тратят почти все свое время на "копирование в таблицу tmp", и в течение этого времени состояние всех других запросов (которые должны поступать в несвязанные таблицы) "заблокировано". Я нахожусь в процессе оптимизации длинного запроса, но это нормально для того, чтобы это заняло некоторое время, так как это автономный процесс, но это НЕ нормально, чтобы он останавливал все другие запросы, которые не должны быть связаны с ним в любом случае. Кто-нибудь знает, почему все другие несвязанные запросы возвращаются как "заблокированные" и как предотвратить такое поведение?
2 ответа
Вы правы в том, что "несвязанные таблицы" не должны быть затронуты. Они не должны, и, насколько мне известно, они не.
В MySQL много информации о блокировках, механизмах хранения и способах их решения.
Чтобы ограничить блокировки, я бы предложил вам написать приложение, которое считывает все данные, необходимые для создания этой новой таблицы, и просто вставляет значения вашего приложения в новую таблицу. Это может занять больше времени, но это будет выполняться небольшими порциями и иметь меньше блокировок или вообще не иметь их.
Удачи!
Какая у вас версия MySQL?
Вы используете MyISAM? MyISAM имеет большие проблемы с блокировкой больших команд SELECT.
У вас есть выделенный сервер? каков ваш максимальный размер для таблиц в памяти (смотрите в my.cnf)?