grande número de tabelas InnoDB mais SHOW TABLE STATUS

1

Temos várias centenas de tabelas InnoDB em um banco de dados e usamos o phpMyAdmin para gerenciá-las. Infelizmente, o phpMyAdmin faz uma consulta SHOW TABLE STATUS sempre que a lista de tabelas é mostrada, e isso parece cavar em cada tabela InnoDB para obter uma contagem aproximada de linhas.

Isso parece bloquear todo o banco de dados, o que subseqüentemente significa que todas as outras consultas a esse banco de dados (ocupado) enfileiram até que o banco de dados atinja os usuários máximos.

  1. O SHOW TABLE STATUS pode ser acelerado de uma maneira razoável?
  2. O phpMyAdmin pode ser facilmente modificado para não realizar uma consulta SHOW TABLE STATUS completa, ou pelo menos não bloquear todo o banco de dados de uma só vez?
por ceejayoz 25.07.2012 / 19:26

2 respostas

1

Acabamos de descobrir a innodb_stats_on_metadata configuração , que parece Faça o truque. Desativa o mergulho do InnoDB nos índices para obter contagens aproximadas.

    
por 25.07.2012 / 20:08
0

SHOW TABLE STATUS não bloqueia tabelas - pelo menos, eu certamente nunca encontrei isso. Além disso, a contagem de linhas para InnoDB em SHOW TABLE STATUS é apenas uma estimativa, então definitivamente não está fazendo um COUNT(*) ou equivalente moral. O que você recebe de um SHOW PROCESSLIST enquanto o SHOW TABLE STATUS está sendo executado?

Uma possibilidade para investigar: seu table_open_cache pode ser muito pequeno, fazendo com que você fique preso fechando e reabrindo muitas tabelas durante a execução da sua consulta de status.

    
por 25.07.2012 / 19:42

Tags