MySQL «заблокировал» процессы при копировании таблицы tmp - PullRequest
1 голос
/ 22 ноября 2011

У меня есть запрос, который занимает очень много времени, но в итоге выдает новую таблицу. Реальные объединения не все такие медленные, но они тратят почти все свое время на «копирование в таблицу tmp», и в это время состояние всех других запросов (которые должны идти к несвязанным таблицам) «заблокировано». Я нахожусь в процессе оптимизации длинного запроса, но это нормально для того, чтобы это заняло некоторое время, так как это автономный процесс, но это НЕ нормально, чтобы он останавливал все другие запросы, которые не должны быть связаны с ним в любом случае. Кто-нибудь знает, почему все другие несвязанные запросы возвращаются как «заблокированные» и как предотвратить такое поведение?

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Вы правы в том, что «несвязанные таблицы» не должны затрагиваться.Они не должны, и, насколько мне известно, они не.

На MySQL имеется много информации о блокировках, механизмах хранения и способах их обработки.

Чтобы ограничить блокировки, я бы предложил вам написать приложениеон считывает все данные, необходимые для создания этой новой таблицы, и просто вставляет значения вашего приложения в новую таблицу.Это может занять больше времени, но это будет происходить небольшими порциями и иметь меньше блокировок или вообще не иметь их.

Удачи!

0 голосов
/ 22 ноября 2011

Какая у вас версия MySQL?

Вы используете MyISAM? У MyISAM большие проблемы с блокировкой больших команд SELECT.

У вас есть выделенный сервер? каков ваш максимальный размер для таблиц в памяти (смотрите в my.cnf)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...