mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
e938d7c18f
Problem: ======== InnoDB fails to mark the page status as FREED during freeing of an extent of a segment. This behaviour affects scrubbing and doesn't write all zeroes in file even though pages are freed. Solution: ======== InnoDB should mark the page status as FREED before reinitialize the extent descriptor entry.
22 lines
944 B
Text
22 lines
944 B
Text
SET @save_debug=@@GLOBAL.INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG;
|
|
SET @save_scrub=@@GLOBAL.INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED;
|
|
SET @save_freq=@@GLOBAL.INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY;
|
|
SET GLOBAL INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY=1;
|
|
SET GLOBAL INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED=1;
|
|
SET GLOBAL INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=2;
|
|
CREATE TABLE t1(f1 INT AUTO_INCREMENT PRIMARY KEY,
|
|
f2 VARCHAR(256) GENERATED ALWAYS as('repairman'),
|
|
INDEX idx(f2))ENGINE= InnoDB;
|
|
INSERT INTO t1(f1) SELECT seq FROM seq_1_to_50;
|
|
FLUSH TABLE t1 FOR EXPORT;
|
|
FOUND 108 /repairman/ in t1.ibd
|
|
UNLOCK TABLES;
|
|
ALTER TABLE t1 DROP INDEX idx;
|
|
InnoDB 0 transactions not purged
|
|
FLUSH TABLE t1 FOR EXPORT;
|
|
NOT FOUND /repairman/ in t1.ibd
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
SET GLOBAL INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=@save_debug;
|
|
SET GLOBAL INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED=@save_scrub;
|
|
SET GLOBAL INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY = @save_freq;
|