14.6.3.4 Пространства таблиц undo
Пространства таблиц undo содержат журналы undo, которые представляют собой коллекции записей, содержащих информацию о том, как откатить последнее изменение транзакции в записи кластеризованного индекса.
Журналы undo по умолчанию хранятся в системном пространстве таблиц, но вместо этого могут храниться в одном или нескольких пространствах таблиц undo. Использование пространств таблиц undo может уменьшить объем места, необходимого для журналов undo в любом одном пространстве таблиц. Паттерны ввода/вывода для журналов undo также делают пространства таблиц undo хорошими кандидатами для хранения.
Количество пространств таблиц undo, используемых InnoDB, контролируется параметром innodb_undo_tablespaces. Этот параметр можно настроить только при инициализации экземпляра MySQL. Его нельзя изменить после этого.
Параметр innodb_undo_tablespaces устарел; ожидается, что он будет удален в будущей версии.
Пространства таблиц undo и отдельные внутри этих пространств таблиц удалить нельзя. Однако можно обрезать журналы undo, хранящиеся в пространствах таблиц undo. Дополнительную информацию см. в разделе Обрезка пространств таблиц undo.
Настройка пространств таблиц undo
В этом разделе описано, как настроить пространства таблиц undo. При настройке пространств таблиц undo журналы undo хранятся в пространствах таблиц undo, а не в системном пространстве таблиц.
Количество пространств таблиц undo можно настроить только при инициализации экземпляра MySQL и оно фиксируется на весь срок службы экземпляра, поэтому рекомендуется выполнить следующую процедуру на тестовом экземпляре с представительной рабочей нагрузкой перед развертыванием конфигурации в рабочей системе.
Чтобы настроить пространства таблиц undo:
Укажите расположение каталога для пространств таблиц undo, используя переменную
innodb_undo_directory. Если расположение каталога не указано, пространства таблиц undo создаются в каталоге данных.-
Определите количество сегментов отката, используя переменную
innodb_rollback_segments. Начните с относительно низкого значения и постепенно увеличивайте его со временем, чтобы изучить влияние на производительность. Значение по умолчанию дляinnodb_rollback_segmentsсоставляет 128, что также является максимальным значением.Один сегмент отката всегда назначается системному пространству таблиц, а 32 сегмента отката зарезервированы для временного пространства таблиц (
ibtmp1). Следовательно, чтобы выделить сегменты отката для пространств таблиц undo, установитеinnodb_rollback_segmentsна значение, большее 33. Например, если у вас два пространства таблиц undo, установитеinnodb_rollback_segmentsна 35, чтобы назначить по одному сегменту отката каждому из двух пространств таблиц undo. Сегменты отката распределяются между пространствами таблиц undo циклическим способом.При добавлении пространств таблиц undo сегмент отката в системном пространстве таблиц становится неактивным.
Определите количество пространств таблиц undo, используя параметр
innodb_undo_tablespaces. Указанное количество пространств таблиц undo фиксируется на весь срок службы экземпляра MySQL, поэтому если вы не уверены в оптимальном значении, оцените его с запасом.Создайте новый тестовый экземпляр MySQL, используя выбранные настройки конфигурации.
Используйте реалистичную рабочую нагрузку на вашем тестовом экземпляре с объемом данных, аналогичным рабочим серверам, чтобы протестировать конфигурацию.
Измерьте производительность операций ввода/вывода с интенсивной рабочей нагрузкой.
Периодически увеличивайте значение
innodb_rollback_segmentsи повторно проводите тесты производительности до тех пор, пока не будет больше никаких улучшений в производительности ввода/вывода.
Обрезка пространств таблиц undo
Для обрезки пространств таблиц undo необходимо, чтобы экземпляр MySQL имел как минимум два активных пространства таблиц undo, что гарантирует, что одно пространство таблиц undo остается активным, в то время как другое отключается для обрезки. Количество пространств таблиц undo определяется переменной innodb_undo_tablespaces. Значение по умолчанию равно 0. Используйте данное выражение, чтобы проверить значение innodb_undo_tablespaces:
mysql> SELECT @@innodb_undo_tablespaces;
+---------------------------+
| @@innodb_undo_tablespaces |
+---------------------------+
| 2 |
+---------------------------+
Чтобы выполнить обрезку пространств таблиц undo, включите переменную innodb_undo_log_truncate. Например:
mysql> SET GLOBAL innodb_undo_log_truncate=ON;
Когда переменная innodb_undo_log_truncate включена, пространства таблиц undo, которые превышают размер, определенный переменной innodb_max_undo_log_size, подвергаются обрезке. Переменная innodb_max_undo_log_size динамическая и имеет значение по умолчанию 1073741824 байта (1024 МБ).
mysql> SELECT @@innodb_max_undo_log_size;
+----------------------------+
| @@innodb_max_undo_log_size |
+----------------------------+
| 1073741824 |
+----------------------------+
Когда переменная innodb_undo_log_truncate включена:
Пространства таблиц undo, которые превышают значение
innodb_max_undo_log_size, помечаются для обрезки. Выбор пространства таблиц undo для обрезки выполняется циклически, чтобы избежать обрезки того же пространства таблиц undo каждый раз.Сегменты отката, находящиеся в выбранном пространстве таблиц undo, делаются неактивными, чтобы они не назначались новым транзакциям. Текущие транзакции, которые в настоящее время используют сегменты отката, могут завершиться.
Система освобождает сегменты отката, освобождая журналы undo, которые больше не используются.
-
После того, как все сегменты отката в пространстве таблиц undo освобождены, выполняется операция обрезки и пространство таблиц undo обрезается до первоначального размера. Первоначальный размер пространства таблиц undo зависит от значения
innodb_page_size. При стандартном размере страницы 16 КБ первоначальный размер файла пространства таблиц undo составляет 10 МБ. При размерах страницы 4 КБ, 8 КБ, 32 КБ и 64 КБ первоначальные размеры файлов пространств таблиц undo составляют 7 МБ, 8 МБ, 20 МБ и 40 МБ соответственно.Размер пространства таблиц undo после операции обрезки может быть больше первоначального размера из-за немедленного использования после завершения операции.
Переменная
innodb_undo_directoryопределяет расположение файлов пространств таблиц undo. Если переменнаяinnodb_undo_directoryне определена, пространства таблиц undo находятся в каталоге данных. Сегменты отката активируются, чтобы они могли назначаться новым транзакциям.
Ускорение обрезки пространств таблиц undo
За очистку и обрезку пространств таблиц undo отвечает поток очистки. По умолчанию поток очистки ищет пространства таблиц undo для обрезки один раз каждые 128 вызовов очистки. Частота, с которой поток очистки ищет пространства таблиц undo для обрезки, контролируется переменной innodb_purge_rseg_truncate_frequency, значение которой по умолчанию равно 128.
mysql> SELECT @@innodb_purge_rseg_truncate_frequency;
+----------------------------------------+
| @@innodb_purge_rseg_truncate_frequency |
+----------------------------------------+
| 128 |
+----------------------------------------+
Чтобы увеличить частоту, уменьшите значение innodb_purge_rseg_truncate_frequency. Например, чтобы поток очистки искал пространства таблиц undo один раз каждые 32 вызова очистки, установите innodb_purge_rseg_truncate_frequency на 32.
mysql> SET GLOBAL innodb_purge_rseg_truncate_frequency=32;
Когда поток очистки обнаруживает пространство таблиц undo, требующее обрезки, поток очистки возвращается с большей частотой, чтобы быстро очистить и обрезать пространство таблиц undo.
Влияние обрезки файлов пространств таблиц undo на производительность
При обрезке пространства таблиц undo сегменты отката в этом пространстве таблиц отключаются. Активные сегменты отката в других пространствах таблиц undo берут на себя всю нагрузку системы, что может привести к небольшому снижению производительности. Степень влияния на производительность зависит от ряда факторов:
Количество пространств таблиц undo
Количество журналов undo
Размер пространства таблиц undo
Скорость системы ввода/вывода
Существующие длительные транзакции
Нагрузка на систему
Самый простой способ избежать потенциального снижения производительности — увеличить количество пространств таблиц undo.
Кроме того, во время операции обрезки пространства таблиц undo выполняются две операции контрольных точек. Первая операция контрольной точки удаляет старые страницы пространства таблиц undo из кэша буфера. Вторая операция контрольной точки записывает начальные страницы нового пространства таблиц undo на диск. В активной системе первая контрольная точка в частности может временно повлиять на производительность системы, если нужно удалить большое количество страниц.
Восстановление после обрезки пространств таблиц undo
Операция обрезки пространства таблиц undo создаёт временный undo_ файл в каталоге журнала сервера. Этот каталог журнала определяется параметром space_number_trunc.loginnodb_log_group_home_dir. Если во время операции обрезки произойдет сбой системы, временный файл журнала позволит процессу запуска определить пространства таблиц undo, которые обрезались, и продолжить операцию.
© 2025 Oracle
Licensed under the GPLv2 License.