2016-03-01 3 views
0

На сервере MyISAM двигатель MySQL (5,1)MyISAM замки на больших операторов выбора

У нас есть большой запрос, чтобы сделать отчет (1 млн результатов). Я замечаю, что эти операторы select блокируют таблицы. Я не могу найти для вас настоящего объяснения в Интернете. Насколько я понимаю, таблицы должны блокироваться только при переключении между операторами select и insert (etc).

Я нашел кого-то с той же проблемой http://devoluk.com/mysql-myisam-table-lock-issue.html

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

У кого-то была такая же проблема или как сделать ее не блокирующей?

+0

MyISAM всегда блокирует таблицу на процессе/UPDATE SELECT. InnoDB блокирует только посещаемые строки, а не всю таблицу. – Martin

+1

см. Http://dev.mysql.com/doc/refman/5.7/en/internal-locking.html – Martin

ответ

1

Тема 1: SELECT ... - долго работает
резьбы 2: INSERT/DELETE/UPDATE/и т.д ... - будет ждать потока 1, чтобы закончить
тему 3: SELECT ... - будет ждать нить 2

SELECT выполняет блокировку общего доступа, которая позволяет другим SELECT, но не записывать.

MyISAM не может иметь «взаимоблокировки». (Ссылка на статью, вероятно, неправильно использует этот термин.)

Также зарегистрируйтесь INSERT DELAYED, но имейте в виду его оговорки.

И LOW_PRIORITY