Eu posso acreditar facilmente em uma taxa de acertos de cache de 95%. Ouça suas estatísticas:
Você afirmou que tem 50 GB de índices para tabelas MyISAM
O cache de chave é projetado para cachear páginas de índice para tabelas MyISAM. Esta opção é definida pela opção key_buffer_size
Você disse que estava em 2G. Não é de admirar que a taxa de acerto seja de 95%. Blocos de índice estão sendo paginados para dentro e para fora do cache de chaves constantemente. Dezenas de consultas que precisam de uma linha específica são carregadas no keycache depois que o MySQL descobre que as informações do índice (.MYI) pela primeira consulta necessária não estavam lá inicialmente. Todas as consultas subsequentes que exigem a mesma informação .MYI para pesquisar dados (.MYD) já serão armazenadas em cache após a primeira consulta ser carregada. O MySQL NÃO CACHE MyISAM Data em seus próprios caches.
Você deve conseguir definir key_buffer_size
para 8G.
Você pode aumentar o valor para obter melhor manipulação de índice para todas as leituras e gravações múltiplas; Em um sistema cuja função principal é executar o MySQL usando o mecanismo de armazenamento MyISAM, 25% da memória total da máquina é um valor aceitável para essa variável. No entanto, você deve estar ciente de que, se você tornar o valor muito grande (por exemplo, mais de 50% da memória total da máquina), seu sistema poderá começar a paginar e ficará extremamente lento. Isso ocorre porque o MySQL depende do sistema operacional para executar o armazenamento em cache do sistema de arquivos para leituras de dados, portanto você deve deixar algum espaço para o cache do sistema de arquivos. Você também deve considerar os requisitos de memória de quaisquer outros mecanismos de armazenamento que você possa estar usando além do MyISAM.
Este mesmo URL explica que o tamanho máximo de key_buffer_size para o SO de 32 bits é 4G. Você não deve passar de 8G para key_buffer_size com sua configuração de servidor.
Quanto às leituras de dados, a única variável de status de que você precisa é Key_reads. Isso dá uma indicação de quantas vezes uma página de índice deve ser buscada em um arquivo .MYI.
O que você precisa monitorar para sua taxa de acertos de cache é o seguinte
KRR_NOW = Key_read_requests Now
KRR_SEC = Key_read_requests one ago
KRD_NOW = Key_reads Now
KRD_SEC = Key_reads one second ago
KRR_DELTA = KRR_NOW - KRR_SEC
KRD_DELTA = KRD_NOW - KRD_SEC
KeyCache Hit Ratio (KHR) é, portanto, esta fórmula
KHR = 100 * (KRR_DELTA - KRD_DELTA) / KRR_DELTA
Você deseja uma taxa de acertos do KeyCache 99 +%
Agora, no flipsize das coisas, vamos discutir o InnoDB.
Seu innodb_buffer_pool_size deve ser definido como 4G. Isso acontece porque o buffer pool do InnoDB armazena os dados e as páginas de índice. Você pode dar ao innodb_buffer_pool uma figura mais específica arredondada usando o seguinte:
SELECT CONCAT(CEILING(ibbytes / POWER(1024,3)),'G') FROM (SELECT SUM(data_length+index_length) ibbytes FROM information_schema.tables where engine='InnoDB') A;