![]() |
![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Ребята, есть недопонимание временных таблиц. Помогите, пожалуйста.
Из офф. документации я прочитал следующее:
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)
Неактивен
Временная таблица всегда живет только в пределах одной сессии конкретного пользователя. Если два пользователя создадут по временной таблице `JJJ`, это будут две разные таблицы. Взаимодействие разных сессий через временные таблицы исключено, поэтому транзакция не завершается.
Надо все же быть осторожным, так как при репликации временные таблицы реплицируются с id сесии и если реплику перезагрузить когда уже реплицирована операция создания временной таблицы, но сессия еще не закончена, то после перезапуска на реплике временной таблицы не будет и произойдет останов репликации при следующем обращении в данной временной таблице.
Неактивен
rgbeast написал:
Временная таблица всегда живет только в пределах одной сессии конкретного пользователя. Если два пользователя создадут по временной таблице `JJJ`, это будут две разные таблицы. Взаимодействие разных сессий через временные таблицы исключено, поэтому транзакция не завершается.
Отлегло... Хотя, разумеется именно так я и думал оно должно работать.
rgbeast написал:
Надо все же быть осторожным, так как при репликации временные таблицы реплицируются с id сесии и если реплику перезагрузить когда уже реплицирована операция создания временной таблицы, но сессия еще не закончена, то после перезапуска на реплике временной таблицы не будет и произойдет останов репликации при следующем обращении в данной временной таблице.
Перечитал дважды, ничего не понял
http://habrahabr.ru/blogs/mysql/56702/ написал:
Репликация (от лат. replico -повторяю) — это тиражирование изменений данных с главного сервера БД на одном или нескольких зависимых серверах. Главный сервер будем называть мастером, а зависимые — репликами.
Видимо это что-то, что предстоит изучать в "старших классах"
Неактивен
Идея простая. Слейв (зависимый сервер) должен повторять запросы мастера. В том числе и запросы, связанные с временными таблицами. Поэтому он тоже должен вести учет номеров сессий, в рамках которых таблицы созданы. Но большинство временных таблиц имеют тип MEMORY и если слейв перезагрузить, то они потеряются, а мастер об этом не будет знать и будет слать запросы к этим таблицам.
Неактивен
rgbeast написал:
Идея простая. Слейв (зависимый сервер) должен повторять запросы мастера. В том числе и запросы, связанные с временными таблицами. Поэтому он тоже должен вести учет номеров сессий, в рамках которых таблицы созданы. Но большинство временных таблиц имеют тип MEMORY и если слейв перезагрузить, то они потеряются, а мастер об этом не будет знать и будет слать запросы к этим таблицам.
Понял, но у меня схема серверов будет очень упрощенная. Тупо виртуальный хостинг и не более того Спасибо за информацию в любом случае.
Отредактированно FiMko (28.03.2010 22:46:47)
Неактивен
rgbeast написал:
Идея простая. Слейв (зависимый сервер) должен повторять запросы мастера. В том числе и запросы, связанные с временными таблицами. Поэтому он тоже должен вести учет номеров сессий, в рамках которых таблицы созданы. Но большинство временных таблиц имеют тип MEMORY и если слейв перезагрузить, то они потеряются, а мастер об этом не будет знать и будет слать запросы к этим таблицам.
Вот как раз сегодня с таким и столкнулся. Есть ли варианты безболезненно и быстро победить? Мастер-сервер останавливать и лочить нельзя. Имеется бекап месячной давности, база порядка 10 гигов в архиве. Если зафлешить слейв и начать заново, то этот процесс будет длительный.
Неактивен
Страниц: 1