mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-14219 Allow online table rebuild when encryption or compression parameters change
When MariaDB 10.1.0 introduced table options for encryption and compression, it unnecessarily changed ha_innobase::check_if_supported_inplace_alter() so that ALGORITHM=COPY is forced when these parameters differ. A better solution is to move the check to innobase_need_rebuild(). In that way, the ALGORITHM=INPLACE interface (yes, the syntax is very misleading) can be used for rebuilding the table much more efficiently, with merge sort, with no undo logging, and allowing concurrent DML operations.
This commit is contained in:
@ -14,6 +14,9 @@ call mtr.add_suppression("MySQL is trying to open a table handle but the .ibd fi
|
||||
# DISCARD TABLESPACE needs file-per-table
|
||||
SET @global_innodb_file_per_table_orig = @@global.innodb_file_per_table;
|
||||
SET GLOBAL innodb_file_per_table = on;
|
||||
# PAGE_COMPRESSED needs innodb_file_format!=Antelope
|
||||
SET @file_format = @@GLOBAL.innodb_file_format;
|
||||
SET GLOBAL innodb_file_format = Barracuda;
|
||||
|
||||
# Save the initial number of concurrent sessions.
|
||||
--source include/count_sessions.inc
|
||||
@ -215,7 +218,8 @@ SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt2 WAIT_FOR dml2_done
|
||||
# Ensure that the ALTER TABLE will be executed even with some concurrent DML.
|
||||
SET lock_wait_timeout = 10;
|
||||
--send
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT, ALGORITHM = INPLACE;
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT
|
||||
PAGE_COMPRESSED = YES PAGE_COMPRESSION_LEVEL = 1, ALGORITHM = INPLACE;
|
||||
|
||||
# Generate some log (delete-mark, delete-unmark, insert etc.)
|
||||
# while the index creation is blocked. Some of this may run
|
||||
@ -443,6 +447,7 @@ DROP TABLE t1;
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
SET GLOBAL innodb_file_per_table = @global_innodb_file_per_table_orig;
|
||||
SET GLOBAL innodb_file_format = @file_format;
|
||||
--disable_warnings
|
||||
SET GLOBAL innodb_monitor_enable = default;
|
||||
SET GLOBAL innodb_monitor_disable = default;
|
||||
|
Reference in New Issue
Block a user