Bug #71145 InnoDB will not reclaim space if records are deleted
Submitted: 13 Dec 2013 23:18 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:18] Domas Mituzas
Description:
If records are deleted and leave lots of empty space, 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 may be occupied by records marked as deleted (and purge is past the transaction already anyway)

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;
DELETE FROM garbageleak WHERE a%10 <> 0;

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