powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как скопировать данные из таблицы без лока?
10 сообщений из 10, страница 1 из 1
Как скопировать данные из таблицы без лока?
    #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
Как скопировать данные из таблицы без лока?
    #39169594
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MNAndreww,

А зачем вы трогаете TRANSACTION ISOLATION LEVEL ?
Без этого пробовали?
...
Рейтинг: 0 / 0
Как скопировать данные из таблицы без лока?
    #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
Как скопировать данные из таблицы без лока?
    #39169737
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копировать, не блокируя, не получится. А вот минимизировать описанные потери можно, выполняя сперва чистое копирование структуры, а затем блочное (скажем, по диапазону первичного ключа) копирование данных пачкой запросов (между которыми отработают запросы других клиентов) в эту структуру.
Ну а потенциальное рассогласование - за свой счёт.
...
Рейтинг: 0 / 0
Как скопировать данные из таблицы без лока?
    #39169919
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Об InnoDB вроде бы говорилось, что это версионный движок, так что читатели не должны бы ничего блокировать...
...
Рейтинг: 0 / 0
Как скопировать данные из таблицы без лока?
    #39170156
XsevenBeta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaКопировать, не блокируя, не получится. А вот минимизировать описанные потери можно, выполняя сперва чистое копирование структуры, а затем блочное (скажем, по диапазону первичного ключа) копирование данных пачкой запросов (между которыми отработают запросы других клиентов) в эту структуру. Ну а потенциальное рассогласование - за свой счёт.
Akina, а можно это делать через курсор, делая while и вставляя например по тысяче строк за раз?
...
Рейтинг: 0 / 0
Как скопировать данные из таблицы без лока?
    #39170685
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсть таблица InnoDB и мне сделать ее копиюа смысл какой вкладывается в "сделать копию". Физически это зачем надо делать? Может просто репликацию настроить?
...
Рейтинг: 0 / 0
Как скопировать данные из таблицы без лока?
    #39171056
MNAndreww
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovОб InnoDB вроде бы говорилось, что это версионный движок, так что читатели не должны бы ничего блокировать...

У меня блокируют.
...
Рейтинг: 0 / 0
Как скопировать данные из таблицы без лока?
    #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
Как скопировать данные из таблицы без лока?
    #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
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как скопировать данные из таблицы без лока?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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