SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 27.11.2007 16:50:17

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

В каком режиме изоляции работает mysqldump --single-transaction?

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

Неактивен

 

#2 27.11.2007 19:51:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: В каком режиме изоляции работает mysqldump --single-transaction?

REPEATABLE READ, разумеется.

Код:

$ strings /usr/bin/mysqldump | grep ISOLATION
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

Неактивен

 

#3 27.11.2007 20:29:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: В каком режиме изоляции работает mysqldump --single-transaction?

If you are running with the default REPEATABLE READ isolation level, all consistent reads within the same transaction read the snapshot established by the first such read in that transaction. You can get a fresher snapshot for your queries by committing the current transaction and after that issuing new queries.

Вот пример:

Код:

client1> create table a (a int) engine=InnoDb;
Query OK, 0 rows affected (0.02 sec)

client1> create table b like a;
Query OK, 0 rows affected (0.24 sec)

client2> begin;
Query OK, 0 rows affected (0.00 sec)

client1> insert into a values (1);
Query OK, 1 row affected (0.19 sec)

client2> select * from a;
+------+
| a    |
+------+
|    1 | 
+------+
1 row in set (0.00 sec)

client1> insert into b values (1);
Query OK, 1 row affected (0.06 sec)

client2> select * from b;
Empty set (0.00 sec)

Неактивен

 

#4 28.11.2007 13:17:32

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: В каком режиме изоляции работает mysqldump --single-transaction?

То, что в рамках одной таблицы REPEATABLE READ - это понятно.
Имеется в виду, что будет в случае, если mysqldump читал одну таблицу, а в это время другую таблицу (которую дамп не трогал) изменили.
Не получится ли, что в дамп попадут разные версии этих таблиц?

Неактивен

 

#5 29.11.2007 19:17:00

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: В каком режиме изоляции работает mysqldump --single-transaction?

Ты не внимателен. Я как раз на этот вопрос и ответил smile Смотри пример еще раз smile

Неактивен

 

#6 29.11.2007 19:36:57

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: В каком режиме изоляции работает mysqldump --single-transaction?

Да, действительно я невнимателен smile.

То есть, он делает snapshot со всех таблиц? (и во всех БД?)

Неактивен

 

#7 29.11.2007 19:41:57

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

Re: В каком режиме изоляции работает mysqldump --single-transaction?

LazY написал:

Да, действительно я невнимателен smile.

То есть, он делает snapshot со всех таблиц? (и во всех БД?)

Конечно не делает - это означало бы, что надо залочить все таблицы на время изготовления снапшота. --single-transaction как раз делается для того, чтобы не было блокировок. Здесь используется свойство мультиверсионности Innodb.

Версия фиксируется для всех таблиц Innodb (во всех БД).

Неактивен

 

#8 29.11.2007 19:48:43

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: В каком режиме изоляции работает mysqldump --single-transaction?

Под snapshot я не имел в виду LOCK

Версия фиксируется для всех таблиц Innodb (во всех БД).

Вот. Это и есть ответ на мой вопрос, спасибо smile

Неактивен

 

#9 23.09.2014 07:44:27

Ivan77
Участник
Зарегистрирован: 23.09.2014
Сообщений: 2

Re: В каком режиме изоляции работает mysqldump --single-transaction?

Тема уже очень старая, забрел через поиск, но не могу понять один момент. Прошу объяснить...

paulus, в вашем примере второй клиент начинает транзакцию, после этого первый клиент добавляет данные в 2 таблицы.
Почему внутри транзакции второго пользователя данные из первой таблицы видны, а данные второй таблицы - нет ?

Неактивен

 

#10 23.09.2014 13:26:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: В каком режиме изоляции работает mysqldump --single-transaction?

Последовательность немного не такая, как Вы описали. Транзакция начинается не в момент,
когда Вы сказали «BEGIN», а в момент первого обращения к InnoDB (в случае с примером — SELECT).
Ровно поэтому первая выборка видна (транзакция началась после первого INSERT), а вторая — нет smile

Для простоты можно считать, что единственное, что делает BEGIN — временно отключает autocommit wink

Неактивен

 

#11 23.09.2014 13:56:10

Ivan77
Участник
Зарегистрирован: 23.09.2014
Сообщений: 2

Re: В каком режиме изоляции работает mysqldump --single-transaction?

Спасибо за разъяснение smile

Неактивен

 

Board footer

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