Bug #71144 InnoDB will not reclaim space if records are shrunk
Submitted: 13 Dec 2013 23:04 Modified: 14 Dec 2013 0:03
Reporter: Domas Mituzas Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S3 (Non-critical)
Version:5.6.15 OS:Any
Assigned to: CPU Architecture:Any

[13 Dec 2013 23:04] Domas Mituzas
Description:
If records are shrunk, no matter how much, InnoDB does not care much about it, which is sad, as it could use reclaimed space for stuff like needed data records. 
Looks like that space is not even recorded in PAGE_GARBAGE, so pages are not considered for merging with neighbors. 

How to repeat:
DROP TABLE IF EXISTS garbageleak;
CREATE TABLE garbageleak (a INT PRIMARY KEY AUTO_INCREMENT, b VARCHAR(255), c VARCHAR(1000));
INSERT INTO garbageleak VALUES (NULL, REPEAT("b",50), REPEAT("c", 500));
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
INSERT INTO garbageleak SELECT NULL, b, c FROM garbageleak;
UPDATE garbageleak SET b="b", c="c";
UPDATE garbageleak SET b="bb", c="cc";

Suggested fix:
account garbage properly, merge pages, release space
[14 Dec 2013 0:03] Domas Mituzas
Will file other bug for incorrect reporting