mirror of
https://github.com/MariaDB/server.git
synced 2025-11-30 05:23:50 +03:00
This is a complete rewrite of DROP TABLE, also as part of other DDL, such as ALTER TABLE, CREATE TABLE...SELECT, TRUNCATE TABLE. The background DROP TABLE queue hack is removed. If a transaction needs to drop and create a table by the same name (like TRUNCATE TABLE does), it must first rename the table to an internal #sql-ib name. No committed version of the data dictionary will include any #sql-ib tables, because whenever a transaction renames a table to a #sql-ib name, it will also drop that table. Either the rename will be rolled back, or the drop will be committed. Data files will be unlinked after the transaction has been committed and a FILE_RENAME record has been durably written. The file will actually be deleted when the detached file handle returned by fil_delete_tablespace() will be closed, after the latches have been released. It is possible that a purge of the delete of the SYS_INDEXES record for the clustered index will execute fil_delete_tablespace() concurrently with the DDL transaction. In that case, the thread that arrives later will wait for the other thread to finish. HTON_TRUNCATE_REQUIRES_EXCLUSIVE_USE: A new handler flag. ha_innobase::truncate() now requires that all other references to the table be released in advance. This was implemented by Monty. ha_innobase::delete_table(): If CREATE TABLE..SELECT is detected, we will "hijack" the current transaction, drop the table in the current transaction and commit the current transaction. This essentially fixes MDEV-21602. There is a FIXME comment about making the check less failure-prone. ha_innobase::truncate(), ha_innobase::delete_table(): Implement a fast path for temporary tables. We will no longer allow temporary tables to use the adaptive hash index. dict_table_t::mdl_name: The original table name for the purpose of acquiring MDL in purge, to prevent a race condition between a DDL transaction that is dropping a table, and purge processing undo log records of DML that had executed before the DDL operation. For #sql-backup- tables during ALTER TABLE...ALGORITHM=COPY, the dict_table_t::mdl_name will differ from dict_table_t::name. dict_table_t::parse_name(): Use mdl_name instead of name. dict_table_rename_in_cache(): Update mdl_name. For the internal FTS_ tables of FULLTEXT INDEX, purge would acquire MDL on the FTS_ table name, but not on the main table, and therefore it would be able to run concurrently with a DDL transaction that is dropping the table. Previously, the DROP TABLE queue hack prevented a race between purge and DDL. For now, we introduce purge_sys.stop_FTS() to prevent purge from opening any table, while a DDL transaction that may drop FTS_ tables is in progress. The function fts_lock_table(), which will be invoked before the dictionary is locked, will wait for purge to release any table handles. trx_t::drop_table_statistics(): Drop statistics for the table. This replaces dict_stats_drop_index(). We will drop or rename persistent statistics atomically as part of DDL transactions. On lock conflict for dropping statistics, we will fail instantly with DB_LOCK_WAIT_TIMEOUT, because we will be holding the exclusive data dictionary latch. trx_t::commit_cleanup(): Separated from trx_t::commit_in_memory(). Relax an assertion around fts_commit() and allow DB_LOCK_WAIT_TIMEOUT in addition to DB_DUPLICATE_KEY. The call to fts_commit() is entirely misplaced here and may obviously break the consistency of transactions that affect FULLTEXT INDEX. It needs to be fixed separately. dict_table_t::n_foreign_key_checks_running: Remove (MDEV-21175). The counter was a work-around for missing meta-data locking (MDL) on the SQL layer, and not really needed in MariaDB. ER_TABLE_IN_FK_CHECK: Replaced with ER_UNUSED_28. HA_ERR_TABLE_IN_FK_CHECK: Remove. row_ins_check_foreign_constraints(): Do not acquire dict_sys.latch either. The SQL-layer MDL will protect us. This was reviewed by Thirunarayanan Balathandayuthapani and tested by Matthias Leich.
456 lines
17 KiB
Plaintext
456 lines
17 KiB
Plaintext
call mtr.add_suppression("InnoDB: Warning: Small buffer pool size");
|
|
call mtr.add_suppression("InnoDB: Error: table 'test/t1'");
|
|
call mtr.add_suppression("MariaDB is trying to open a table handle but the .ibd file for");
|
|
SET @global_innodb_file_per_table_orig = @@global.innodb_file_per_table;
|
|
SET GLOBAL innodb_file_per_table = on;
|
|
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL, c3 CHAR(255) NOT NULL)
|
|
ENGINE = InnoDB;
|
|
INSERT INTO t1 VALUES (1,1,''), (2,2,''), (3,3,''), (4,4,''), (5,5,'');
|
|
SET GLOBAL innodb_monitor_enable = module_ddl;
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 0
|
|
ddl_pending_alter_table 0
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 0
|
|
SET DEBUG_SYNC = 'RESET';
|
|
SET DEBUG_SYNC = 'write_row_noreplace SIGNAL have_handle WAIT_FOR go_ahead';
|
|
INSERT INTO t1 VALUES(1,2,3);
|
|
connect con1,localhost,root,,;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR have_handle';
|
|
SET lock_wait_timeout = 1;
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
|
|
connection default;
|
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 0
|
|
ddl_pending_alter_table 0
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 0
|
|
connection con1;
|
|
SET @saved_debug_dbug = @@SESSION.debug_dbug;
|
|
SET DEBUG_DBUG = '+d,innodb_OOM_prepare_inplace_alter';
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE;
|
|
ERROR HY000: Out of memory.
|
|
SET SESSION DEBUG = @saved_debug_dbug;
|
|
Warnings:
|
|
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead
|
|
SET SESSION DEBUG = '+d,innodb_OOM_inplace_alter';
|
|
Warnings:
|
|
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE;
|
|
ERROR HY000: Out of memory.
|
|
SET SESSION DEBUG = @saved_debug_dbug;
|
|
Warnings:
|
|
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE;
|
|
connection default;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL,
|
|
`c2` int(11) NOT NULL,
|
|
`c3` char(255) NOT NULL,
|
|
PRIMARY KEY (`c1`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(7,4,2);
|
|
connection con1;
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR insert_done';
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2);
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
connection default;
|
|
COMMIT;
|
|
connection con1;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2);
|
|
ERROR 23000: Duplicate entry '4' for key 'c2'
|
|
connection default;
|
|
DELETE FROM t1 WHERE c1 = 7;
|
|
connection con1;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2), ROW_FORMAT=COMPACT,
|
|
LOCK = SHARED, ALGORITHM = INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE INDEX(c2),
|
|
LOCK = EXCLUSIVE, ALGORITHM = INPLACE;
|
|
Warnings:
|
|
Note 1831 Duplicate index `c2_2`. This is deprecated and will be disallowed in a future release
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL,
|
|
`c2` int(11) NOT NULL,
|
|
`c3` char(255) NOT NULL,
|
|
UNIQUE KEY `c2` (`c2`),
|
|
UNIQUE KEY `c2_2` (`c2`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
ALTER TABLE t1 DROP INDEX c2, ADD PRIMARY KEY(c1);
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR scanned';
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 1
|
|
ddl_pending_alter_table 1
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 0
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(4,7,2);
|
|
SET DEBUG_SYNC = 'now SIGNAL insert_done';
|
|
connection con1;
|
|
ERROR 23000: Duplicate entry '4' for key 'PRIMARY'
|
|
connection default;
|
|
ROLLBACK;
|
|
connection con1;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL,
|
|
`c2` int(11) NOT NULL,
|
|
`c3` char(255) NOT NULL,
|
|
UNIQUE KEY `c2` (`c2`),
|
|
UNIQUE KEY `c2_2` (`c2`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2), ALGORITHM = INPLACE;
|
|
ERROR 42000: Can't DROP INDEX `PRIMARY`; check that it exists
|
|
ALTER TABLE t1 DROP INDEX c2, ADD PRIMARY KEY(c1), ALGORITHM = INPLACE;
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 0
|
|
ddl_pending_alter_table 0
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 0
|
|
connection default;
|
|
INSERT INTO t1 VALUES(6,3,1);
|
|
ERROR 23000: Duplicate entry '3' for key 'c2_2'
|
|
INSERT INTO t1 VALUES(7,4,2);
|
|
ERROR 23000: Duplicate entry '4' for key 'c2_2'
|
|
DROP INDEX c2_2 ON t1;
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(7,4,2);
|
|
ROLLBACK;
|
|
connection con1;
|
|
KILL QUERY @id;
|
|
ERROR 70100: Query execution was interrupted
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR dml_done';
|
|
SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL applied WAIT_FOR kill_done';
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR rebuilt';
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 1
|
|
ddl_pending_alter_table 1
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 0
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(7,4,2);
|
|
ROLLBACK;
|
|
SET DEBUG_SYNC = 'now SIGNAL dml_done WAIT_FOR applied';
|
|
KILL QUERY @id;
|
|
SET DEBUG_SYNC = 'now SIGNAL kill_done';
|
|
connection con1;
|
|
ERROR 70100: Query execution was interrupted
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 0
|
|
ddl_pending_alter_table 0
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 0
|
|
connection default;
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1 SELECT 5 + c1, c2, c3 FROM t1;
|
|
INSERT INTO t1 SELECT 10 + c1, c2, c3 FROM t1;
|
|
INSERT INTO t1 SELECT 20 + c1, c2, c3 FROM t1;
|
|
INSERT INTO t1 SELECT 40 + c1, c2, c3 FROM t1;
|
|
EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3;
|
|
id select_type table type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL ROWS Using where
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status Engine-independent statistics collected
|
|
test.t1 analyze status OK
|
|
SET @merge_encrypt_0=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
|
SET @merge_decrypt_0=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
|
SET @rowlog_encrypt_0=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
|
connection con1;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL,
|
|
`c2` int(11) NOT NULL,
|
|
`c3` char(255) NOT NULL,
|
|
PRIMARY KEY (`c1`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt2 WAIT_FOR dml2_done';
|
|
SET lock_wait_timeout = 10;
|
|
ALTER TABLE t1 ROW_FORMAT=COMPACT
|
|
PAGE_COMPRESSED = YES PAGE_COMPRESSION_LEVEL = 1, ALGORITHM = INPLACE;
|
|
connection default;
|
|
INSERT INTO t1 SELECT 80 + c1, c2, c3 FROM t1;
|
|
INSERT INTO t1 SELECT 160 + c1, c2, c3 FROM t1;
|
|
UPDATE t1 SET c2 = c2 + 1;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR rebuilt2';
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 1
|
|
ddl_pending_alter_table 1
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 1
|
|
BEGIN;
|
|
DELETE FROM t1;
|
|
ROLLBACK;
|
|
UPDATE t1 SET c2 = c2 + 1;
|
|
BEGIN;
|
|
UPDATE t1 SET c2 = c2 + 1;
|
|
DELETE FROM t1;
|
|
ROLLBACK;
|
|
BEGIN;
|
|
DELETE FROM t1;
|
|
ROLLBACK;
|
|
UPDATE t1 SET c2 = c2 + 1;
|
|
BEGIN;
|
|
UPDATE t1 SET c2 = c2 + 1;
|
|
DELETE FROM t1;
|
|
ROLLBACK;
|
|
BEGIN;
|
|
DELETE FROM t1;
|
|
ROLLBACK;
|
|
UPDATE t1 SET c2 = c2 + 1;
|
|
BEGIN;
|
|
UPDATE t1 SET c2 = c2 + 1;
|
|
DELETE FROM t1;
|
|
ROLLBACK;
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 1
|
|
ddl_pending_alter_table 1
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 1
|
|
SET @merge_encrypt_1=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
|
SET @merge_decrypt_1=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
|
SET @rowlog_encrypt_1=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
|
SELECT
|
|
(@merge_encrypt_1-@merge_encrypt_0)-
|
|
(@merge_decrypt_1-@merge_decrypt_0) as sort_balance,
|
|
@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0,
|
|
@rowlog_encrypt_1>@rowlog_encrypt_0;
|
|
sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0
|
|
0 0 0 0
|
|
SET DEBUG_SYNC = 'now SIGNAL dml2_done';
|
|
connection con1;
|
|
ERROR HY000: Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 0
|
|
ddl_pending_alter_table 0
|
|
ddl_sort_file_alter_table 0
|
|
ddl_log_file_alter_table 1
|
|
SET @merge_encrypt_1=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
|
SET @merge_decrypt_1=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
|
SET @rowlog_encrypt_1=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
|
SET @rowlog_decrypt_1=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt3 WAIT_FOR dml3_done';
|
|
ALTER TABLE t1 ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT;
|
|
ERROR 42000: Multiple primary key defined
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT;
|
|
ERROR 23000: Duplicate entry '5' for key 'PRIMARY'
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c22f,c1,c4(5)),
|
|
CHANGE c2 c22f INT, CHANGE c3 c3 CHAR(255) NULL, CHANGE c1 c1 INT AFTER c22f,
|
|
ADD COLUMN c4 VARCHAR(6) DEFAULT 'Online', LOCK=NONE;
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR rebuilt3';
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 1
|
|
ddl_pending_alter_table 1
|
|
ddl_sort_file_alter_table 2
|
|
ddl_log_file_alter_table 1
|
|
BEGIN;
|
|
INSERT INTO t1 SELECT 320 + c1, c2, c3 FROM t1 WHERE c1 > 240;
|
|
DELETE FROM t1 WHERE c1 > 320;
|
|
ROLLBACK;
|
|
BEGIN;
|
|
UPDATE t1 SET c2 = c2 + 1;
|
|
DELETE FROM t1;
|
|
ROLLBACK;
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 1
|
|
ddl_pending_alter_table 1
|
|
ddl_sort_file_alter_table 2
|
|
ddl_log_file_alter_table 2
|
|
SET DEBUG_SYNC = 'now SIGNAL dml3_done';
|
|
connection con1;
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 0
|
|
ddl_pending_alter_table 0
|
|
ddl_sort_file_alter_table 2
|
|
ddl_log_file_alter_table 2
|
|
SELECT COUNT(c22f) FROM t1;
|
|
COUNT(c22f)
|
|
320
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
SET @merge_encrypt_2=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
|
SET @merge_decrypt_2=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
|
SET @rowlog_encrypt_2=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
|
SET @rowlog_decrypt_2=
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
|
SELECT
|
|
(@merge_encrypt_2-@merge_encrypt_1)-
|
|
(@merge_decrypt_2-@merge_decrypt_1) as sort_balance,
|
|
(@rowlog_encrypt_2-@rowlog_encrypt_1)-
|
|
(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance;
|
|
sort_balance log_balance
|
|
0 0
|
|
SELECT
|
|
@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted,
|
|
@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted,
|
|
@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted,
|
|
@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted;
|
|
sort_encrypted sort_decrypted log_encrypted log_decrypted
|
|
0 0 0 0
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5));
|
|
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
|
UPDATE t1 SET c3 = NULL WHERE c3 = '';
|
|
SET lock_wait_timeout = 1;
|
|
ALTER TABLE t1 DROP COLUMN c22f, ADD PRIMARY KEY c3p5(c3(5));
|
|
ERROR 42000: Key column 'c22f' doesn't exist in table
|
|
ALTER IGNORE TABLE t1 DROP COLUMN c22f, DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5)),
|
|
ALGORITHM = INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows. Try ALGORITHM=COPY
|
|
UPDATE t1 SET c3=LEFT(CONCAT(c1,REPEAT('foo',c1)),255) WHERE c3 IS NULL;
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created0 WAIT_FOR ins_done0';
|
|
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL, DROP COLUMN c22f,
|
|
DROP PRIMARY KEY, ADD PRIMARY KEY(c1,c4(5)),
|
|
ADD COLUMN c5 CHAR(5) DEFAULT 'tired' FIRST;
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created0';
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(347,33101,'Pikku kakkosen posti','YLETV2');
|
|
INSERT INTO t1 VALUES(33101,347,NULL,'');
|
|
SET DEBUG_SYNC = 'now SIGNAL ins_done0';
|
|
connection con1;
|
|
ERROR 01000: Data truncated for column 'c3' at row 323
|
|
connection default;
|
|
ROLLBACK;
|
|
connection con1;
|
|
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL;
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created WAIT_FOR ins_done';
|
|
ALTER TABLE t1 DROP PRIMARY KEY, DROP COLUMN c22f,
|
|
ADD COLUMN c6 VARCHAR(1000) DEFAULT
|
|
'I love tracking down hard-to-reproduce bugs.',
|
|
ADD PRIMARY KEY c3p5(c3(5), c6(2));
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created';
|
|
SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL ins_done WAIT_FOR ddl_timed_out';
|
|
INSERT INTO t1 VALUES(347,33101,NULL,'');
|
|
ERROR 23000: Column 'c3' cannot be null
|
|
INSERT INTO t1 VALUES(347,33101,'Pikku kakkosen posti','');
|
|
connection con1;
|
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|
SET DEBUG_SYNC = 'now SIGNAL ddl_timed_out';
|
|
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
|
name count
|
|
ddl_background_drop_indexes 0
|
|
ddl_online_create_index 0
|
|
ddl_pending_alter_table 0
|
|
ddl_sort_file_alter_table 6
|
|
ddl_log_file_alter_table 2
|
|
connection default;
|
|
SELECT COUNT(*) FROM t1;
|
|
COUNT(*)
|
|
321
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c22f c1 c3 c4
|
|
5 1 1foo Online
|
|
5 6 6foofoofoofoofoofoo Online
|
|
5 11 11foofoofoofoofoofoofoofoofoofoofoo Online
|
|
5 16 16foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo Online
|
|
5 21 21foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo Online
|
|
5 26 26foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo Online
|
|
5 31 31foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo Online
|
|
5 36 36foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo Online
|
|
5 41 41foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo Online
|
|
5 46 46foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo Online
|
|
connection con1;
|
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
|
connection default;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c22f` int(11) NOT NULL,
|
|
`c1` int(11) NOT NULL,
|
|
`c3` char(255) NOT NULL,
|
|
`c4` varchar(6) NOT NULL DEFAULT 'Online',
|
|
PRIMARY KEY (`c22f`,`c1`,`c4`(5))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
|
SET GLOBAL innodb_monitor_disable = module_ddl;
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b blob) ENGINE=InnoDB;
|
|
connection con1;
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL created WAIT_FOR ins';
|
|
ALTER TABLE t1 FORCE;
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR created';
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1, repeat('a', 10000));
|
|
ROLLBACK;
|
|
SET DEBUG_SYNC = 'now SIGNAL ins';
|
|
connection con1;
|
|
disconnect con1;
|
|
connection default;
|
|
SELECT * FROM t1;
|
|
a b
|
|
DROP TABLE t1;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
SET GLOBAL innodb_file_per_table = @global_innodb_file_per_table_orig;
|
|
SET GLOBAL innodb_monitor_enable = default;
|
|
SET GLOBAL innodb_monitor_disable = default;
|