Spec-Zone.ru › MariaDB

Операции InnoDB по онлайн-изменению структуры с алгоритмом NOCOPY

Операции, поддерживаемые по наследованию

Когда в предложении ALGORITHM установлено значение NOCOPY, поддерживаемые операции являются супермножеством операций, которые поддерживаются, когда в предложении ALGORITHM установлено значение INSTANT.

Следовательно, когда в предложении ALGORITHM установлено значение NOCOPY, некоторые операции поддерживаются по наследованию. Более подробную информацию об этих поддерживаемых операциях см. на следующих страницах:

  • Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT

Операции с колонками

ALTER TABLE ... ADD COLUMN

В MariaDB 10.3.2 и более поздних версиях InnoDB поддерживает добавление колонок к таблице с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: ALTER TABLE ... ADD COLUMN для получения дополнительной информации.

Это относится к ALTER TABLE ... ADD COLUMN для таблиц InnoDB.

ALTER TABLE ... DROP COLUMN

В MariaDB 10.4 и более поздних версиях InnoDB поддерживает удаление колонок из таблицы с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: ALTER TABLE ... DROP COLUMN для получения дополнительной информации.

Это относится к ALTER TABLE ... DROP COLUMN для таблиц InnoDB.

ALTER TABLE ... MODIFY COLUMN

Это относится к ALTER TABLE ... MODIFY COLUMN для таблиц InnoDB.

Переупорядочение колонок

В MariaDB 10.4 и более поздних версиях InnoDB поддерживает переупорядочение колонок в таблице с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: Переупорядочение колонок для получения дополнительной информации.

Изменение типа данных колонки

InnoDB не поддерживает изменение типа данных колонки с ALGORITHM, установленным в значение NOCOPY в большинстве случаев. Есть несколько исключений в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: Изменение типа данных колонки для получения дополнительной информации.

Изменение колонки на NULL

В MariaDB 10.4.3 и более поздних версиях InnoDB поддерживает изменение колонки для поддержки значений NULL с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: Изменение колонки на NULL для получения дополнительной информации.

Изменение колонки на NOT NULL

InnoDB не поддерживает изменение колонки для запрещения значений NULL с ALGORITHM, установленным в значение NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
) ROW_FORMAT=REDUNDANT;

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab MODIFY COLUMN c varchar(50) NOT NULL;
ERROR 1845 (0A000): ALGORITHM=NOCOPY is not supported for this operation. Try ALGORITHM=INPLACE

Добавление нового ENUM значения

InnoDB поддерживает добавление нового значения ENUM к колонке с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: Добавление нового значения ENUM для получения дополнительной информации.

Добавление нового SET значения

InnoDB поддерживает добавление нового значения SET к колонке с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: Добавление нового значения SET для получения дополнительной информации.

Удаление системного контроля версий из колонки

В MariaDB 10.3.8 и более поздних версиях InnoDB поддерживает удаление системного контроля версий из колонки с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: Удаление системного контроля версий из колонки для получения дополнительной информации.

ALTER TABLE ... ALTER COLUMN

Это относится к ALTER TABLE ... ALTER COLUMN для таблиц InnoDB.

Установка значения по умолчанию для колонки

InnoDB поддерживает изменение значения по умолчанию (DEFAULT) колонки с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: Установка значения по умолчанию для колонки для получения дополнительной информации.

Удаление значения по умолчанию для колонки

InnoDB поддерживает удаление значения по умолчанию (DEFAULT) колонки с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: Удаление значения по умолчанию для колонки для получения дополнительной информации.

ALTER TABLE ... CHANGE COLUMN

InnoDB поддерживает переименование колонки с ALGORITHM, установленным в значение NOCOPY, в тех случаях, когда операция поддерживает значение ALGORITHM, установленное в INSTANT.

См. Операции InnoDB по онлайн-изменению структуры с ALGORITHM=INSTANT: ALTER TABLE ... CHANGE COLUMN для получения дополнительной информации.

Это относится к ALTER TABLE ... CHANGE COLUMN для таблиц InnoDB.

Операции с индексами

ALTER TABLE ... ADD PRIMARY KEY

InnoDB не поддерживает добавление первичного ключа к таблице с ALGORITHM, установленным в значение NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int,
   b varchar(50),
   c varchar(50)
);

SET SESSION sql_mode='STRICT_TRANS_TABLES';
SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab ADD PRIMARY KEY (a);
ERROR 1845 (0A000): ALGORITHM=NOCOPY is not supported for this operation. Try ALGORITHM=INPLACE

Это относится к ALTER TABLE ... ADD PRIMARY KEY для таблиц InnoDB.

ALTER TABLE ... DROP PRIMARY KEY

InnoDB не поддерживает удаление первичного ключа с ALGORITHM, установленным в значение NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
);

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab DROP PRIMARY KEY;
ERROR 1846 (0A000): ALGORITHM=NOCOPY is not supported. Reason: Dropping a primary key is not allowed without also adding a new primary key. Try ALGORITHM=COPY

Это относится к ALTER TABLE ... DROP PRIMARY KEY для таблиц InnoDB.

ALTER TABLE ... ADD INDEX и CREATE INDEX

Это относится к ALTER TABLE ... ADD INDEX и CREATE INDEX для таблиц InnoDB.

Добавление простого индекса

InnoDB поддерживает добавление простого индекса к таблице с ALGORITHM, установленным в значение NOCOPY.

Эта операция поддерживает стратегию без блокировок. Эту стратегию можно явно выбрать, установив предложение LOCK в значение NONE. При использовании этой стратегии допускается все одновременные операции DML.

Например, это выполняется успешно:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
);

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab ADD INDEX b_index (b);
Query OK, 0 rows affected (0.009 sec)

И это выполняется успешно:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
);

SET SESSION alter_algorithm='NOCOPY';
CREATE INDEX b_index ON tab (b);
Query OK, 0 rows affected (0.009 sec)

Добавление полнотекстового индекса

InnoDB поддерживает добавление индекса FULLTEXT к таблице с параметром ALGORITHM установленным в NOCOPY.

Однако существуют некоторые ограничения, такие как:

  • Добавление индекса FULLTEXT к таблице, у которой нет столбца, определенного пользователем FTS_DOC_ID, потребует перестроения таблицы. При перестроении система добавляет скрытый столбец FTS_DOC_ID. Эта операция должна быть выполнена с параметром ALGORITHM установленным в INPLACE. После этого, добавление дополнительных индексов FULLTEXT в ту же таблицу не потребует перестроения таблицы, и параметр ALGORITHM может быть установлен в NOCOPY.
  • Одновременно может быть добавлен только один индекс FULLTEXT при установке параметра ALGORITHM в NOCOPY.

Данная операция поддерживает стратегию блокировки для чтения. Эту стратегию можно явно выбрать, установив в предложении LOCK значение SHARED. При использовании этой стратегии разрешается одновременная DML-операция для чтения.

Например, это успешно выполняется, но первая операция требует перестроения таблицы ALGORITHM установленным в INPLACE, чтобы добавить скрытый FTS_DOC_ID столбец:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
);

SET SESSION alter_algorithm='INPLACE';
ALTER TABLE tab ADD FULLTEXT INDEX b_index (b);
Query OK, 0 rows affected (0.043 sec)

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab ADD FULLTEXT INDEX c_index (c);
Query OK, 0 rows affected (0.017 sec)

И эта команда также выполняется успешно, как и предыдущая:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
);

SET SESSION alter_algorithm='INPLACE';
CREATE FULLTEXT INDEX b_index ON tab (b);
Query OK, 0 rows affected (0.048 sec)

SET SESSION alter_algorithm='NOCOPY';
CREATE FULLTEXT INDEX c_index ON tab (c);
Query OK, 0 rows affected (0.016 sec)

Но эта вторая команда завершается ошибкой, потому что одновременно может быть добавлен только один индекс FULLTEXT:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50),
   d varchar(50)
);

SET SESSION alter_algorithm='INPLACE';
ALTER TABLE tab ADD FULLTEXT INDEX b_index (b);
Query OK, 0 rows affected (0.041 sec)

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab ADD FULLTEXT INDEX c_index (c), ADD FULLTEXT INDEX d_index (d);
ERROR 1846 (0A000): ALGORITHM=NOCOPY is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try ALGORITHM=COPY

Добавление пространственного индекса

InnoDB поддерживает добавление пространственного индекса SPATIAL к таблице с параметром ALGORITHM установленным в NOCOPY.

Данная операция поддерживает стратегию блокировки для чтения. Эту стратегию можно явно выбрать, установив в предложении LOCK значение SHARED. При использовании этой стратегии разрешается одновременная DML-операция для чтения.

Например, это успешно выполняется:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c GEOMETRY NOT NULL
);

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab ADD SPATIAL INDEX c_index (c);
Query OK, 0 rows affected (0.005 sec)

И эта команда также выполняется успешно, как и предыдущая:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c GEOMETRY NOT NULL
);

SET SESSION alter_algorithm='NOCOPY';
CREATE SPATIAL INDEX c_index ON tab (c);
Query OK, 0 rows affected (0.005 sec)

ALTER TABLE ... DROP INDEX и DROP INDEX

InnoDB поддерживает удаление индексов из таблицы с параметром ALGORITHM установленным в NOCOPY в тех случаях, когда операция поддерживает установку предложения ALGORITHM со значением INSTANT.

Для получения дополнительной информации см. InnoDB Online DDL Operations with ALGORITHM=INSTANT: ALTER TABLE ... DROP INDEX and DROP INDEX.

Это относится к ALTER TABLE ... DROP INDEX и DROP INDEX для таблиц InnoDB.

Добавление внешнего ключа

InnoDB поддерживает добавление ограничений внешнего ключа к таблице с параметром ALGORITHM установленным в NOCOPY. Для добавления нового ограничения внешнего ключа к таблице с параметром ALGORITHM установленным в NOCOPY, необходимо установить системную переменную foreign_key_checks в значение OFF. Если она установлена в ON, то требуется ALGORITHM=COPY.

Данная операция поддерживает стратегию без блокировки. Эту стратегию можно явно выбрать, установив в предложении LOCK значение NONE. При использовании этой стратегии разрешается любая одновременная DML-операция.

Например, это завершается ошибкой:

CREATE OR REPLACE TABLE tab1 (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50),
   d int
);

CREATE OR REPLACE TABLE tab2 (
   a int PRIMARY KEY,
   b varchar(50)
);

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab1 ADD FOREIGN KEY tab2_fk (d) REFERENCES tab2 (a);
ERROR 1846 (0A000): ALGORITHM=NOCOPY is not supported. Reason: Adding foreign keys needs foreign_key_checks=OFF. Try ALGORITHM=COPY

Но это выполняется успешно:

CREATE OR REPLACE TABLE tab1 (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50),
   d int
);

CREATE OR REPLACE TABLE tab2 (
   a int PRIMARY KEY,
   b varchar(50)
);

SET SESSION foreign_key_checks=OFF;
SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab1 ADD FOREIGN KEY tab2_fk (d) REFERENCES tab2 (a);
Query OK, 0 rows affected (0.011 sec)

Это относится к ALTER TABLE ... ADD FOREIGN KEY для таблиц InnoDB.

Удаление внешнего ключа

InnoDB поддерживает удаление ограничений внешнего ключа из таблицы с параметром ALGORITHM установленным в NOCOPY в тех случаях, когда операция поддерживает установку предложения ALGORITHM со значением INSTANT.

Для получения дополнительной информации см. InnoDB Online DDL Operations with ALGORITHM=INSTANT: ALTER TABLE ... DROP FOREIGN KEY.

Это относится к ALTER TABLE ... DROP FOREIGN KEY для таблиц InnoDB.

Операции над таблицами

Изменение значения AUTO_INCREMENT

InnoDB поддерживает изменение значения AUTO_INCREMENT таблицы с параметром ALGORITHM установленным в NOCOPY в тех случаях, когда операция поддерживает установку предложения ALGORITHM со значением INSTANT.

Для получения дополнительной информации см. InnoDB Online DDL Operations with ALGORITHM=INSTANT: ALTER TABLE ... AUTO_INCREMENT=....

Это относится к ALTER TABLE ... AUTO_INCREMENT=... для таблиц InnoDB.

Формат строк

InnoDB не поддерживает изменение формата строк таблицы с параметром ALGORITHM установленным в NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
) ROW_FORMAT=DYNAMIC;

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab ROW_FORMAT=COMPRESSED;
ERROR 1846 (0A000): ALGORITHM=NOCOPY is not supported. Reason: Changing table options requires the table to be rebuilt. Try ALGORITHM=INPLACE

Это относится к ALTER TABLE ... ROW_FORMAT=... для таблиц InnoDB.

Размер блока ключей

InnoDB не поддерживает изменение размера блока ключей таблицы с параметром ALGORITHM установленным в NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
) ROW_FORMAT=COMPRESSED
  KEY_BLOCK_SIZE=4;

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab KEY_BLOCK_SIZE=2;
ERROR 1846 (0A000): ALGORITHM=NOCOPY is not supported. Reason: Changing table options requires the table to be rebuilt. Try ALGORITHM=INPLACE

Это относится к KEY_BLOCK_SIZE=... для таблиц InnoDB.

ALTER TABLE ... PAGE_COMPRESSED=1 и ALTER TABLE ... PAGE_COMPRESSION_LEVEL=...

В MariaDB 10.3.10 и более поздних версиях InnoDB поддерживает установку значения PAGE_COMPRESSED таблицы в 1 с параметром ALGORITHM установленным в NOCOPY в тех случаях, когда операция поддерживает установку предложения ALGORITHM со значением INSTANT.

InnoDB не поддерживает изменение значения PAGE_COMPRESSED таблицы со значением 1 на 0 с параметром ALGORITHM установленным в NOCOPY.

В этих версиях InnoDB также поддерживает изменение значения PAGE_COMPRESSION_LEVEL таблицы с параметром ALGORITHM установленным в NOCOPY в тех случаях, когда операция поддерживает установку предложения ALGORITHM со значением INSTANT.

Для получения дополнительной информации см. InnoDB Online DDL Operations with ALGORITHM=INSTANT: ALTER TABLE ... PAGE_COMPRESSED=1 and ALTER TABLE ... PAGE_COMPRESSION_LEVEL=....

Это относится к ALTER TABLE ... PAGE_COMPRESSED=... и ALTER TABLE ... PAGE_COMPRESSION_LEVEL=... для таблиц InnoDB.

Удаление системного верифицирования

InnoDB не поддерживает удаление системного верифицирования из таблицы с параметром ALGORITHM установленным в NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
) WITH SYSTEM VERSIONING;

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab DROP SYSTEM VERSIONING;
ERROR 1845 (0A000): ALGORITHM=NOCOPY is not supported for this operation. Try ALGORITHM=INPLACE

Это относится к ALTER TABLE ... DROP SYSTEM VERSIONING для таблиц InnoDB.

Удаление ограничения

В MariaDB 10.3.6 и более поздних версиях InnoDB поддерживает удаление ограничения CHECK из таблицы с параметром ALGORITHM установленным в NOCOPY в тех случаях, когда операция поддерживает установку предложения ALGORITHM со значением INSTANT.

Для получения дополнительной информации см. InnoDB Online DDL Operations with ALGORITHM=INSTANT: ALTER TABLE ... DROP CONSTRAINT.

Это относится к ALTER TABLE ... DROP CONSTRAINT для таблиц InnoDB.

Принудительное перестроение

InnoDB не поддерживает принудительное перестроение таблицы с параметром ALGORITHM установленным в NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
);

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab FORCE;
ERROR 1845 (0A000): ALGORITHM=NOCOPY is not supported for this operation. Try ALGORITHM=INPLACE

Это относится к ALTER TABLE ... FORCE для таблиц InnoDB.

Использование движка InnoDB

InnoDB не поддерживает принудительное перестроение таблицы с параметром ALGORITHM установленным в NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
);

SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab ENGINE=InnoDB;
ERROR 1845 (0A000): ALGORITHM=NOCOPY is not supported for this operation. Try ALGORITHM=INPLACE

Это относится к ALTER TABLE ... ENGINE=InnoDB для таблиц InnoDB.

Оптимизация таблицы

InnoDB не поддерживает оптимизацию таблицы с параметром ALGORITHM установленным в NOCOPY.

Например:

CREATE OR REPLACE TABLE tab (
   a int PRIMARY KEY,
   b varchar(50),
   c varchar(50)
);

SHOW GLOBAL VARIABLES WHERE Variable_name IN('innodb_defragment', 'innodb_optimize_fulltext_only');
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| innodb_defragment             | OFF   |
| innodb_optimize_fulltext_only | OFF   |
+-------------------------------+-------+
2 rows in set (0.001 sec)

SET SESSION alter_algorithm='NOCOPY';
OPTIMIZE TABLE tab;
+---------+----------+----------+-----------------------------------------------------------------------------+
| Table   | Op       | Msg_type | Msg_text                                                                    |
+---------+----------+----------+-----------------------------------------------------------------------------+
| db1.tab | optimize | note     | Table does not support optimize, doing recreate + analyze instead           |
| db1.tab | optimize | error    | ALGORITHM=NOCOPY is not supported for this operation. Try ALGORITHM=INPLACE |
| db1.tab | optimize | status   | Operation failed                                                            |
+---------+----------+----------+-----------------------------------------------------------------------------+
3 rows in set, 1 warning (0.002 sec)

Это относится к ОПТИМИЗАЦИИ ТАБЛИЦЫ для таблиц InnoDB.

ALTER TABLE ... RENAME TO и RENAME TABLE ...

InnoDB поддерживает переименование таблицы с АЛГОРИТМОМ, установленным в NOCOPY, в тех случаях, когда операция поддерживает установку АЛГОРИТМА в значение INSTANT.

Дополнительную информацию см. в разделе InnoDB Онлайн DDL-операции с ALGORITHM=INSTANT: ALTER TABLE ... RENAME TO и RENAME TABLE ....

Это относится к ALTER TABLE ... RENAME TO и RENAME TABLE для таблиц InnoDB.

Ограничения

Ограничения, связанные с сгенерированными (виртуальными и постоянными/хранимыми) столбцами

Сгенерированные столбцы в настоящее время не поддерживают онлайн DDL для всех тех же операций, что и для «реальных» столбцов.

Дополнительную информацию об ограничениях см. в разделе Сгенерированные (виртуальные и постоянные/хранимые) столбцы: Поддержка операторов.

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

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/innodb-online-ddl-operations-with-algorithmnocopy/

Spec-Zone.ru

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