SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 16.12.2007 13:09:36

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Блокировка на обновление?!

Имеем MySQL 5.037, InniDB на Windows2003srv, при выполнении долгого запроса к таблице нельзя ее обновить (update), отваливается по таймауту. Сначала думали дело в tmp таблице, в кот. результат запроса кладется. Попробовали в обычную таблицу, такая же хрень, потом попробовал изметить key_buffer_size, подумав, что не хватает памяти для создания индекса (или его обновления) хотя этот параметр вроде тока к MyISAM вроде. короче тоже не помогло. Что еще можно посмотреть, где-то еще прочитали что типа это проблема Win2003 на 2000 такого вроде нет, так ли это, куда копать???и

Неактивен

 

#2 16.12.2007 13:38:37

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Блокировка на обновление?!

А какой запрос?
Какой режим изоляции?
(сделайте SELECT @@session.tx_isolation, @@global.tx_isolation)

Неактивен

 

#3 16.12.2007 16:02:56

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

Re: Блокировка на обновление?!

Если Вы делаете запрос вида INSERT INTO a SELECT ... FROM b,
то на b кладется неявный WRITE LOCK.

Неактивен

 

#4 17.12.2007 08:02:04

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Блокировка на обновление?!

Именно INSERT INTO a SELECT ... FROM b, а как обойти неявный WRITE LOCK??? Этож при каждом каком-либо таком запросе у нас юзеры не могут работать, как можно это обойти, есть какой-то еще вариант???посоветуйте!!!

Неактивен

 

#5 17.12.2007 13:28:35

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

Re: Блокировка на обновление?!

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

Неактивен

 

#6 17.12.2007 13:33:36

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Блокировка на обновление?!

Можно обойти, но довольно дорогим путем. Делать SELECT * в приложении, вытягивать данные и затем их вставлять. Второй вариант делать это в процедуре с помощью курсора.

Неактивен

 

#7 17.12.2007 14:51:59

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Блокировка на обновление?!

1. Реплика - это типа копия таблицы?
2. Курсор - это темповая таблица? так с ней такая же херня или что?

Неактивен

 

#8 17.12.2007 14:57:02

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Блокировка на обновление?!

курсор не временная таблица, курсор реализован как асинхронное чтение (см. также HANDLER)

реплика - это копия таблицы на другом MySQL-сервере

Неактивен

 

#9 17.12.2007 16:53:48

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Блокировка на обновление?!

Насчет репликации понял (не сразу сообразил), но это проблематично, из-за этого делать.
А насчет курсора попробуем - если имеется ввиду DECLARE CURSOR FOR SELECT.
Спасибо за ответы.

Неактивен

 

#10 17.12.2007 16:59:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Блокировка на обновление?!

Про курсоры пример есть в документации
http://dev.mysql.com/doc/refman/5.1/en/cursors.html

Учитывайте, что так как курсор не блокирует таблицу, то версии строк будут произвольными
Свойство называет  Asensitive: The server may or may not make a copy of its result table

Неактивен

 

#11 18.12.2007 16:49:41

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Блокировка на обновление?!

Странно как-то, нам практически надо ежесекундно делать апдейты и инсерты, а если при каком либо запросе с инсертом это все будется блокироваться, то это не серьезно как-то. В MsSQL такого нет чтоли, там вроде все корректно работало. Я в трансе. Насчет SELECT @@session.tx_isolation, @@global.tx_isolation) можно поподробнее, что это.

Неактивен

 

#12 18.12.2007 20:19:15

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

Re: Блокировка на обновление?!

Ежесекундные INSERT..SELECT лучше делать с помощью триггеров.
В MSSQL все куда хуже, просто Вы, значит, не настроили MySQL. Посмотрите
на значения буферов InnoDB, на загруженность диска, на размер логов
InnoDB.

Неактивен

 

#13 19.12.2007 10:18:03

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Блокировка на обновление?!

Ваши слова - бальзам на душу. Только триггеры причем я не понял. У нас процедурака по вставке работает, в зависимости от входных параметров в несколько таблиц транзакцией (планируем так). Так вот если запустить запрос с блокировкой, весть этот процесс типа встанет, по таймауту вывалится. Насчет основных параметров настройки можно поподробнее (проведите курс молодого бойца, smile если не оч.сложно), а то тыкаемся как слепые котята, опыта пока нет, времени тоже, права на ошибку тем более, руководство подгоняет.

Неактивен

 

#14 19.12.2007 16:26:35

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

Re: Блокировка на обновление?!

Наберите SHOW VARIABLES LIKE 'inno%' - будет список параметров
InnoDB, которые можно настроить.

Неактивен

 

Board footer

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