Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ? / 16 сообщений из 16, страница 1 из 1
23.08.2020, 17:29
    #39991768
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Для чего нужны транзакции - понятно. Но предположим, что у нас на сервере:
- 15 Тб дискового пространства
- база данных весит 12 Тб (в развёрнутом состоянии)

База данных восстанавливается из дампа, созданного с опцией --single-transaction. Что мы получаем в процессе восстановления :
1 . В рамках транзакции движок InnoDB логирует каждую SQL-команду (в ibdata1 или ib_logfile0 ib_logfile0 )
2 . К моменту окончания восстановления данных на диске будет располагаться почти полная БД + такой же объём залогированных транзакционных данных > т.е. на диске потребуется не 12 Тб, а 24 Тб свободного пространства (а в нашем распоряжении всего 15 Тб ).
3 . Если в конце восстановления данных возникнет ошибка, транзакция начнёт свой откат - приблизительно столько же времени, сколько выполнялось восстановление из дампа (а это может быть и час, и сутки, и неделя)

Другой вариант: данные восстанавливаются из дампа, созданного без опции --single-transaction :
1 . Транзакция не логируется и дисковое пространство дополнительно не расходуется (расходуется только для восстанавливаемой БД)
2 . К моменту окончания восстановления данных на диске будет располагаться почти полная БД > т.е. на диске потребуется 12 Тб , а не 24 Тб
3 . Если в конце восстановления данных возникнет ошибка, mysqldump выводит сообщение об ошибке и администратор перезапускает процесс восстановления (удаляет частично созданную БД и повторно запускает восстановление). При этом ждать отката транзакции не требуется.

Вопрос: нужна ли опция --single-transaction при создании дампа больших БД на движке InnoDB ?
...
Рейтинг: 0 / 0
25.08.2020, 12:47
    #39992215
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Что-то молчит сообщество...
Не уж-то все в глубоком коронавирусном дедлоке сидят ?
...
Рейтинг: 0 / 0
25.08.2020, 13:37
    #39992250
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Просто всех вогнало в ступор противоречие между первым предложением и всем остальным.
...
Рейтинг: 0 / 0
25.08.2020, 13:41
    #39992251
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Почему вы решили что mysqldump --single-transaction (если речь о нём) как-то влияет на восстановление, а не на снятие дампа, как это описано в документации?
...
Рейтинг: 0 / 0
25.08.2020, 14:54
    #39992290
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
авторПочему вы решили что mysqldump --single-transaction (если речь о нём) как-то влияет на восстановление, а не на снятие дампа, как это описано в документации? Почему-то считал, что это SQL-операции в создаваемом дампе заключаются в единую транзакцию. Похоже, коронавирус...

Хорошо, пусть это будет транзакция уровня REPEATABLE READ. В процессе создания дампа с опцией --single-transaction читаются все записи таблиц и создаются их снимки (опять-таки в ibdata1 или ib_logfile0 ib_logfile0 ). В итоге к моменту завершения создания дампа у нас на диске будет располагаться сами таблицы (12 Тб) + снимки всех их записей (12 Тб). Итого получаем 24 Тб - вдвое больше, чем весит развёрнутая БД.

https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html#isolevel_repeatable-read This is the default isolation level for InnoDB. Consistent reads within the same transaction read the snapshot established by the first read . This means that if you issue several plain (nonlocking) SELECT statements within the same transaction, these SELECT statements are consistent also with respect to each other
With REPEATABLE READ isolation level, the snapshot is based on the time when the first read operation is performed
...
Рейтинг: 0 / 0
25.08.2020, 16:01
    #39992324
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Cyrax_02
Хорошо, пусть это будет транзакция уровня REPEATABLE READ. В процессе создания дампа с опцией --single-transaction читаются все записи таблиц

да

Cyrax_02
создаются их снимки (опять-таки в ibdata1 или ib_logfile0 ib_logfile0)

зачем?
...
Рейтинг: 0 / 0
25.08.2020, 16:13
    #39992327
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
зачем? https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html#isolevel_repeatable-read
Consistent reads within the same transaction read the snapshot established by the first read . This means that if you issue several plain. With REPEATABLE READ isolation level, the snapshot is based on the time when the first read operation is performed

First read - это чтение в процессе создания дампа
...
Рейтинг: 0 / 0
25.08.2020, 16:15
    #39992328
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
На вопрос "Зачем" - простой ответ: для реализации уровня блокировки REPEATABLE READ .
...
Рейтинг: 0 / 0
25.08.2020, 16:36
    #39992337
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Cyrax_02
На вопрос "Зачем" - простой ответ: для реализации уровня блокировки REPEATABLE READ .

Ни малейших идей зачем для этого писать данные сверх того что уже записано. Может объясните?

Вы как себе представляете реализацию MVCC? Могу рассказать: писатели создают новые версии строк данные, читатели берут ту из множества хранящихся версий, которая видна для транзакции этого читателя. Всё, вот и весь repeatable read.
...
Рейтинг: 0 / 0
26.08.2020, 00:26
    #39992411
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Melkij , для создания снимков строк память нужна или нет ?

MelkijВы как себе представляете реализацию MVCC? Могу рассказать: писатели создают новые версии строк данные, читатели берут ту из множества хранящихся версий, которая видна для транзакции этого читателя. Всё, вот и весь repeatable read.
При создании дампа с блокировкой REPEATABLE READ данные не меняются, но тем не менее, блокировка реализуется (в целях обеспечения целостности дампируемых данных). И снимки создаются. Для каждой записи. Объём данных снимков = объёму дампируемых данных = 12 Тб дополнительного дискового пространства.
...
Рейтинг: 0 / 0
26.08.2020, 11:15
    #39992470
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Cyrax_02
И снимки создаются. Для каждой записи.

Да зачем? Всё уже создано при выполнении insert/update/delete
Mysql, конечно, всегда отличался удивительными идеями. Но mvcc в innodb вполне обычный undo.

Разве только вы говорите о пространстве необходимом для сохранения самого результата дампа. Тогда, впрочем, решительно непонятно почему вы говорите об innodb.
...
Рейтинг: 0 / 0
26.08.2020, 11:52
    #39992484
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
авторРазве только вы говорите о пространстве необходимом для сохранения самого результата дампа.О самом дампе речь не идёт.

авторДа зачем? Всё уже создано при выполнении insert/update/deleteПри создании дампа с опцией --single-transaction операции insert/update/delete не выполняются.
А вот снимки записей создаются. Потому что REPEATABLE READ:
https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html#isolevel_repeatable-read
Consistent reads within the same transaction read the snapshot established by the first read . This means that if you issue several plain. With REPEATABLE READ isolation level, the snapshot is based on the time when the first read operation is performed
...
Рейтинг: 0 / 0
26.08.2020, 13:37
    #39992546
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Cyrax_02,

да блин. Раз вы не понимаете что такое mvcc - то и не лезьте. Вы не понимаете то что цитируете и тем более то что пытаетесь выделять жирным. Вообще не понимаете.
...
Рейтинг: 0 / 0
26.08.2020, 13:44
    #39992547
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Cyrax_02
А вот снимки записей создаются.

"Snapshot" в этом тексте совсем не то, что Вы полагаете. Нет, это не копия данных, это просто число. Возможно даже 32-х разрядное. И он создаётся для базы в целом, а не каждой отдельной записи. Таким образом памяти занимается ровно четыре (хотя может и восемь) байт.
...
Рейтинг: 0 / 0
26.08.2020, 15:32
    #39992581
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
авторНет, это не копия данных, это просто числоОб этом написано в справке ?
...
Рейтинг: 0 / 0
27.08.2020, 14:58
    #39993006
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
Это внутренние детали реализации, которые в справке ни к чему. Просто выключайте фантазию и не экстраполируйте слово "snapshot" на свои личные идеи об архитектуре СУБД.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ? / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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