patternsqlMinor
How much memory will a MEMORY table take up?
Viewed 0 times
muchtakewillmemoryhowtable
Problem
Let's say I have a MyISAM table with a data length of 4.8GB and an index length of 6.2GB. So, a total data size of eleven gig. How much memory would this require, were I to convert it to a
MEMORY table? 11 gig, or more?Solution
The exact memory requirement of a row is calculated from the following formula:
[src]
ALIGN() represents a round-up factor to cause the row length to be an exact multiple of the char pointer size. sizeof(char*) is 4 on 32-bit machines and 8 on 64-bit machines.
So, on a 64-bit machine, replace
You can get an estimate of the
Then you add up all your BTREE keys and then HASH keys. Note that it might be worth it space-wise to convert any keys to HASH, as they require less memory.
I was going to mention the limitation of maximum MEMORY size dependent on
SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char*) × 4)
+ SUM_OVER_ALL_HASH_KEYS(sizeof(char*) × 2)
+ ALIGN(length_of_row+1, sizeof(char*))[src]
ALIGN() represents a round-up factor to cause the row length to be an exact multiple of the char pointer size. sizeof(char*) is 4 on 32-bit machines and 8 on 64-bit machines.
So, on a 64-bit machine, replace
sizeof(char*) with 8.You can get an estimate of the
length_of_row from the Information Schema:SELECT TABLE_ROWS, AVG_ROW_LENGTH FROM information_schema.tables WHERE table_schema='foo' AND table_name='bar';Then you add up all your BTREE keys and then HASH keys. Note that it might be worth it space-wise to convert any keys to HASH, as they require less memory.
I was going to mention the limitation of maximum MEMORY size dependent on
max_heap_table_size, but gbn beat me to it.Code Snippets
SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char*) × 4)
+ SUM_OVER_ALL_HASH_KEYS(sizeof(char*) × 2)
+ ALIGN(length_of_row+1, sizeof(char*))SELECT TABLE_ROWS, AVG_ROW_LENGTH FROM information_schema.tables WHERE table_schema='foo' AND table_name='bar';Context
StackExchange Database Administrators Q#11912, answer score: 7
Revisions (0)
No revisions yet.