Spec-Zone .ru
спецификации, руководства, описания, API

14.2.3.11. InnoDB Мультиуправление версиями

InnoDB мультиимеющий версию механизм хранения: это хранит информацию о старых версиях измененных строк, чтобы поддерживать транзакционные функции, такие как параллелизм и откат. Эта информация хранится в табличной области в структуре данных, названной сегментом отката (после аналогичной структуры данных в Oracle). InnoDB использует информацию в сегменте отката, чтобы выполнить операции отмены, необходимые в откате транзакции. Это также использует информацию, чтобы создать более ранние версии строки для непротиворечивого чтения.

Внутренние Детали Мультиуправления версиями

Внутренне, InnoDB добавляют три поля к каждой строке, сохраненной в базе данных. 6 байтов DB_TRX_ID поле указывает на идентификатор транзакции для последней транзакции, которая вставила или обновила строку. Кроме того, удаление обрабатывается внутренне как обновление, где специальный бит в строке устанавливается отметить его как удалено. Каждая строка также содержит 7 байтов DB_ROLL_PTR поле делало перекличку указатель. Указатель рулона указывает на запись журнала отмены, записанную сегменту отката. Если строка была обновлена, запись журнала отмены содержит информацию, необходимую, чтобы восстановить контент строки прежде, чем это было обновлено. 6 байтов DB_ROW_ID поле содержит ID строки, который увеличивается монотонно, поскольку новые строки вставляются. Если InnoDB генерирует кластерный индекс автоматически, индексирование содержит Значения идентификаторов строки. Иначе, DB_ROW_ID столбец не появляется ни в ком, индексируют.

Отмена входит в систему, сегмент отката делится на вставку и обновляет журналы отмены. Вставьте журналы отмены, необходимы только в откате транзакции и может быть отброшен, как только транзакция фиксирует. Журналы отмены обновления используются также в непротиворечивых чтениях, но они могут быть отброшены только после того, как нет никакого подарка транзакции к который InnoDB присвоил снимок, который в непротиворечивом чтении мог нуждаться в информации в журнале отмены обновления, чтобы создать более раннюю версию строки базы данных.

Направляющие линии для Управления Сегментами Отката

Фиксируйте свои транзакции регулярно, включая те транзакции, которые выпускают только непротиворечивые чтения. Иначе, InnoDB не может отбросить данные от журналов отмены обновления, и сегмент отката может стать слишком большим, заполняя Вашу табличную область.

Физический размер записи журнала отмены в сегменте отката обычно меньше чем соответствующая вставленная или обновленная строка. Можно использовать эту информацию, чтобы вычислить пространство, необходимое для Вашего сегмента отката.

В InnoDB схема мультиуправления версиями, строка физически сразу не удаляется из базы данных, когда Вы удаляете это с SQL-оператором. InnoDB только физически удаляет соответствующую строку и индексировать записи, когда она отбрасывает запись журнала отмены обновления, записанную для удаления. Эту работу удаления вызывают чисткой, и она довольно быстро, обычно берет тот же самый порядок времени как SQL-оператор, который сделал удаление.

Если Вы вставляете и удаляете строки в небольших пакетах на приблизительно том же самом уровне в таблице, поток чистки может начать отставать, и таблица может стать больше и больше из-за всех "мертвых" строк, делая все ограниченное диском и очень медленное. В таком случае отрегулируйте новые операции строки, и выделите больше ресурсов потоку чистки, настраиваясь innodb_max_purge_lag системная переменная. См. Раздел 14.2.6,"InnoDB Опции запуска и Системные Переменные" для получения дополнительной информации.