Isso é difícil sem saber muito sobre o próprio banco de dados. Existem algumas ferramentas que você deve conhecer;
Sobre o armazenamento de todo o banco de dados na memória; Quaisquer consultas que estão fazendo alterações no banco de dados permanecerão abertas até que a gravação seja executada no disco. A única coisa que pode evitar que o disco seja um gargalo é um controlador de disco com um cache de gravação.
Eu começaria com as seguintes alterações dos padrões:
key_buffer_size = 128M
thread_stack = 128K
thread_cache_size = 8
table_cache = 8192
max_heap_table_size = 256M
query_cache_limit = 4M
query_cache_size = 512M
innodb_buffer_pool_size = 4G
# This is crucial to avoid checkpointing all the time:
innodb_log_file_size = 512M
# If you have control on who consumes the DB, and you don't use hostnames when you've set up permissions - this can help as well.
skip_name_resolve
Depois, vejo como as coisas correm e tento diferentes coisas com base (entre outras coisas) na saída das ferramentas mencionadas acima. Também gostaria de fazer um gráfico das tendências com uma ferramenta de monitoramento, como Munin ou Cactos , para ver com que tipo de carga de trabalho estou realmente lidando. Pessoalmente, tenho uma grande experiência com os plugins do MySQL fornecidos com o Munin.