mirror of
https://github.com/MariaDB/server.git
synced 2025-11-30 05:23:50 +03:00
MDEV-19747: Deprecate and ignore innodb_log_optimize_ddl
During native table rebuild or index creation, InnoDB used to skip redo logging and write MLOG_INDEX_LOAD records to inform crash recovery and Mariabackup of the gaps in redo log. This is fragile and prohibits some optimizations, such as skipping the doublewrite buffer for newly (re)initialized pages (MDEV-19738). row_merge_write_redo(): Remove. We do not write MLOG_INDEX_LOAD records any more. Instead, we write full redo log. FlushObserver: Remove. fseg_free_page_func(): Remove the parameter log. Redo logging cannot be disabled. fil_space_t::redo_skipped_count: Remove. We cannot remove buf_block_t::skip_flush_check, because PageBulk will temporarily generate invalid B-tree pages in the buffer pool.
This commit is contained in:
@@ -1,54 +0,0 @@
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
SET @saved_dbug= @@SESSION.debug_dbug;
|
||||
SET debug_dbug='+d,ib_index_build_fail_before_flush';
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
CREATE FULLTEXT INDEX fidx_title ON t1(title);
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
ALTER TABLE t1 ADD COLUMN content TEXT, FORCE;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SET debug_dbug= @saved_dbug;
|
||||
INSERT INTO t1 VALUES(10001, 10001, 'a10000');
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_title(title);
|
||||
ERROR 23000: Duplicate entry 'a10000' for key 'idx_title'
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_id(id), ADD UNIQUE INDEX idx_title(title);
|
||||
ERROR 23000: Duplicate entry 'a10000' for key 'idx_title'
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
||||
@@ -13,7 +13,7 @@ ALTER TABLE t1 DROP INDEX b, ADD INDEX (b), LOCK=SHARED;
|
||||
# Kill the server
|
||||
# restart: --debug=d,ib_log
|
||||
FOUND 2 /scan \d+: multi-log rec MLOG_FILE_CREATE2 len \d+ page \d+:0/ in mysqld.1.err
|
||||
FOUND 3 /scan \d+: log rec MLOG_INDEX_LOAD/ in mysqld.1.err
|
||||
NOT FOUND /scan \d+: log rec MLOG_INDEX_LOAD/ in mysqld.1.err
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
#
|
||||
# Test flush on error in bulk load to make sure we do a proper cleanup.
|
||||
# Note: We flush all dirty pages before applying any online log in bulk load.
|
||||
#
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_debug.inc
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
SET @saved_dbug= @@SESSION.debug_dbug;
|
||||
SET debug_dbug='+d,ib_index_build_fail_before_flush';
|
||||
|
||||
-- error ER_QUERY_INTERRUPTED
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_QUERY_INTERRUPTED
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_QUERY_INTERRUPTED
|
||||
CREATE FULLTEXT INDEX fidx_title ON t1(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_QUERY_INTERRUPTED
|
||||
ALTER TABLE t1 ADD COLUMN content TEXT, FORCE;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SET debug_dbug= @saved_dbug;
|
||||
|
||||
INSERT INTO t1 VALUES(10001, 10001, 'a10000');
|
||||
|
||||
-- error ER_DUP_ENTRY
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_title(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_DUP_ENTRY
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_id(id), ADD UNIQUE INDEX idx_title(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
||||
@@ -30,11 +30,10 @@ ALTER TABLE t1 DROP INDEX b, ADD INDEX (b), LOCK=SHARED;
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
||||
let SEARCH_ABORT=NOT FOUND;
|
||||
# ensure that we have exactly 2 records there.
|
||||
let SEARCH_PATTERN=scan \d+: multi-log rec MLOG_FILE_CREATE2 len \d+ page \d+:0;
|
||||
--source include/search_pattern_in_file.inc
|
||||
# ensure that we have exactly 3 records there.
|
||||
# ensure that we have 0 records there.
|
||||
let SEARCH_PATTERN=scan \d+: log rec MLOG_INDEX_LOAD;
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
|
||||
Reference in New Issue
Block a user