Estou verificando um problema de buffer pool em um banco de dados MySql. De acordo com a consulta para obter o tamanho do banco de dados mostrado aqui , o tamanho total do banco de dados é de cerca de 11 GB. Infelizmente, sei que tenho muito menos RAM do que isso; apenas cerca de 4,5 GB no total para esta VM. Portanto, verifico o uso do buffer pool do InnoDB, esperando vê-lo quase no limite da capacidade. Em vez disso, vejo o oposto:
show engine innodb status \G;
... Tamanho do buffer pool 163839 Buffers livres 132864 ...
Parece que o buffer pool quase não é tocado. E, sim, essas são todas as tabelas InnoDB:
SELECT Engine, COUNT(*) "Count"
FROM Information_Schema.Tables
WHERE table_schema = 'My_Database'
GROUP BY Engine;
Contagem do motor ----- ----- InnoDB 169
O que poderia estar acontecendo aqui?
Tolo que sou... o servidor foi reiniciado esta manhã. Percebi isso quando estava terminando a pergunta. O buffer pool não será preenchido até que o banco de dados realmente precise usar tantos dados. De fato, se eu executar novamente a consulta do buffer pool, posso ver o número de "buffers livres" diminuir lentamente.
Eu poderia executar algumas consultas para forçar as tabelas na memória, mas como sei que não tenho memória suficiente para todos (espero resolver isso em breve), devo apenas esperar e deixar meus usuários dizerem ao banco de dados quais dados são mais importantes.
Se você estiver executando o 5.6+, poderá fazer o dump do servidor e pré-carregar o buffer pool adicionando algumas configurações a my.cnf, em vez de esperar que ele aqueça após cada reinicialização.
innodb_buffer_pool_dump_at_shutdown=ON innodb_buffer_pool_load_at_startup=ON
https://dev.mysql.com/doc/refman/5.6/en/innodb-preload-buffer-pool.html