Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.1(EOL)
-
10.2.6-2, 10.2.6-3
Description
In all InnoDB row formats, the pointers or lengths stored in the record header can be at most 14 bits, that is, count up to 16383.
In ROW_FORMAT=REDUNDANT, this limits the maximum possible record length to 16383 bytes. In other ROW_FORMAT, it could merely limit the maximum length of variable-length fields.
When MySQL 5.7 introduced innodb_page_size=32k and 64k, the maximum record length was limited to 16383 bytes (I hope 16383, not 16384, to be able to distinguish from a record whose length is 0 bytes). This change is present in MariaDB Server 10.2.
We should fix MariaDB Server 10.1 accordingly.
There already is a test for this: innodb.innodb-64k
Attachments
Issue Links
- is caused by
-
MDEV-6075 Allow > 16K pages on InnoDB
-
- Closed
-
In MySQL 5.7, this commit of WL#5757 introduced a 16383-byte in-page size limit for all InnoDB records. In our code, I would rename the constant REC_MAX_DATA_SIZE to something else, because it is confusingly defined as one byte too much (16384). Also, there is no need to limit the maximum record size with other than ROW_FORMAT=REDUNDANT. With other row formats, we only have to enforce a maximum length of 16383 bytes for variable-length columns when innodb_page_size=64k. That could be done by ensuring that dtuple_convert_big_rec() gets called and does move such columns off-page.