|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Для чего нужны транзакции - понятно. Но предположим, что у нас на сервере: - 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 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2020, 17:29 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Что-то молчит сообщество... Не уж-то все в глубоком коронавирусном дедлоке сидят ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 12:47 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Просто всех вогнало в ступор противоречие между первым предложением и всем остальным. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 13:37 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Почему вы решили что mysqldump --single-transaction (если речь о нём) как-то влияет на восстановление, а не на снятие дампа, как это описано в документации? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 13:41 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
авторПочему вы решили что 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 14:54 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Cyrax_02 Хорошо, пусть это будет транзакция уровня REPEATABLE READ. В процессе создания дампа с опцией --single-transaction читаются все записи таблиц да Cyrax_02 создаются их снимки (опять-таки в ibdata1 или ib_logfile0 ib_logfile0) зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 16:01 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
зачем? 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 - это чтение в процессе создания дампа ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 16:13 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
На вопрос "Зачем" - простой ответ: для реализации уровня блокировки REPEATABLE READ . ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 16:15 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Cyrax_02 На вопрос "Зачем" - простой ответ: для реализации уровня блокировки REPEATABLE READ . Ни малейших идей зачем для этого писать данные сверх того что уже записано. Может объясните? Вы как себе представляете реализацию MVCC? Могу рассказать: писатели создают новые версии строк данные, читатели берут ту из множества хранящихся версий, которая видна для транзакции этого читателя. Всё, вот и весь repeatable read. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 16:36 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Melkij , для создания снимков строк память нужна или нет ? MelkijВы как себе представляете реализацию MVCC? Могу рассказать: писатели создают новые версии строк данные, читатели берут ту из множества хранящихся версий, которая видна для транзакции этого читателя. Всё, вот и весь repeatable read. При создании дампа с блокировкой REPEATABLE READ данные не меняются, но тем не менее, блокировка реализуется (в целях обеспечения целостности дампируемых данных). И снимки создаются. Для каждой записи. Объём данных снимков = объёму дампируемых данных = 12 Тб дополнительного дискового пространства. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 00:26 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Cyrax_02 И снимки создаются. Для каждой записи. Да зачем? Всё уже создано при выполнении insert/update/delete Mysql, конечно, всегда отличался удивительными идеями. Но mvcc в innodb вполне обычный undo. Разве только вы говорите о пространстве необходимом для сохранения самого результата дампа. Тогда, впрочем, решительно непонятно почему вы говорите об innodb. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 11:15 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
авторРазве только вы говорите о пространстве необходимом для сохранения самого результата дампа.О самом дампе речь не идёт. авторДа зачем? Всё уже создано при выполнении 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 11:52 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Cyrax_02, да блин. Раз вы не понимаете что такое mvcc - то и не лезьте. Вы не понимаете то что цитируете и тем более то что пытаетесь выделять жирным. Вообще не понимаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 13:37 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Cyrax_02 А вот снимки записей создаются. "Snapshot" в этом тексте совсем не то, что Вы полагаете. Нет, это не копия данных, это просто число. Возможно даже 32-х разрядное. И он создаётся для базы в целом, а не каждой отдельной записи. Таким образом памяти занимается ровно четыре (хотя может и восемь) байт. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 13:44 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
авторНет, это не копия данных, это просто числоОб этом написано в справке ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 15:32 |
|
Восстановление больших таблиц InnoDB из дампа: нужен ли --single-transaction ?
|
|||
---|---|---|---|
#18+
Это внутренние детали реализации, которые в справке ни к чему. Просто выключайте фантазию и не экстраполируйте слово "snapshot" на свои личные идеи об архитектуре СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 14:58 |
|
|
start [/forum/topic.php?fid=47&msg=39992215&tid=1828397]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
242ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 594ms |
0 / 0 |