Spec-Zone.ru › MySQL 8.4

26.3.4 Поддержка целостности разделов

Ряд задач по обслуживанию таблиц и разделов можно выполнить для разделяемых таблиц с помощью SQL-запросов, предназначенных для таких целей.

Обслуживание таблиц разделяемых таблиц может быть выполнено с помощью операторов 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 терпит неудачу, когда раздел содержит ошибки дублирования ключей. Вы можете использовать ALTER IGNORE TABLE с этим параметром, в этом случае все строки, которые не могут быть перемещены из-за наличия дублирующих ключей, удаляются из раздела (Ошибка #16900947).

  • Проверка разделов. Вы можете проверить разделы на наличие ошибок так же, как можете использовать CHECK TABLE с неразделяемыми таблицами.

    Пример:

    ALTER TABLE trb3 CHECK PARTITION p1;
    

    Этот оператор сообщает вам, повреждены ли данные или индексы в разделе p1 таблицы t1. Если это так, используйте ALTER TABLE ... REPAIR PARTITION для восстановления раздела.

    Обычно CHECK PARTITION терпит неудачу, когда раздел содержит ошибки дублирования ключей. Вы можете использовать ALTER IGNORE TABLE с этим параметром, в этом случае оператор возвращает содержимое каждой строки в разделе, где обнаружено нарушение уникальности ключа. Сообщаются только значения столбцов в выражении разбиения для таблицы. (Ошибка #16900947)

Каждый из перечисленных операторов также поддерживает ключевое слово ALL вместо списка имен разделов. Использование ALL приводит к тому, что оператор выполняется для всех разделов в таблице.

Вы также можете обнулять разделы, используя ALTER TABLE ... TRUNCATE PARTITION. Этот оператор можно использовать для удаления всех строк из одного или нескольких разделов аналогично тому, как TRUNCATE TABLE удаляет все строки из таблицы.

ALTER TABLE ... TRUNCATE PARTITION ALL обнуляет все разделы в таблице.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/partitioning-maintenance.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API