SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 28.03.2010 21:09:20

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Одновременная работа с временными таблицами и их удаление

Ребята, есть недопонимание временных таблиц. Помогите, пожалуйста.

Из офф. документации я прочитал следующее:

http://dev.mysql.com/doc/refman/5.1/en/drop-table.html написал:

The TEMPORARY keyword has the following effects:

The statement drops only TEMPORARY tables.

The statement does not end an ongoing transaction.

No access rights are checked. (A TEMPORARY table is visible only to the session that created it, so no check is necessary.)

Не совсем понятен смысл фразы "The statement does not end an ongoing transaction.".

А именно, что произойдет в следующем случае: в составе запроса каждый раз кроме всего прочего создается временная таблица TEMP, она заполняется значениями, в конце запроса таблица уничтожается. Что будет, если два пользователя одновременно запускают данный запрос? Что произойдет в аналогичном случае, если выполняется TRUNCATE для таблицы, а не DROP.

Отредактированно FiMko (28.03.2010 21:14:53)

Неактивен

 

#2 28.03.2010 21:27:49

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

Re: Одновременная работа с временными таблицами и их удаление

Временная таблица всегда живет только в пределах одной сессии конкретного пользователя. Если два пользователя создадут по временной таблице `JJJ`, это будут две разные таблицы. Взаимодействие разных сессий через временные таблицы исключено, поэтому транзакция не завершается.

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

Неактивен

 

#3 28.03.2010 21:36:25

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Одновременная работа с временными таблицами и их удаление

rgbeast написал:

Временная таблица всегда живет только в пределах одной сессии конкретного пользователя. Если два пользователя создадут по временной таблице `JJJ`, это будут две разные таблицы. Взаимодействие разных сессий через временные таблицы исключено, поэтому транзакция не завершается.

Отлегло... Хотя, разумеется именно так я и думал оно должно работать.

rgbeast написал:

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

Перечитал дважды, ничего не понял smile

http://habrahabr.ru/blogs/mysql/56702/ написал:

Репликация (от лат. replico -повторяю) — это тиражирование изменений данных с главного сервера БД на одном или нескольких зависимых серверах. Главный сервер будем называть мастером, а зависимые — репликами.

Видимо это что-то, что предстоит изучать в "старших классах" big_smile

Неактивен

 

#4 28.03.2010 22:35:05

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

Re: Одновременная работа с временными таблицами и их удаление

Идея простая. Слейв (зависимый сервер) должен повторять запросы мастера. В том числе и запросы, связанные с временными таблицами. Поэтому он тоже должен вести учет номеров сессий, в рамках которых таблицы созданы. Но большинство временных таблиц имеют тип MEMORY и если слейв перезагрузить, то они потеряются, а мастер об этом не будет знать и будет слать запросы к этим таблицам.

Неактивен

 

#5 28.03.2010 22:46:12

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Одновременная работа с временными таблицами и их удаление

rgbeast написал:

Идея простая. Слейв (зависимый сервер) должен повторять запросы мастера. В том числе и запросы, связанные с временными таблицами. Поэтому он тоже должен вести учет номеров сессий, в рамках которых таблицы созданы. Но большинство временных таблиц имеют тип MEMORY и если слейв перезагрузить, то они потеряются, а мастер об этом не будет знать и будет слать запросы к этим таблицам.

Понял, но у меня схема серверов будет очень упрощенная. Тупо виртуальный хостинг и не более того smile Спасибо за информацию в любом случае.

Отредактированно FiMko (28.03.2010 22:46:47)

Неактивен

 

#6 28.11.2011 16:54:41

Grand
Участник
Зарегистрирован: 28.11.2011
Сообщений: 1

Re: Одновременная работа с временными таблицами и их удаление

rgbeast написал:

Идея простая. Слейв (зависимый сервер) должен повторять запросы мастера. В том числе и запросы, связанные с временными таблицами. Поэтому он тоже должен вести учет номеров сессий, в рамках которых таблицы созданы. Но большинство временных таблиц имеют тип MEMORY и если слейв перезагрузить, то они потеряются, а мастер об этом не будет знать и будет слать запросы к этим таблицам.

Вот как раз сегодня с таким и столкнулся. Есть ли варианты безболезненно и быстро победить? Мастер-сервер останавливать и лочить нельзя. Имеется бекап месячной давности, база порядка 10 гигов в архиве. Если зафлешить слейв и начать заново, то этот процесс  будет длительный.

Неактивен

 

Board footer

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