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