mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
0c405b064d
Avoid accessing the table cache while the ALTER TABLE statement is blocked by DEBUG_SYNC. Use explicit COMMIT for forcing the redo log flush (whose main purpose is to ensure that the incomplete state of the blocked ALTER TABLE statement is persisted).
114 lines
3.4 KiB
Text
114 lines
3.4 KiB
Text
FLUSH TABLES;
|
|
#
|
|
# MDEV-11369: Instant ADD COLUMN for InnoDB
|
|
#
|
|
CREATE TABLE t1(id INT PRIMARY KEY, c2 INT UNIQUE)
|
|
ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t1 VALUES(0,2);
|
|
INSERT INTO t2 VALUES(2,1);
|
|
ALTER TABLE t2 ADD COLUMN (c3 TEXT NOT NULL DEFAULT 'De finibus bonorum');
|
|
BEGIN;
|
|
INSERT INTO t2 VALUES(3,4,'accusantium doloremque laudantium');
|
|
connect ddl, localhost, root;
|
|
SET DEBUG_SYNC='innodb_alter_inplace_before_commit SIGNAL ddl WAIT_FOR ever';
|
|
ALTER TABLE t1 ADD COLUMN (c3 TEXT NOT NULL DEFAULT ' et malorum');
|
|
connection default;
|
|
SET DEBUG_SYNC='now WAIT_FOR ddl';
|
|
SET GLOBAL innodb_flush_log_at_trx_commit=1;
|
|
COMMIT;
|
|
# Kill the server
|
|
disconnect ddl;
|
|
SET GLOBAL innodb_purge_rseg_truncate_frequency=1;
|
|
SELECT * FROM t1;
|
|
id c2
|
|
0 2
|
|
SELECT * FROM t2;
|
|
id c2 c3
|
|
2 1 De finibus bonorum
|
|
3 4 accusantium doloremque laudantium
|
|
BEGIN;
|
|
DELETE FROM t1;
|
|
ROLLBACK;
|
|
InnoDB 0 transactions not purged
|
|
INSERT INTO t2 VALUES (64,42,'De finibus bonorum'), (347,33101,' et malorum');
|
|
connect ddl, localhost, root;
|
|
SET DEBUG_SYNC='innodb_alter_inplace_before_commit SIGNAL ddl WAIT_FOR ever';
|
|
ALTER TABLE t2 ADD COLUMN (c4 TEXT NOT NULL DEFAULT ' et malorum');
|
|
connection default;
|
|
SET DEBUG_SYNC='now WAIT_FOR ddl';
|
|
SET GLOBAL innodb_flush_log_at_trx_commit=1;
|
|
DELETE FROM t1;
|
|
# Kill the server
|
|
disconnect ddl;
|
|
SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency;
|
|
SET GLOBAL innodb_purge_rseg_truncate_frequency=1;
|
|
FOUND 2 /\[Note\] InnoDB: Rolled back recovered transaction / in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
id c2
|
|
SELECT * FROM t2;
|
|
id c2 c3
|
|
2 1 De finibus bonorum
|
|
3 4 accusantium doloremque laudantium
|
|
64 42 De finibus bonorum
|
|
347 33101 et malorum
|
|
BEGIN;
|
|
INSERT INTO t1 SET id=1;
|
|
DELETE FROM t2;
|
|
ROLLBACK;
|
|
InnoDB 0 transactions not purged
|
|
FLUSH TABLE t1,t2 FOR EXPORT;
|
|
t1 clustered index root page(type 17855):
|
|
N_RECS=0; LEVEL=0
|
|
header=0x010000030074 (id=0x696e66696d756d00)
|
|
header=0x010008030000 (id=0x73757072656d756d00)
|
|
t2 clustered index root page(type 18):
|
|
N_RECS=5; LEVEL=0
|
|
header=0x010000030088 (id=0x696e66696d756d00)
|
|
header=0x1000100b00b9 (id=0x80000000,
|
|
DB_TRX_ID=0x000000000000,
|
|
DB_ROLL_PTR=0x80000000000000,
|
|
c2=NULL(4 bytes),
|
|
c3=0x44652066696e6962757320626f6e6f72756d)
|
|
header=0x0000180900d9 (id=0x80000002,
|
|
DB_TRX_ID=0x000000000000,
|
|
DB_ROLL_PTR=0x80000000000000,
|
|
c2=0x80000001)
|
|
header=0x0000200b0119 (id=0x80000003,
|
|
DB_TRX_ID=0x000000000000,
|
|
DB_ROLL_PTR=0x80000000000000,
|
|
c2=0x80000004,
|
|
c3=0x6163637573616e7469756d20646f6c6f72656d717565206c617564616e7469756d)
|
|
header=0x000028090139 (id=0x80000040,
|
|
DB_TRX_ID=0x000000000000,
|
|
DB_ROLL_PTR=0x80000000000000,
|
|
c2=0x8000002a)
|
|
header=0x0000300b0074 (id=0x8000015b,
|
|
DB_TRX_ID=0x000000000000,
|
|
DB_ROLL_PTR=0x80000000000000,
|
|
c2=0x8000814d,
|
|
c3=0x206574206d616c6f72756d)
|
|
header=0x060008030000 (id=0x73757072656d756d00)
|
|
UNLOCK TABLES;
|
|
DELETE FROM t2;
|
|
InnoDB 0 transactions not purged
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`c2` int(11) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `c2` (`c2`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL,
|
|
`c2` int(11) DEFAULT NULL,
|
|
`c3` text NOT NULL DEFAULT 'De finibus bonorum',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `c2` (`c2`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
|
DROP TABLE t1,t2;
|
|
db.opt
|
|
SET GLOBAL innodb_purge_rseg_truncate_frequency=@saved_frequency;
|