SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.06.2008 12:30:50

Sign
Гуру
Зарегистрирован: 26.06.2008
Сообщений: 43

SELECT FOR UPDATE NOWAIT

Насколько я понимаю ключ NOWAIT не поддерживается в mysql:
SELECT * FROM tab1 WHERE col1 = 1 FOR UPDATE NOWAIT;

Соответственно запрос SELECT * FROM tab1 WHERE col1 = 1 FOR UPDATE; когда запись уже заблокирована приводит к ожиданию завершения блокировки.

Вопрос: как наименьшими усилиями избежать ожиданий и узнать что запись заблокирована?

Неактивен

 

#2 26.06.2008 12:53:09

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: SELECT FOR UPDATE NOWAIT

Насколько я понимаю, для Вас будет проще всего сделать что-то типа
SET table_lock_wait_timeout=0;
LOCK TABLES tab1 WRITE; (и тут проверить ошибку)
...
UNLOCK TABLES;

Неактивен

 

#3 26.06.2008 13:40:50

Sign
Гуру
Зарегистрирован: 26.06.2008
Сообщений: 43

Re: SELECT FOR UPDATE NOWAIT

paulus написал:

Насколько я понимаю, для Вас будет проще всего сделать что-то типа
SET table_lock_wait_timeout=0;
LOCK TABLES tab1 WRITE; (и тут проверить ошибку)
...
UNLOCK TABLES;

Спасибо, но к сожалению блокировка всей таблицы не приемлема.

Неактивен

 

#4 26.06.2008 13:53:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: SELECT FOR UPDATE NOWAIT

Т.е. Вы используете InnoDB и блокировки по строкам. Как насчет

SET innodb_lock_wait_timeout = 0;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM tab1 WHERE col1 = 1; (проверка ошибки)

Неактивен

 

#5 26.06.2008 14:34:24

Sign
Гуру
Зарегистрирован: 26.06.2008
Сообщений: 43

Re: SELECT FOR UPDATE NOWAIT

innodb_lock_wait_timeout нам не поможет, это таймаут для сброса дедлоков возникающих когда таблица блокируется не с помощью Innodb
К тому же innodb_lock_wait_timeout - readOnly
Или я что-то не понимаю?

Неактивен

 

#6 26.06.2008 14:59:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: SELECT FOR UPDATE NOWAIT

Упс, действительно, ставится только через перезапуск сервера sad

Боюсь тогда залочить никак не сможете. С другой стороны, Вам действительно
нужно лочить строчки? Обычными уровнями изоляции не обойдетесь?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson