1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

Merge branch '12.0' into 12.1

This commit is contained in:
Sergei Golubchik
2025-06-05 12:00:59 +02:00
451 changed files with 15009 additions and 6955 deletions

View File

@@ -92,3 +92,24 @@ INSERT INTO t1 VALUES
ALTER TABLE t1 FORCE, ALGORITHM=COPY;
DROP TABLE t1;
SET GLOBAL innodb_stats_persistent=@default_stats_persistent;
#
# MDEV-36504 Memory leak after insert into empty table
#
CREATE TABLE t1 (k INT PRIMARY KEY)ENGINE=InnoDB;
INSERT INTO t1 SET k= 1;
START TRANSACTION;
INSERT INTO t1 SET k= 2;
SELECT COUNT(*) > 0 FROM mysql.innodb_index_stats LOCK IN SHARE MODE;
COUNT(*) > 0
1
connect con1,localhost,root,,,;
SET innodb_lock_wait_timeout=0;
CREATE TABLE t2(f1 INT DEFAULT 1 PRIMARY KEY)
STATS_PERSISTENT= 1 ENGINE=InnoDB as SELECT k FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
disconnect con1;
connection default;
SET innodb_lock_wait_timeout=default;
DROP TABLE t1;
DROP TABLE IF EXISTS t2;
# restart

View File

@@ -155,7 +155,6 @@ INSERT INTO parent SET a=0;
FLUSH TABLES;
# restart
disconnect incomplete;
SET @save_stats_persistent = @@GLOBAL.innodb_stats_persistent;
SET GLOBAL innodb_stats_persistent = 0;
INSERT INTO child SET a=0;
INSERT INTO child SET a=1;
@@ -1186,6 +1185,25 @@ ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fail
ALTER TABLE t2 ADD KEY(b), ALGORITHM=NOCOPY;
DELETE FROM t1;
DROP TABLE t2, t1;
#
# MDEV-33167 ASAN errors after failing to load foreign key
# relation for the table
#
call mtr.add_suppression("InnoDB: Load table `test`.`t3` failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again.");
SET STATEMENT FOREIGN_KEY_CHECKS = 0 FOR
CREATE TABLE t1(f1 VARCHAR(8),
FOREIGN KEY(f1) REFERENCES test.t3(f1))ENGINE=InnoDB;
SET STATEMENT FOREIGN_KEY_CHECKS = 0 FOR
CREATE TABLE t2(f1 VARCHAR(8),
FOREIGN KEY(f1) REFERENCES test.t3(f1))
ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
SET STATEMENT FOREIGN_KEY_CHECKS = 0 FOR
CREATE TABLE t3(f1 VARCHAR(8) PRIMARY KEY)
ENGINE=InnoDB DEFAULT CHARSET=latin1;
set GLOBAL innodb_fast_shutdown=0;
# restart
ALTER TABLE t2 FORCE;
DROP TABLE t2, t1, t3;
# End of 10.6 tests
CREATE TABLE t1
(
@@ -1208,5 +1226,4 @@ ALTER TABLE t2 ADD FOREIGN KEY (f2) REFERENCES t2 (f2),
ADD UNIQUE INDEX(f3);
ERROR HY000: Cannot delete rows from table which is parent in a foreign key constraint 't1_ibfk_1' of table 't1'
drop table t1, t2;
SET GLOBAL innodb_stats_persistent = @save_stats_persistent;
# End of 10.11 tests

View File

@@ -12,12 +12,19 @@ select @@innodb_buffer_pool_size;
10485760
create table t1 (id int primary key, val int not null)
ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
create table t2 (id int primary key, val int not null)
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=$kbs;
SET STATEMENT foreign_key_checks=0, unique_checks=0 FOR
INSERT INTO t1 SELECT seq*4,seq*4 FROM seq_1_to_262144;
SET STATEMENT foreign_key_checks=0, unique_checks=0 FOR
INSERT INTO t2 SELECT seq*4,seq*4 FROM seq_1_to_16384;
set global innodb_buffer_pool_size = 7340032;
select count(val) from t1;
count(val)
262144
select count(val) from t2;
count(val)
16384
set global innodb_adaptive_hash_index=OFF;
set global innodb_buffer_pool_size = 24117248;
set global innodb_buffer_pool_size = 26214400;
@@ -29,7 +36,10 @@ select @@innodb_buffer_pool_size;
select count(val) from t1;
count(val)
262144
drop table t1;
select count(val) from t2;
count(val)
16384
drop table t1,t2;
SET GLOBAL innodb_max_purge_lag_wait = 0;
SET @save_pct= @@GLOBAL.innodb_max_dirty_pages_pct;
SET @save_pct_lwm= @@GLOBAL.innodb_max_dirty_pages_pct_lwm;

View File

@@ -19,7 +19,7 @@ connection default;
SET DEBUG_SYNC='now WAIT_FOR blocked';
SHOW STATUS LIKE 'innodb_buffer_pool_resize_status';
Variable_name Value
Innodb_buffer_pool_resize_status Withdrawing blocks. (506/506).
Innodb_buffer_pool_resize_status Withdrawing blocks. (505/505).
SET DEBUG_SYNC='now SIGNAL go';
connection con1;
disconnect con1;

View File

@@ -1,10 +1,11 @@
SET @save_innodb_timeout=@@innodb_lock_wait_timeout;
SET GLOBAL innodb_lock_wait_timeout=1;
set session transaction isolation level read committed;
create table innodb_bug52663 (what varchar(5), id integer, count integer, primary key
(what, id)) engine=innodb;
insert into innodb_bug52663 values ('total', 0, 0);
begin;
connect addconroot, localhost, root,,;
connection addconroot;
set session transaction isolation level read committed;
begin;
connection default;
@@ -31,3 +32,4 @@ select * from innodb_bug52663;
what id count
total 0 2
drop table innodb_bug52663;
SET GLOBAL innodb_lock_wait_timeout=@save_innodb_timeout;

View File

@@ -1,8 +1,9 @@
@@ -527,6 +527,6 @@
@@ -576,7 +576,7 @@
FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column';
instants
-37
+38
SET GLOBAL innodb_stats_persistent = @save_stats_persistent;
# End of 10.6 tests
CREATE TABLE t1(f1 INT, f2 TEXT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(1, 'a');
ALTER TABLE t1 ADD COLUMN f3 TEXT FIRST;

View File

@@ -569,5 +569,16 @@ FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column';
instants
37
CREATE TABLE t1(f1 INT, f2 TEXT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(1, 'a');
ALTER TABLE t1 ADD COLUMN f3 TEXT FIRST;
SET STATEMENT DEBUG_DBUG="+d,instant_insert_fail" FOR
ALTER TABLE t1 DROP COLUMN f1;
ERROR HY000: Internal error: InnoDB: Insert into SYS_COLUMNS failed
ALTER TABLE t1 DROP COLUMN f1;
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
SET GLOBAL innodb_stats_persistent = @save_stats_persistent;
# End of 10.6 tests

View File

@@ -1,3 +1,6 @@
connect disable_purging,localhost,root;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
connection default;
#
# MDEV-26642 Weird SELECT view when a record is
# modified to the same value by two transactions
@@ -53,15 +56,17 @@ DROP TABLE t;
# MDEV-26643 Inconsistent behaviors of UPDATE under
# READ UNCOMMITTED and READ COMMITTED isolation level
#
CREATE TABLE t(a INT, b INT) ENGINE=InnoDB;
CREATE TABLE t(a INT, b INT) ENGINE=InnoDB STATS_PERSISTENT=0;
INSERT INTO t VALUES(NULL, 1), (2, 2);
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN;
UPDATE t SET a = 10;
connection consistent;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
UPDATE t SET b = 20 WHERE a;
connection default;
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
COMMIT;
connection consistent;
SELECT * FROM t;
@@ -75,8 +80,10 @@ BEGIN;
UPDATE t SET a = 10;
connection consistent;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
UPDATE t SET b = 20 WHERE a;
connection default;
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
COMMIT;
connection consistent;
SELECT * FROM t;
@@ -90,8 +97,10 @@ BEGIN;
UPDATE t SET a = 10;
connection con_weird;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
UPDATE t SET b = 20 WHERE a;
connection default;
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
SELECT * FROM t;
a b
10 1
@@ -114,8 +123,10 @@ UPDATE t SET b = 3;
connection consistent;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
UPDATE t SET b = 2 WHERE a;
connection default;
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
UPDATE t SET a = 1;
COMMIT;
connection consistent;
@@ -129,20 +140,25 @@ DROP TABLE t;
#
# MDEV-33802 Weird read view after ROLLBACK of other transactions
#
CREATE TABLE t(a INT PRIMARY KEY, b INT UNIQUE) ENGINE=InnoDB;
INSERT INTO t SET a=1;
BEGIN;
INSERT INTO t SET a=2;
CREATE TABLE t(a INT PRIMARY KEY, b INT UNIQUE) ENGINE=InnoDB STATS_PERSISTENT=0;
connection consistent;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
connection default;
INSERT INTO t SET a=1;
connection consistent;
SAVEPOINT sp1;
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
ERROR HY000: Record has changed since last read in table 't'
SAVEPOINT sp1;
connection default;
BEGIN;
INSERT INTO t SET a=2;
connection con_weird;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
connection default;
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
ROLLBACK;
connection con_weird;
a b
@@ -150,12 +166,74 @@ a b
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
a b
1 NULL
COMMIT;
disconnect con_weird;
connection consistent;
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
a b
1 NULL
disconnect consistent;
COMMIT;
connection default;
TRUNCATE TABLE t;
#
# MDEV-36639 innodb_snapshot_isolation=1 gives error for not comitted row changes
#
INSERT INTO t VALUES (1,1),(2,2);
connection default;
# Case 1: Transaction A modifies a record, transaction B with snapshot
# isolation level is blocked by A, then A is committed.
# Expected behaviour: B gets ER_CHECKREAD.
BEGIN;
UPDATE t SET b=3 WHERE a = 1;
connection consistent;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT * FROM t;
a b
1 1
2 2
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
SELECT * FROM t WHERE a=1 FOR UPDATE;
connection default;
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
COMMIT;
connection consistent;
ERROR HY000: Record has changed since last read in table 't'
# Case 2: Transaction A modifies a record, transaction B with snapshot
# isolation level is blocked by A, then A is rolled back.
# Expected behaviour: B continues execution.
connection default;
BEGIN;
UPDATE t SET b=4 WHERE a=1;
connection consistent;
BEGIN;
SELECT * FROM t;
a b
2 2
1 3
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
SELECT * FROM t WHERE a=1 FOR UPDATE;
connection default;
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
ROLLBACK;
connection consistent;
a b
1 3
ROLLBACK;
# Case 3: Transaction B with snapshot isolation level started with
# consistent snapshot. Transaction A modifies a record and is committed.
# Both B tries to read modified by A record.
# Expected behavior: B gets ER_CHECKREAD.
connection consistent;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
connection default;
UPDATE t SET b=4 WHERE a=1;
connection consistent;
SELECT * FROM t WHERE a=1 FOR UPDATE;
ERROR HY000: Record has changed since last read in table 't'
disconnect consistent;
disconnect disable_purging;
connection default;
SET DEBUG_SYNC="RESET";
DROP TABLE t;
# End of 10.6 tests

View File

@@ -0,0 +1,25 @@
# restart
SET GLOBAL innodb_file_per_table= 0;
Warnings:
Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release
SET GLOBAL innodb_limit_optimistic_insert_debug = 2;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT NOT NULL)ENGINE=InnoDB;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;
SET GLOBAL innodb_file_per_table= default;
Warnings:
Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release
CREATE TABLE t2(f1 INT NOT NULL PRIMARY KEY,f2 VARCHAR(40))ENGINE=InnoDB PARTITION BY KEY() PARTITIONS 256;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;
DROP TABLE t2, t1;
InnoDB 0 transactions not purged
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
name file_size
innodb_system 205520896
set GLOBAL innodb_fast_shutdown= 0;
# restart
FOUND 1 /InnoDB: Moving the data from extents 4096 through 22016/ in mysqld.1.err
FOUND 1 /InnoDB: Defragmentation of system tablespace is successful/ in mysqld.1.err
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
name file_size
innodb_system 14680064
# restart

View File

@@ -0,0 +1,52 @@
call mtr.add_suppression("InnoDB: Defragmentation of CLUST_IND in SYS_INDEXES failed: Data structure corruption");
call mtr.add_suppression("InnoDB: Defragmentation of CLUST_IND in SYS_COLUMNS failed: Data structure corruption");
call mtr.add_suppression("InnoDB: Cannot free the unused segments in system tablespace");
# restart
set GLOBAL innodb_file_per_table = 0;
Warnings:
Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release
set GLOBAL innodb_limit_optimistic_insert_debug = 2;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)ENGINE=InnoDB;
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096;
SET GLOBAL innodb_file_per_table= 1;
Warnings:
Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release
CREATE TABLE t2(f1 INT NOT NULL PRIMARY KEY,
f2 VARCHAR(40))ENGINE=InnoDB PARTITION BY KEY() PARTITIONS 256;
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096;
DROP TABLE t2;
InnoDB 0 transactions not purged
# restart
FOUND 1 /InnoDB: User table exists in the system tablespace/ in mysqld.1.err
DROP TABLE t1;
InnoDB 0 transactions not purged
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
name file_size
innodb_system 58720256
# restart: --debug_dbug=+d,fail_after_level_defragment
FOUND 1 /InnoDB: Defragmentation of CLUST_IND in SYS_COLUMNS failed./ in mysqld.1.err
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
name file_size
innodb_system 58720256
# restart: --debug_dbug=d,allocation_prepare_fail
FOUND 1 /InnoDB: Defragmentation of CLUST_IND in SYS_INDEXES failed./ in mysqld.1.err
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
name file_size
innodb_system 58720256
# restart: --debug_dbug=d,relation_page_prepare_fail
FOUND 2 /InnoDB: Defragmentation of CLUST_IND in SYS_INDEXES failed./ in mysqld.1.err
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
name file_size
innodb_system 58720256
# restart: --debug_dbug=d,remover_prepare_fail
FOUND 3 /InnoDB: Defragmentation of CLUST_IND in SYS_INDEXES failed./ in mysqld.1.err
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
name file_size
innodb_system 58720256
# restart
FOUND 5 /InnoDB: Moving the data from extents 4096 through 8960/ in mysqld.1.err
FOUND 1 /InnoDB: Defragmentation of system tablespace is successful/ in mysqld.1.err
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
name file_size
innodb_system 15728640
# restart

View File

@@ -4,7 +4,7 @@ Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a fu
SET UNIQUE_CHECKS=0, FOREIGN_KEY_CHECKS=0;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL,
f3 INT NOT NULL, INDEX(f1),
INDEX(f2), INDEX(f3))ENGINE=InnoDB;
INDEX(f2), INDEX(f3))STATS_PERSISTENT=0 ENGINE=InnoDB;
BEGIN;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;

View File

@@ -9,7 +9,7 @@ Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a fu
SET UNIQUE_CHECKS=0, FOREIGN_KEY_CHECKS=0;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL,
f3 INT NOT NULL, INDEX(f1),
INDEX(f2), INDEX(f3))ENGINE=InnoDB;
INDEX(f2), INDEX(f3))STATS_PERSISTENT=0 ENGINE=InnoDB;
BEGIN;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;

View File

@@ -110,3 +110,24 @@ INSERT INTO t1 VALUES
ALTER TABLE t1 FORCE, ALGORITHM=COPY;
DROP TABLE t1;
SET GLOBAL innodb_stats_persistent=@default_stats_persistent;
--echo #
--echo # MDEV-36504 Memory leak after insert into empty table
--echo #
CREATE TABLE t1 (k INT PRIMARY KEY)ENGINE=InnoDB;
INSERT INTO t1 SET k= 1;
START TRANSACTION;
INSERT INTO t1 SET k= 2;
SELECT COUNT(*) > 0 FROM mysql.innodb_index_stats LOCK IN SHARE MODE;
connect(con1,localhost,root,,,);
SET innodb_lock_wait_timeout=0;
--error ER_LOCK_WAIT_TIMEOUT
CREATE TABLE t2(f1 INT DEFAULT 1 PRIMARY KEY)
STATS_PERSISTENT= 1 ENGINE=InnoDB as SELECT k FROM t1;
disconnect con1;
connection default;
SET innodb_lock_wait_timeout=default;
DROP TABLE t1;
DROP TABLE IF EXISTS t2;
--source include/restart_mysqld.inc

View File

@@ -133,7 +133,6 @@ FLUSH TABLES;
--let $shutdown_timeout=
disconnect incomplete;
SET @save_stats_persistent = @@GLOBAL.innodb_stats_persistent;
SET GLOBAL innodb_stats_persistent = 0;
INSERT INTO child SET a=0;
@@ -1245,6 +1244,33 @@ ALTER TABLE t2 ADD KEY(b), ALGORITHM=NOCOPY;
DELETE FROM t1;
DROP TABLE t2, t1;
--echo #
--echo # MDEV-33167 ASAN errors after failing to load foreign key
--echo # relation for the table
--echo #
call mtr.add_suppression("InnoDB: Load table `test`.`t3` failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again.");
SET STATEMENT FOREIGN_KEY_CHECKS = 0 FOR
CREATE TABLE t1(f1 VARCHAR(8),
FOREIGN KEY(f1) REFERENCES test.t3(f1))ENGINE=InnoDB;
SET STATEMENT FOREIGN_KEY_CHECKS = 0 FOR
CREATE TABLE t2(f1 VARCHAR(8),
FOREIGN KEY(f1) REFERENCES test.t3(f1))
ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
SET STATEMENT FOREIGN_KEY_CHECKS = 0 FOR
CREATE TABLE t3(f1 VARCHAR(8) PRIMARY KEY)
ENGINE=InnoDB DEFAULT CHARSET=latin1;
set GLOBAL innodb_fast_shutdown=0;
--let $shutdown_timeout=
--source include/restart_mysqld.inc
# Error encountered while loading the foreign key
# constraint for t3. t1 wasn't loaded into memory yet
# t2 failed to find index for foreign key relation
ALTER TABLE t2 FORCE;
DROP TABLE t2, t1, t3;
--echo # End of 10.6 tests
CREATE TABLE t1
@@ -1270,7 +1296,5 @@ ALTER TABLE t1 ADD FOREIGN KEY (f1) REFERENCES t2 (f2);
ALTER TABLE t2 ADD FOREIGN KEY (f2) REFERENCES t2 (f2),
ADD UNIQUE INDEX(f3);
drop table t1, t2;
SET GLOBAL innodb_stats_persistent = @save_stats_persistent;
--echo # End of 10.11 tests
--source include/wait_until_count_sessions.inc

View File

@@ -21,6 +21,7 @@ set global innodb_buffer_pool_size = 9437184;
set global innodb_buffer_pool_size = 10485760;
select @@innodb_buffer_pool_size;
let $kbs=`SELECT CAST(@@innodb_page_size / 1024 AS INT)`;
# fill buffer pool
--disable_query_log
@@ -29,9 +30,13 @@ SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table t1 (id int primary key, val int not null)
ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
evalp create table t2 (id int primary key, val int not null)
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=$kbs;
SET STATEMENT foreign_key_checks=0, unique_checks=0 FOR
INSERT INTO t1 SELECT seq*4,seq*4 FROM seq_1_to_262144;
SET STATEMENT foreign_key_checks=0, unique_checks=0 FOR
INSERT INTO t2 SELECT seq*4,seq*4 FROM seq_1_to_16384;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
@@ -42,6 +47,7 @@ SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
set global innodb_buffer_pool_size = 7340032;
select count(val) from t1;
select count(val) from t2;
set global innodb_adaptive_hash_index=OFF;
@@ -52,8 +58,9 @@ set global innodb_buffer_pool_size = 26214400;
select @@innodb_buffer_pool_size;
select count(val) from t1;
select count(val) from t2;
drop table t1;
drop table t1,t2;
SET GLOBAL innodb_max_purge_lag_wait = 0;
SET @save_pct= @@GLOBAL.innodb_max_dirty_pages_pct;
@@ -66,8 +73,6 @@ SELECT variable_value = 0
FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_PAGES_DIRTY';
--source include/wait_condition.inc
# this may occasionally be aborted on a heavily loaded builder
--error 0,ER_WRONG_USAGE
SET GLOBAL innodb_buffer_pool_size = @old_innodb_buffer_pool_size;
SET GLOBAL innodb_adaptive_hash_index = @old_innodb_adaptive_hash_index;
SET GLOBAL innodb_max_dirty_pages_pct = @save_pct;

View File

@@ -25,8 +25,8 @@ SET DEBUG_SYNC='buf_pool_shrink_before_wakeup SIGNAL blocked WAIT_FOR go';
send SET GLOBAL innodb_buffer_pool_size=8388608;
connection default;
SET DEBUG_SYNC='now WAIT_FOR blocked';
# adjust for 32-bit
--replace_result 504/504 505/505
# adjust for 32-bit and SUX_LOCK_GENERIC
--replace_regex /(5..)\/\1/505\/505/
SHOW STATUS LIKE 'innodb_buffer_pool_resize_status';
SET DEBUG_SYNC='now SIGNAL go';
connection con1;

View File

@@ -1,6 +1,7 @@
--source include/long_test.inc
--source include/have_innodb.inc
SET @save_innodb_timeout=@@innodb_lock_wait_timeout;
SET GLOBAL innodb_lock_wait_timeout=1;
set session transaction isolation level read committed;
create table innodb_bug52663 (what varchar(5), id integer, count integer, primary key
@@ -9,7 +10,6 @@ insert into innodb_bug52663 values ('total', 0, 0);
begin;
connect (addconroot, localhost, root,,);
connection addconroot;
set session transaction isolation level read committed;
begin;
@@ -33,3 +33,4 @@ select * from innodb_bug52663;
connection default;
select * from innodb_bug52663;
drop table innodb_bug52663;
SET GLOBAL innodb_lock_wait_timeout=@save_innodb_timeout;

View File

@@ -652,11 +652,19 @@ DROP TABLE t1;
SET DEBUG_SYNC=RESET;
--echo # End of 10.5 tests
SELECT variable_value-@old_instant instants
FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column';
SET GLOBAL innodb_stats_persistent = @save_stats_persistent;
CREATE TABLE t1(f1 INT, f2 TEXT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(1, 'a');
ALTER TABLE t1 ADD COLUMN f3 TEXT FIRST;
--error ER_INTERNAL_ERROR
SET STATEMENT DEBUG_DBUG="+d,instant_insert_fail" FOR
ALTER TABLE t1 DROP COLUMN f1;
ALTER TABLE t1 DROP COLUMN f1;
CHECK TABLE t1;
DROP TABLE t1;
SET GLOBAL innodb_stats_persistent = @save_stats_persistent;
--echo # End of 10.6 tests

View File

@@ -1,9 +1,16 @@
--source include/have_innodb.inc
--source include/count_sessions.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--disable_query_log
call mtr.add_suppression("InnoDB: Transaction was aborted due to ");
--enable_query_log
--connect disable_purging,localhost,root
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--connection default
--echo #
--echo # MDEV-26642 Weird SELECT view when a record is
--echo # modified to the same value by two transactions
@@ -42,22 +49,18 @@ DROP TABLE t;
--echo # READ UNCOMMITTED and READ COMMITTED isolation level
--echo #
CREATE TABLE t(a INT, b INT) ENGINE=InnoDB;
CREATE TABLE t(a INT, b INT) ENGINE=InnoDB STATS_PERSISTENT=0;
INSERT INTO t VALUES(NULL, 1), (2, 2);
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN; UPDATE t SET a = 10;
--connection consistent
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
--send UPDATE t SET b = 20 WHERE a
--connection default
let $wait_condition=
select count(*) = 1 from information_schema.processlist
where state = 'Updating'
and info = 'UPDATE t SET b = 20 WHERE a';
--source include/wait_condition.inc
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
COMMIT;
--connection consistent
@@ -71,14 +74,11 @@ BEGIN; UPDATE t SET a = 10;
--connection consistent
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
--send UPDATE t SET b = 20 WHERE a
--connection default
let $wait_condition=
select count(*) = 1 from information_schema.processlist
where info = 'UPDATE t SET b = 20 WHERE a';
--source include/wait_condition.inc
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
COMMIT;
--connection consistent
@@ -92,15 +92,11 @@ BEGIN; UPDATE t SET a = 10;
--connection con_weird
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
send UPDATE t SET b = 20 WHERE a;
--connection default
let $wait_condition=
select count(*) = 1 from information_schema.processlist
where state = 'Updating'
and info = 'UPDATE t SET b = 20 WHERE a';
--source include/wait_condition.inc
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
SELECT * FROM t;
COMMIT;
@@ -124,14 +120,11 @@ SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
# As semi-consistent read is disabled for innodb_snapshot_isolation=ON, the
# following UPDATE must be blocked on the first record.
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
--send UPDATE t SET b = 2 WHERE a
--connection default
let $wait_condition=
select count(*) = 1 from information_schema.processlist
where state = 'Updating' and info = 'UPDATE t SET b = 2 WHERE a';
--source include/wait_condition.inc
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
UPDATE t SET a = 1;
COMMIT;
--connection consistent
@@ -150,13 +143,15 @@ DROP TABLE t;
--echo # MDEV-33802 Weird read view after ROLLBACK of other transactions
--echo #
CREATE TABLE t(a INT PRIMARY KEY, b INT UNIQUE) ENGINE=InnoDB;
INSERT INTO t SET a=1;
BEGIN; INSERT INTO t SET a=2;
CREATE TABLE t(a INT PRIMARY KEY, b INT UNIQUE) ENGINE=InnoDB STATS_PERSISTENT=0;
--connection consistent
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--connection default
INSERT INTO t SET a=1;
--connection consistent
SAVEPOINT sp1;
--disable_ps2_protocol
--error ER_CHECKREAD
@@ -164,29 +159,100 @@ SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
--enable_ps2_protocol
SAVEPOINT sp1;
--connection default
BEGIN; INSERT INTO t SET a=2;
--connection con_weird
START TRANSACTION WITH CONSISTENT SNAPSHOT;
send
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
--send SELECT * FROM t FORCE INDEX (b) FOR UPDATE
--connection default
let $wait_condition=
select count(*) = 1 from information_schema.processlist
where state = 'Sending data'
and info LIKE 'SELECT * FROM t %';
--source include/wait_condition.inc
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
ROLLBACK;
--connection con_weird
--reap
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
COMMIT;
--disconnect con_weird
--connection consistent
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
--disconnect consistent
COMMIT;
--connection default
TRUNCATE TABLE t;
--echo #
--echo # MDEV-36639 innodb_snapshot_isolation=1 gives error for not comitted row changes
--echo #
INSERT INTO t VALUES (1,1),(2,2);
--connection default
--echo # Case 1: Transaction A modifies a record, transaction B with snapshot
--echo # isolation level is blocked by A, then A is committed.
--echo # Expected behaviour: B gets ER_CHECKREAD.
BEGIN;
UPDATE t SET b=3 WHERE a = 1;
--connection consistent
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT * FROM t;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
--send SELECT * FROM t WHERE a=1 FOR UPDATE
--connection default
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
COMMIT;
--connection consistent
--error ER_CHECKREAD
--reap
--echo # Case 2: Transaction A modifies a record, transaction B with snapshot
--echo # isolation level is blocked by A, then A is rolled back.
--echo # Expected behaviour: B continues execution.
--connection default
BEGIN;
UPDATE t SET b=4 WHERE a=1;
--connection consistent
BEGIN;
SELECT * FROM t;
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
--send SELECT * FROM t WHERE a=1 FOR UPDATE
--connection default
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
ROLLBACK;
--connection consistent
--reap
ROLLBACK;
--echo # Case 3: Transaction B with snapshot isolation level started with
--echo # consistent snapshot. Transaction A modifies a record and is committed.
--echo # Both B tries to read modified by A record.
--echo # Expected behavior: B gets ER_CHECKREAD.
--connection consistent
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--connection default
UPDATE t SET b=4 WHERE a=1;
--connection consistent
--error ER_CHECKREAD
SELECT * FROM t WHERE a=1 FOR UPDATE;
--disconnect consistent
--disconnect disable_purging
--connection default
SET DEBUG_SYNC="RESET";
DROP TABLE t;
--source include/wait_until_count_sessions.inc
--echo # End of 10.6 tests

View File

@@ -0,0 +1,6 @@
--innodb_page_size=4k
--innodb_data_file_path=ibdata1:1M:autoextend:autoshrink
--innodb_undo_tablespaces=0
--innodb_stats_persistent=0
--skip_partition=0
--innodb_sys_tablespaces

View File

@@ -0,0 +1,40 @@
--source include/have_innodb.inc
--source include/have_sequence.inc
--source include/have_debug.inc
--let MYSQLD_DATADIR= `SELECT @@datadir`
--source include/shutdown_mysqld.inc
--copy_file $MYSQLD_DATADIR/ibdata1 $MYSQLD_DATADIR/ibdata1_copy
--copy_file $MYSQLD_DATADIR/ib_logfile0 $MYSQLD_DATADIR/ib_logfile0_copy
--source include/start_mysqld.inc
SET GLOBAL innodb_file_per_table= 0;
SET GLOBAL innodb_limit_optimistic_insert_debug = 2;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT NOT NULL)ENGINE=InnoDB;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;
SET GLOBAL innodb_file_per_table= default;
CREATE TABLE t2(f1 INT NOT NULL PRIMARY KEY,f2 VARCHAR(40))ENGINE=InnoDB PARTITION BY KEY() PARTITIONS 256;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;
DROP TABLE t2, t1;
--source include/wait_all_purged.inc
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
set GLOBAL innodb_fast_shutdown= 0;
--source include/restart_mysqld.inc
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
let SEARCH_PATTERN=InnoDB: Moving the data from extents 4096 through 22016;
--source include/search_pattern_in_file.inc
let SEARCH_PATTERN=InnoDB: Defragmentation of system tablespace is successful;
--source include/search_pattern_in_file.inc
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
--source include/shutdown_mysqld.inc
--move_file $MYSQLD_DATADIR/ibdata1_copy $MYSQLD_DATADIR/ibdata1
--move_file $MYSQLD_DATADIR/ib_logfile0_copy $MYSQLD_DATADIR/ib_logfile0
--source include/start_mysqld.inc

View File

@@ -0,0 +1,6 @@
--innodb_page_size=4k
--innodb_data_file_path=ibdata1:15M:autoextend:autoshrink
--innodb_undo_tablespaces=0
--innodb_stats_persistent=0
--skip_partition=0
--innodb_sys_tablespaces

View File

@@ -0,0 +1,90 @@
--source include/have_innodb.inc
--source include/have_debug.inc
--source include/have_sequence.inc
call mtr.add_suppression("InnoDB: Defragmentation of CLUST_IND in SYS_INDEXES failed: Data structure corruption");
call mtr.add_suppression("InnoDB: Defragmentation of CLUST_IND in SYS_COLUMNS failed: Data structure corruption");
call mtr.add_suppression("InnoDB: Cannot free the unused segments in system tablespace");
--let MYSQLD_DATADIR= `SELECT @@datadir`
--source include/shutdown_mysqld.inc
--copy_file $MYSQLD_DATADIR/ibdata1 $MYSQLD_DATADIR/ibdata1_copy
--copy_file $MYSQLD_DATADIR/ib_logfile0 $MYSQLD_DATADIR/ib_logfile0_copy
--source include/start_mysqld.inc
set GLOBAL innodb_file_per_table = 0;
set GLOBAL innodb_limit_optimistic_insert_debug = 2;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)ENGINE=InnoDB;
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096;
SET GLOBAL innodb_file_per_table= 1;
CREATE TABLE t2(f1 INT NOT NULL PRIMARY KEY,
f2 VARCHAR(40))ENGINE=InnoDB PARTITION BY KEY() PARTITIONS 256;
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096;
DROP TABLE t2;
--source include/wait_all_purged.inc
let $restart_parameters=;
--source include/restart_mysqld.inc
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
let SEARCH_PATTERN=InnoDB: User table exists in the system tablespace;
--source include/search_pattern_in_file.inc
DROP TABLE t1;
--source include/wait_all_purged.inc
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
let $restart_parameters=--debug_dbug=+d,fail_after_level_defragment;
--source include/restart_mysqld.inc
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
let SEARCH_PATTERN=InnoDB: Defragmentation of CLUST_IND in SYS_COLUMNS failed.;
--source include/search_pattern_in_file.inc
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
let $restart_parameters=--debug_dbug=d,allocation_prepare_fail;
--source include/restart_mysqld.inc
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
let SEARCH_PATTERN=InnoDB: Defragmentation of CLUST_IND in SYS_INDEXES failed.;
--source include/search_pattern_in_file.inc
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
let $restart_parameters=--debug_dbug=d,relation_page_prepare_fail;
--source include/restart_mysqld.inc
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
let SEARCH_PATTERN=InnoDB: Defragmentation of CLUST_IND in SYS_INDEXES failed.;
--source include/search_pattern_in_file.inc
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
let $restart_parameters=--debug_dbug=d,remover_prepare_fail;
--source include/restart_mysqld.inc
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
let SEARCH_PATTERN=InnoDB: Defragmentation of CLUST_IND in SYS_INDEXES failed.;
--source include/search_pattern_in_file.inc
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
let $restart_parameters=;
--source include/restart_mysqld.inc
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
let SEARCH_PATTERN= InnoDB: Moving the data from extents 4096 through 8960;
--source include/search_pattern_in_file.inc
let SEARCH_PATTERN=InnoDB: Defragmentation of system tablespace is successful;
--source include/search_pattern_in_file.inc
select name, file_size from information_schema.innodb_sys_tablespaces where space = 0;
--source include/shutdown_mysqld.inc
--move_file $MYSQLD_DATADIR/ibdata1_copy $MYSQLD_DATADIR/ibdata1
--move_file $MYSQLD_DATADIR/ib_logfile0_copy $MYSQLD_DATADIR/ib_logfile0
--source include/start_mysqld.inc

View File

@@ -1,2 +1,3 @@
--innodb_data_file_path=ibdata1:10M:autoextend:autoshrink
--innodb_sys_tablespaces
--innodb_buffer_pool_size=75M

View File

@@ -1,10 +1,11 @@
--source include/have_innodb.inc
--source include/have_sequence.inc
SET GLOBAL INNODB_FILE_PER_TABLE= 0;
SET UNIQUE_CHECKS=0, FOREIGN_KEY_CHECKS=0;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL,
f3 INT NOT NULL, INDEX(f1),
INDEX(f2), INDEX(f3))ENGINE=InnoDB;
INDEX(f2), INDEX(f3))STATS_PERSISTENT=0 ENGINE=InnoDB;
BEGIN;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;

View File

@@ -1,3 +1,4 @@
--innodb_data_file_path=ibdata1:1M:autoextend:autoshrink
--innodb_sys_tablespaces
--innodb_page_size=4k
--innodb_buffer_pool_size=100M

View File

@@ -16,7 +16,7 @@ SET GLOBAL INNODB_FILE_PER_TABLE= 0;
SET UNIQUE_CHECKS=0, FOREIGN_KEY_CHECKS=0;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL,
f3 INT NOT NULL, INDEX(f1),
INDEX(f2), INDEX(f3))ENGINE=InnoDB;
INDEX(f2), INDEX(f3))STATS_PERSISTENT=0 ENGINE=InnoDB;
BEGIN;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;
INSERT INTO t1 SELECT seq, seq, seq FROM seq_1_to_16384;