Is there a way to determine whether a mysql index fits entirely in available memory? If so, how would I:
- Determine size of mysql indexes
- Determine available memory for the application
- Determine if the indexes fit entirely in memory
Is there a way to determine whether a mysql index fits entirely in available memory? If so, how would I:
Depends on Storage Engine
SELECT FLOOR(SUM(index_length)/POWER(1024,2)) IndexSizesMB
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','performance_schema','mysql');
Subtract that from key_buffer_size
. If the answer > 0, then Yes
SELECT FLOOR(SUM(data_length+index_length)/POWER(1024,2)) InnoDBSizeMB
FROM information_schema.tables WHERE engine='InnoDB';
Subtract that from innodb_buffer_pool_size
. If the answer > 0, then Yes
I wrote about this in the DBA StackExchange
On a dedicated DB Server, make sure InnoDBSizeMB+IndexSizesMB
does not exceed 75% of RAM.
innodb_buffer_pool_size
to 300M. –
Sessler data_length+index_length
. –
Sessler SUM(index_length)
? Obviously there are data pages cached, so it will depend on how hot your data is to increase that size to cache enough indexes and data pages, so the number needs to be bigger by some percentage depending on workload...but does it seem reasonable just to SUM(index_length)
and add to that some application-specific additional room for data? –
Demandant To find memory available to MySQL, look in my.cnf
, likely located at: /etc/mysql/my.cnf
key_buffer_size = 264M
To find size of indexes for a table: SHOW TABLE status FROM [DBNAME]
© 2022 - 2024 — McMap. All rights reserved.
innodb_buffer_pool_size=134217728
-above-query=283164672
=-148946944
. If this is the case, should I increase myinnodb_buffer_pool_size
, or what would be the next step here? – Catarrhine