Details
-
Task
-
Status: Stalled (View Workflow)
-
Major
-
Resolution: Unresolved
-
None
Description
Extend HEAP tables to be able to handle VARCHAR and BLOB's efficently.
Currently HEAP stores VARCHAR at their maximum width and can't store BLOB/TEXT columns.
This causes a problem for internally memory tables that are used to store temporary results from SELECT and also
any query involving information_schema. This uses a lot more memory than necessary and when BLOB/TEXT are involved
MariaDB has to create an on-disk Aria table instead of a HEAP table.
The idea is to create a separate BLOB storage area (can consist of multipe blocks), attached to the HEAP table, that holds all long varchar and blob columns.
table->record will hold the fixed length fields, with all VARCHAR and BLOB columns replaced with a pointer and length to the
BLOB storage area.
The BLOB storage will be a fixed size buffer where all VARCHAR and BLOB's are stored. Initially all VARCHAR and BLOBS are
stored after each other. In case of UPDATE (very seldom happening for temporary tables) that extends the length of the BLOB/VARCHAR column, the new part will be linked to the original part. One BLOB/VARCHAR can be in any number of segments.
The benefit of this structure is that there is no need for any garbage collection. There is a loss of 12 bytes per link, which is neglectable for the typical usage of temporary tables (which will not have any linked records).
Attachments
Issue Links
- blocks
-
MDEV-4793 CONVERT_IF_BIGGER_TO_BLOB makes temp. table use Aria, which hits the disk
- Open
- is duplicated by
-
MDEV-8000 Feature request: support for BLOB/TEXT in Memory storage engine
- Closed
- relates to
-
MDEV-20492 Information schema query producing many disk temp table
- Closed