22.3.4 Техническое обслуживание разделов
Несколько задач по обслуживанию таблиц и разделов можно выполнить с помощью SQL-запросов, предназначенных для таких целей, по разделяемым таблицам в MySQL 5.7.
Обслуживание таблиц разделяемых таблиц можно выполнить с помощью операторов CHECK TABLE, OPTIMIZE TABLE, ANALYZE TABLE и REPAIR TABLE, которые поддерживаются для разделяемых таблиц.
Вы можете использовать ряд расширений к ALTER
TABLE для выполнения операций такого типа на одном или нескольких разделах напрямую, как описано в следующем списке:
-
Перестройка разделов. Перестраивает раздел; это имеет тот же эффект, что и удаление всех записей, хранящихся в разделе, а затем повторное их вставка. Это может быть полезно для дефрагментации.
Пример:
ALTER TABLE t1 REBUILD PARTITION p0, p1;
-
Оптимизация разделов. Если вы удалили большое количество строк из раздела или внесли много изменений в разделяемую таблицу с изменяемыми строками (то есть имеющими
VARCHAR,BLOBилиTEXTстолбцы), вы можете использоватьALTER TABLE ... OPTIMIZE PARTITION, чтобы освободить любое неиспользуемое пространство и дефрагментировать файл данных раздела.Пример:
ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;
Использование
OPTIMIZE PARTITIONдля заданного раздела эквивалентно запускуCHECK PARTITION,ANALYZE PARTITIONиREPAIR PARTITIONдля этого раздела.Некоторые хранилища MySQL, включая
InnoDB, не поддерживают оптимизацию по разделам; в этих случаяхALTER TABLE ... OPTIMIZE PARTITIONанализирует и перестраивает всю таблицу и выводит соответствующее предупреждение. (Ошибка #11751825, ошибка #42822) ИспользуйтеALTER TABLE ... REBUILD PARTITIONиALTER TABLE ... ANALYZE PARTITIONвместо этого, чтобы избежать этой проблемы. -
Анализ разделов. Это считывает и сохраняет распределения ключей для разделов.
Пример:
ALTER TABLE t1 ANALYZE PARTITION p3;
-
Ремонт разделов. Это позволяет восстановить поврежденные разделы.
Пример:
ALTER TABLE t1 REPAIR PARTITION p0,p1;
Обычно
REPAIR PARTITIONтерпит неудачу, когда раздел содержит ошибки дублирования ключей. В MySQL 5.7.2 и более поздних версиях вы можете использоватьALTER IGNORE TABLEс этим параметром, в этом случае все строки, которые не могут быть перемещены из-за наличия дублирующих ключей, удаляются из раздела (Ошибка #16900947). -
Проверка разделов. Вы можете проверить разделы на наличие ошибок аналогично тому, как вы можете использовать
CHECK TABLEс неразделяемыми таблицами.Пример:
ALTER TABLE trb3 CHECK PARTITION p1;
Эта команда указывает, повреждены ли данные или индексы в разделе
p1таблицыt1. В этом случае используйтеALTER TABLE ... REPAIR PARTITIONдля восстановления раздела.Обычно
CHECK PARTITIONтерпит неудачу, когда раздел содержит ошибки дублирования ключей. В MySQL 5.7.2 и более поздних версиях вы можете использоватьALTER IGNORE TABLEс этим параметром, в этом случае оператор возвращает содержимое каждой строки в разделе, где обнаружено нарушение дублирования ключей. Сообщаются только значения столбцов в выражении разбиения для таблицы. (Ошибка #16900947)
Каждый из операторов в только что показанном списке также поддерживает ключевое слово ALL вместо списка имен разделов. Использование ALL заставляет оператор действовать на все разделы в таблице.
Использование mysqlcheck и myisamchk не поддерживается с разделяемыми таблицами.
В MySQL 5.7 вы также можете обнулить разделы с помощью ALTER TABLE
... TRUNCATE PARTITION. Этот оператор можно использовать для удаления всех строк из одного или нескольких разделов аналогичным образом, как TRUNCATE TABLE удаляет все строки из таблицы.
ALTER TABLE ...
TRUNCATE PARTITION ALL обнуляет все разделы в таблице.
До MySQL 5.7.2 ANALYZE, CHECK, OPTIMIZE, REBUILD, REPAIR и TRUNCATE операции не были разрешены для подразделов (Ошибка #14028340, Ошибка #65184).
© 2025 Oracle
Licensed under the GPLv2 License.