Почему все записи выполняются при блокировке записи в mysql?Почему все записи выполняются при блокировке записи в mysql?
Когда сеанс получает блокировку записи (не получил блокировку), все блокировки записи блокируются. Я думаю, что это нелогично.
Сессия не получает блокировку означает, что замок не работает.
Если я хочу разблокировать ранее приобретенный замок, как это сделать?
Например:
Сессия A:
begin;
select * from test;
Сессия B:
lock table test write; # the session is blocked.
Сессия C:
insert into test values (xxx); # the session is blocked.
Обе сессии Ь и сессия с ар e «дождитесь блокировки метаданных».
Я думаю, что сессия с может вставить успешно, как сессии б НЕ получить блокировку ПОКА. Но все записи записываются в очередь с именем «wait for metadata lock» и блокируются.
Я хочу блокировку, которая не блокирует другие запросы, когда они еще не получены.
Моего случай онлайно DDL:
Сценарии:
lock table test write; # will block all queries if long transations exists;
remember some markers;
unlock tables;
create tmp_table;
add some triggers; # will block all the queries if long transations exists;
copy data;
rename table names; will block all the queries if long transations exists;
Это слишком опасно, если есть длинная транзакция.
Я ни за что не знаю, о чем вы говорите. Можете ли вы показать нам последовательность операторов SQL, которые вы используете? например подробности о том, как вы «приобрели блокировку записи»? –
Я внесла некоторые изменения. – lifei
Сессия B ** приобретает ** блокировку, когда выполняет «таблицу блокировки». Не позже. Весь процесс кажется мне немного странным. Почему у вас есть сеанс блокировки таблицы, если вы * знаете * есть другие сеансы, пытающиеся вставить в эту таблицу? Похоже, что использование правильных транзакций позволит решить вашу проблему без блокировок таблиц (которые являются верным способом сделать ваше приложение не масштабируемым) –