Veja Como o MySQL abre / fecha as tabelas no manual oficial para uma muito boa descrição do cache de tabela e como ele é usado junto com alguns comentários úteis. Cada tabela usada em uma consulta pode ter várias alças para cada conexão, o que significa que, se você tiver uma alta simultaneidade de solicitação e usar consultas que contenham muitas tabelas, cada tabela poderá exigir dezenas de identificadores.
Uma coisa útil que você pode fazer é usar alguma forma de monitoramento para verificar os valores de open_table / opened_tables a cada minuto ou mais e ver como eles se comportam. No meu caso, é fácil ver que picos repentinos no tráfego são causas prováveis de grandes aumentos em open_tables.
Há também essa pergunta SO , que é muito parecida com a sua.