Задавайте вопросы, мы ответим
Вы не зашли.
Имеем MySQL 5.037, InniDB на Windows2003srv, при выполнении долгого запроса к таблице нельзя ее обновить (update), отваливается по таймауту. Сначала думали дело в tmp таблице, в кот. результат запроса кладется. Попробовали в обычную таблицу, такая же хрень, потом попробовал изметить key_buffer_size, подумав, что не хватает памяти для создания индекса (или его обновления) хотя этот параметр вроде тока к MyISAM вроде. короче тоже не помогло. Что еще можно посмотреть, где-то еще прочитали что типа это проблема Win2003 на 2000 такого вроде нет, так ли это, куда копать???и
Неактивен
А какой запрос?
Какой режим изоляции?
(сделайте SELECT @@session.tx_isolation, @@global.tx_isolation)
Неактивен
Если Вы делаете запрос вида INSERT INTO a SELECT ... FROM b,
то на b кладется неявный WRITE LOCK.
Неактивен
Именно INSERT INTO a SELECT ... FROM b, а как обойти неявный WRITE LOCK??? Этож при каждом каком-либо таком запросе у нас юзеры не могут работать, как можно это обойти, есть какой-то еще вариант???посоветуйте!!!
Неактивен
Обойти это нельзя никак, это связано с тем, чтобы правильно писать данные в бинарный
журнал. Можете разбить запрос на кусочки или выполнять его на реплике.
Неактивен
Можно обойти, но довольно дорогим путем. Делать SELECT * в приложении, вытягивать данные и затем их вставлять. Второй вариант делать это в процедуре с помощью курсора.
Неактивен
1. Реплика - это типа копия таблицы?
2. Курсор - это темповая таблица? так с ней такая же херня или что?
Неактивен
курсор не временная таблица, курсор реализован как асинхронное чтение (см. также HANDLER)
реплика - это копия таблицы на другом MySQL-сервере
Неактивен
Насчет репликации понял (не сразу сообразил), но это проблематично, из-за этого делать.
А насчет курсора попробуем - если имеется ввиду DECLARE CURSOR FOR SELECT.
Спасибо за ответы.
Неактивен
Про курсоры пример есть в документации
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
Неактивен
Странно как-то, нам практически надо ежесекундно делать апдейты и инсерты, а если при каком либо запросе с инсертом это все будется блокироваться, то это не серьезно как-то. В MsSQL такого нет чтоли, там вроде все корректно работало. Я в трансе. Насчет SELECT @@session.tx_isolation, @@global.tx_isolation) можно поподробнее, что это.
Неактивен
Ежесекундные INSERT..SELECT лучше делать с помощью триггеров.
В MSSQL все куда хуже, просто Вы, значит, не настроили MySQL. Посмотрите
на значения буферов InnoDB, на загруженность диска, на размер логов
InnoDB.
Неактивен
Ваши слова - бальзам на душу. Только триггеры причем я не понял. У нас процедурака по вставке работает, в зависимости от входных параметров в несколько таблиц транзакцией (планируем так). Так вот если запустить запрос с блокировкой, весть этот процесс типа встанет, по таймауту вывалится. Насчет основных параметров настройки можно поподробнее (проведите курс молодого бойца, если не оч.сложно), а то тыкаемся как слепые котята, опыта пока нет, времени тоже, права на ошибку тем более, руководство подгоняет.
Неактивен
Наберите SHOW VARIABLES LIKE 'inno%' - будет список параметров
InnoDB, которые можно настроить.
Неактивен