1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-13134 Introduce ALTER TABLE attributes ALGORITHM=NOCOPY and ALGORITHM=INSTANT

Introduced new alter algorithm type called NOCOPY & INSTANT for
inplace alter operation.

NOCOPY - Algorithm refuses any alter operation that would
rebuild the clustered index. It is a subset of INPLACE algorithm.

INSTANT - Algorithm allow any alter operation that would
modify only meta data. It is a subset of NOCOPY algorithm.

Introduce new variable called alter_algorithm. The values are
DEFAULT(0), COPY(1), INPLACE(2), NOCOPY(3), INSTANT(4)

Message to deprecate old_alter_table variable and make it alias
for alter_algorithm variable.

alter_algorithm variable for slave is always set to default.
This commit is contained in:
Thirunarayanan Balathandayuthapani
2018-05-07 14:54:58 +05:30
parent a0bc3b7eee
commit 85cc6b70bd
44 changed files with 1337 additions and 342 deletions

View File

@ -1,45 +1,105 @@
SET @start_global_value = @@global.old_alter_table;
SELECT @start_global_value;
@start_global_value
0
DEFAULT
select @@global.old_alter_table;
@@global.old_alter_table
0
DEFAULT
select @@session.old_alter_table;
@@session.old_alter_table
0
DEFAULT
show global variables like 'old_alter_table';
Variable_name Value
old_alter_table OFF
old_alter_table DEFAULT
show session variables like 'old_alter_table';
Variable_name Value
old_alter_table OFF
old_alter_table DEFAULT
select * from information_schema.global_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE OFF
OLD_ALTER_TABLE DEFAULT
select * from information_schema.session_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE OFF
OLD_ALTER_TABLE DEFAULT
set global old_alter_table=1;
set session old_alter_table=ON;
set session old_alter_table=1;
select @@global.old_alter_table;
@@global.old_alter_table
1
COPY
select @@session.old_alter_table;
@@session.old_alter_table
1
COPY
show global variables like 'old_alter_table';
Variable_name Value
old_alter_table ON
old_alter_table COPY
show session variables like 'old_alter_table';
Variable_name Value
old_alter_table ON
old_alter_table COPY
select * from information_schema.global_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE ON
OLD_ALTER_TABLE COPY
select * from information_schema.session_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE ON
OLD_ALTER_TABLE COPY
set global old_alter_table=2;
set session old_alter_table=2;
select @@global.old_alter_table;
@@global.old_alter_table
INPLACE
select @@session.old_alter_table;
@@session.old_alter_table
INPLACE
show global variables like 'old_alter_table';
Variable_name Value
old_alter_table INPLACE
show session variables like 'old_alter_table';
Variable_name Value
old_alter_table INPLACE
select * from information_schema.global_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE INPLACE
select * from information_schema.session_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE INPLACE
set global old_alter_table=3;
set session old_alter_table=3;
select @@global.old_alter_table;
@@global.old_alter_table
NOCOPY
select @@session.old_alter_table;
@@session.old_alter_table
NOCOPY
show global variables like 'old_alter_table';
Variable_name Value
old_alter_table NOCOPY
show session variables like 'old_alter_table';
Variable_name Value
old_alter_table NOCOPY
select * from information_schema.global_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE NOCOPY
select * from information_schema.session_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE NOCOPY
set global old_alter_table=4;
set session old_alter_table=4;
select @@global.old_alter_table;
@@global.old_alter_table
INSTANT
select @@session.old_alter_table;
@@session.old_alter_table
INSTANT
show global variables like 'old_alter_table';
Variable_name Value
old_alter_table INSTANT
show session variables like 'old_alter_table';
Variable_name Value
old_alter_table INSTANT
select * from information_schema.global_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE INSTANT
select * from information_schema.session_variables where variable_name='old_alter_table';
VARIABLE_NAME VARIABLE_VALUE
OLD_ALTER_TABLE INSTANT
set global old_alter_table=1.1;
ERROR 42000: Incorrect argument type to variable 'old_alter_table'
set global old_alter_table=1e1;
@ -49,4 +109,4 @@ ERROR 42000: Variable 'old_alter_table' can't be set to the value of 'foo'
SET @@global.old_alter_table = @start_global_value;
SELECT @@global.old_alter_table;
@@global.old_alter_table
0
DEFAULT