[MDEV-436] increased footprint of simple MEMORY tables Created: 2012-08-06 Updated: 2012-08-15 Resolved: 2012-08-15 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | None |
| Affects Version/s: | 5.5.25 |
| Fix Version/s: | 5.5.27 |
| Type: | Bug | Priority: | Major |
| Reporter: | Axel Schwenke | Assignee: | Michael Widenius |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Description |
|
Starting with MariaDB 5.5.22 (more exactly: somewhere between r3337 and r3349 in the maria-5.5 tree) simple MEMORY tables start to consume more memory. Example: create table t1 (c1 int, index (c1)) engine memory; Calculating bytes per row gives: 5.5.r3337: 16 (data) + 16 (index) = 32 bytes total |
| Comments |
| Comment by Michael Widenius [ 2012-08-06 ] |
|
The size increase for indexes are expected and what you have to pay for a 30 % - > 50% speedup in index handling. The cost is 1 long / per index entry. (ie 4 bytes for 32 bit system and 8 bytes systems) The change for data comes that if you don't specify MAX_ROWS, we allocate smaller block size (=room for 1000 rows /block) instead of 'read_buffer_size". The effect is that for small set of rows we save a LOT of memory while for big number of rows there is a slight increase in the memory used as we need to allocate more blocks with a small overhead per block. |
| Comment by Michael Widenius [ 2012-08-07 ] |
|
I found a 10+ year old bug in HEAP tables that when we allocated memory for a upper nod level, we allocated 1024 bytes in the case when the tree didn't grow. This explains the extra memory allocation for data. |
| Comment by Michael Widenius [ 2012-08-15 ] |
|
Pushed into 5.5 tree |