You will need to check out the sum total of your indexes for MyISAM. Please run this query:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;
Whatever number comes out, use either that number or 8G, whichever is smaller.
MyISAM only caches index pages.
If you plan to migrate your data to InnoDB, use these settings:
[mysqld]
innodb_file_per_table
innodb_log_file_size=2047M
innodb_log_buffer_size=64M
innodb_buffer_pool_size=18G
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=10000
You wiil need to optimize the InnoDB infrastructure
For your reference i am trying to explain some concepts also.
Key hit rate
There are basically two forms of key hit rate
1.Key Read Efficiency
Key Reads: The number of physical reads of a key block from disk.
Key Read Request: The number of requests to read a key block from the
cache.
Key Read Efficiency = [1 - (Key_reads/Key_read_requests)]*100
Key Read Efficiency: The ratio of the number of physical reads of a
key block from the cache to the number of requests to read a key block
from the cache in percentage. The MySQL performance is good if the
value of Key Read Efficiency is 90 percent and above. Increasing the
size of the cache improves the value of Key Read Efficiency and hence
an improved the performance.
2.Key Write Efficiency
Key Writes: The number of physical writes of a key block to disk.
Key Write Request: The number of requests to write a key block to the
cache.
Key Write Efficiency=(Key_write/Key_write_requests)*100
Key Write Efficiency: The ratio of the number of physical writes of a
key block to the cache to the number of requests to write a key block
to the cache in percentage. For a good performance of the MySQL
server, the value of Key Write Efficiency must be 90 percent and
above. If it is found less, then you can increase the size of the
cache to improve the performance.
Key Buffer Used
Find value of key_buffer_size as show variables like 'key_buffer_size';
convert it into MB.
Find the All MyISAM index Size :
SELECT SUM(INDEX_LENGTH)/(1024*1024) 'Index Size' FROM
information_schema.TABLES where ENGINE='MyISAM' AND TABLE_SCHEMA NOT
IN('mysql','information_schema');
Find
(Index Size)/key_buffer_size(in MB) * 100
if result is (<=100 ) then your all indexes are cached into key_buffer
if result is (>100) then your all indexes are not cached into
key_buffer you may gain performance boost by increasing
key_buffer_size.
query cache hitrate
Hit rate = Qcache_hits / (Qcache_hits + Com_select) * 100
Insert rate = Qcache_inserts / (Qcache_hits + Com_select) * 100
Prune rate = (Qcache_lowmem_prunes / Qcache_inserts) * 100
Best Answer
Key Buffer Size
This should be the same number as
Key Buffer in Use
Key Read and Write Ratios, Query Cache HitRate (based on
@SECONDS_TO_TEST
)