Eu tenho um site Drupal e estou com problemas de desempenho. Encontrei Como converter um banco de dados do MyISAM para o InnoDB? indicando que o desempenho pode melhorar alternando.
Como posso saber se meu banco de dados MySQL é InnoDB ou MyISAM?
Eu tenho um site Drupal e estou com problemas de desempenho. Encontrei Como converter um banco de dados do MyISAM para o InnoDB? indicando que o desempenho pode melhorar alternando.
Como posso saber se meu banco de dados MySQL é InnoDB ou MyISAM?
Respostas:
Você pode executar uma consulta personalizada:
SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name'
para listar todas as tabelas em seu banco de dados e o mecanismo usado para cada um.
Como alternativa, você pode fazer login no seu banco de dados usando o phpMyAdmin e selecionar seu banco de dados ... você verá o mecanismo na Type
coluna da lista de tabelas.
Pessoalmente, eu recomendaria o Navicat para MySQL , é uma GUI MySQL muito boa e facilita muito a descoberta de coisas como essa.
Fonte: http://www.electrictoolbox.com/mysql-table-storage-engine/
SHOW TABLE STATUS
. Para obter uma contagem simples de quantas tabelas existem em cada tipo de mecanismo, é isso SELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
.
Apenas tentar as coisas para obter um site mais rápido é como mudar de carro às cegas e espero que você consiga um mais rápido na próxima vez.
Primeiro experimente os frutos baixos, se não ajudar, tente encontrar o gargalo real.
Geralmente, é apenas uma consulta lenta ao banco de dados que precisa de um índice ou de um módulo que faz as coisas de maneira lenta.
Eu também descobri grandes diferenças entre hosters. Se você instalar um drupal novo imediatamente, o desempenho está bom? Caso contrário, é hora de procurar outro hoster.
Minha melhor experiência foi decidir por tabela. O InnoDB é bom, porque pode evitar o bloqueio de tabelas (nenhum outro processo pode ler de uma tabela enquanto um processo é gravado), mas funciona muito bem com COUNT (), que é usado frequentemente para consultas de pager.
(Editar: veja o comentário do Clives abaixo)
Também existem implicações na sua configuração do MySQL, dependendo do banco de dados que você está usando. Se você tem acesso ao servidor, o mysqltuner deve ser sua primeira etapa, para verificar a configuração:
COUNT
consultas, de acordo com este artigo do ex-gerente do High Performance Group para MySQL, apesar de realmente afetar apenas uma consulta que contém COUNT(*)
sem uma WHERE
cláusula.
SELECT COUNT(*) FROM table
pode retornar instantaneamente com esse valor. O InnoDB não faz, portanto, ele deve verificar todo o índice de chave primária. Dito isto, enquanto o Drupal faz muito SELECT COUNT(*)
, só consigo pensar em um lugar no código inteiro que o faz sem uma WHERE
cláusula. Portanto, não use o MyISAM por motivo de preocupação com essa edição específica. O InnoDB com um buffer pool de tamanho decente será mais rápido para todas as consultas do mundo real.
FWIW, nosso site Drupal 6.x de quase 20K nós estava com alguns problemas de desempenho e escolhi mudar todas as tabelas para o InnoDB. Foi fácil e a maneira como lidei com isso foi usar o mysqldump para despejar todo o conteúdo em um arquivo sql, usar um editor (sed) para substituir todas as ocorrências do MyISAM para o InnoDB e recarregar o banco de dados a partir desse arquivo. Uma das desvantagens é que você não pode recuperar espaço de um banco de dados InnoDB (IIRC), mas contanto que mantenha suas tabelas duplicadas em um banco de dados separado, não deverá ter problemas. Ah, e vimos um aumento significativo no desempenho. E como temos quatro instâncias do Drupal, o grande número de arquivos de tabela foi eliminado do sistema de arquivos (sim, eles estão contidos no próprio arquivo InnoDB). Este é o meu valor de $ .02.
innodb_file_per_table
opção.
for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. Adicione opções apropriadas ( -uroot -psomepass
, por exemplo) aos dois mysql
s, se necessário.
Apenas um aviso. Se você estiver no Drupal 6, você pode instalar o módulo DBTuner ; ele pode facilmente mover suas tabelas do MyISAM para o InnoDB. Então, sim, há um módulo para isso!