[MDEV-23521] Implement an InnoDB row format that can use overflow pages for smaller columns Created: 2019-10-23 Updated: 2023-11-30 |
|
| Status: | Open |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB |
| Fix Version/s: | None |
| Type: | New Feature | Priority: | Minor |
| Reporter: | Geoff Montee (Inactive) | Assignee: | Marko Mäkelä |
| Resolution: | Unresolved | Votes: | 2 |
| Labels: | None | ||
| Issue Links: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Description |
|
With the DYNAMIC row format, variable-length fields can only be stored on overflow pages if they are defined with a maximum size of 256 bytes or more., and fixed-length fields can only be stored on overflow pages if their maximum size is 768 bytes or more. From the documentation:
A lot of users run into "row size too large" errors due to this: https://mariadb.com/kb/en/library/troubleshooting-row-size-too-large-errors-with-innodb/ A counter-intuitive solution to many of these issues is to actually increase the length of variable-length fields, so that they can be stored on overflow pages. It might be a good idea to implement a row format that allows smaller pages to be stored on overflow pages, so that users don't have to use this workaround. |
| Comments |
| Comment by Marko Mäkelä [ 2019-12-11 ] |
|
For the reference, Designing and implementing a completely new index page format for InnoDB would be a multi-month effort. If we go down that route, I would consider implementing a completely new B-tree storage engine, including features like the following:
These changes would greatly simplify MVCC and checks for implicit locks. The undo log would only be consulted for rollback and purge. For that to work, it would have to record (table_id,primary_key) for every transaction. I have also been thinking about writing undo log records in the same stream with redo log (which depends on |