Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql lento na primeira consulta, depois rápido para consultas relacionadas


As páginas dos arquivos de dados innodb são armazenadas em cache no buffer pool do innodb. Isso é o que você esperaria. A leitura de arquivos é lenta, mesmo em bons discos rígidos, especialmente leituras aleatórias, que são principalmente o que os bancos de dados veem.

Pode ser que sua primeira consulta esteja fazendo algum tipo de varredura de tabela que puxa muitas páginas para o pool de buffers e, em seguida, acessá-las é rápido. Ou algo semelhante.

Isso é o que eu esperaria.

Idealmente, use o mesmo mecanismo para todas as tabelas (exceções:tabelas de sistema, tabelas temporárias (talvez) e tabelas muito pequenas ou de curta duração). Se você não fizer isso, eles terão que lutar por carneiro.

Supondo que todas as suas tabelas sejam innodb, faça o pool de buffers usar até 75% da memória ram física do servidor (supondo que você não execute muitas outras tarefas na máquina).

Então você poderá encaixar cerca de 12G do seu banco de dados em ram, então, uma vez "aquecido", os 12G "mais usados" do seu banco de dados estarão em ram, onde o acesso é agradável e rápido.

Alguns usuários do mysql tendem a "aquecer" os servidores de produção após uma reinicialização, enviando-lhes consultas copiadas de outra máquina por um tempo (estes serão escravos de replicação) até adicioná-los ao pool de produção. Isso evita a lentidão extrema vista enquanto o cache está frio. Por exemplo, o Youtube faz isso (ou pelo menos costumava; o Google os comprou e agora eles podem usar o Google-fu)