Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как скопировать данные из таблицы без лока? / 10 сообщений из 10, страница 1 из 1
12.02.2016, 13:54
    #39169549
MNAndreww
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
Здравствуйте!

Есть таблица InnoDB и мне сделать ее копию ( не важно, будут ли скопированы индексы или нет ).
Попробовал так -

Код: plsql
1.
2.
3.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
CREATE TABLE `copy_table_name` AS SELECT * FROM `original_table_name` WHERE 1;
COMMIT ;



Все копируется как мне надо, но на время выполнения команды все апдейты таблицы `original_table_name` не выполняются, а стоят в очереди. Я так понимаю, что таблица залочилась для записи?

Как этого избежать? Как скопировать данные не блокируя исходную таблицу?

Спасибо!
...
Рейтинг: 0 / 0
12.02.2016, 14:30
    #39169594
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
MNAndreww,

А зачем вы трогаете TRANSACTION ISOLATION LEVEL ?
Без этого пробовали?
...
Рейтинг: 0 / 0
12.02.2016, 15:56
    #39169677
MNAndreww
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
miksoftА зачем вы трогаете TRANSACTION ISOLATION LEVEL ?


Вот в этом треде ( http://stackoverflow.com/questions/917640/any-way-to-select-without-causing-locking-in-mysql ) я прочитал, что это поможет избавиться от лока.

miksoftБез этого пробовали?


Да. Лочит. Вот кусочек отсюда ( http://dev.mysql.com/doc/refman/5.7/en/table-locking.html ) -

A SELECT statement that takes a long time to run prevents other sessions from updating the table in the meantime, making the other sessions appear slow or unresponsive. While a session is waiting to get exclusive access to the table for updates, other sessions that issue SELECT statements will queue up behind it, reducing concurrency even for read-only sessions.
...
Рейтинг: 0 / 0
12.02.2016, 16:56
    #39169737
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
Копировать, не блокируя, не получится. А вот минимизировать описанные потери можно, выполняя сперва чистое копирование структуры, а затем блочное (скажем, по диапазону первичного ключа) копирование данных пачкой запросов (между которыми отработают запросы других клиентов) в эту структуру.
Ну а потенциальное рассогласование - за свой счёт.
...
Рейтинг: 0 / 0
12.02.2016, 20:37
    #39169919
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
Об InnoDB вроде бы говорилось, что это версионный движок, так что читатели не должны бы ничего блокировать...
...
Рейтинг: 0 / 0
13.02.2016, 08:15
    #39170156
XsevenBeta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
AkinaКопировать, не блокируя, не получится. А вот минимизировать описанные потери можно, выполняя сперва чистое копирование структуры, а затем блочное (скажем, по диапазону первичного ключа) копирование данных пачкой запросов (между которыми отработают запросы других клиентов) в эту структуру. Ну а потенциальное рассогласование - за свой счёт.
Akina, а можно это делать через курсор, делая while и вставляя например по тысяче строк за раз?
...
Рейтинг: 0 / 0
14.02.2016, 13:28
    #39170685
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
авторЕсть таблица InnoDB и мне сделать ее копиюа смысл какой вкладывается в "сделать копию". Физически это зачем надо делать? Может просто репликацию настроить?
...
Рейтинг: 0 / 0
15.02.2016, 10:56
    #39171056
MNAndreww
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
Dimitry SibiryakovОб InnoDB вроде бы говорилось, что это версионный движок, так что читатели не должны бы ничего блокировать...

У меня блокируют.
...
Рейтинг: 0 / 0
15.02.2016, 15:14
    #39171413
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
MNAndrewwmiksoftА зачем вы трогаете TRANSACTION ISOLATION LEVEL ?


Вот в этом треде ( http://stackoverflow.com/questions/917640/any-way-to-select-without-causing-locking-in-mysql ) я прочитал, что это поможет избавиться от лока.

miksoftБез этого пробовали?


Да. Лочит. Вот кусочек отсюда ( http://dev.mysql.com/doc/refman/5.7/en/table-locking.html ) -

A SELECT statement that takes a long time to run prevents other sessions from updating the table in the meantime, making the other sessions appear slow or unresponsive. While a session is waiting to get exclusive access to the table for updates, other sessions that issue SELECT statements will queue up behind it, reducing concurrency even for read-only sessions.

When choosing whether to create a table using InnoDB or a different storage engine, keep in mind the following disadvantages of table locking:
...
Рейтинг: 0 / 0
15.02.2016, 15:14
    #39171414
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как скопировать данные из таблицы без лока?
авторWhen choosing whether to create a table using InnoDB or a different storage engine, keep in mind the following disadvantages of table locking:

....................

A SELECT statement that takes a long time to run prevents other sessions from updating the table in the meantime, making the other sessions appear slow or unresponsive. While a session is waiting to get exclusive access to the table for updates, other sessions that issue SELECT statements will queue up behind it, reducing concurrency even for read-only sessions.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как скопировать данные из таблицы без лока? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]