Spec-Zone .ru
спецификации, руководства, описания, API
|
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
Опции запуска и Системные Переменные" для
получения дополнительной информации.