Isso está relacionado a esta questão . Ajuda a obter melhor desempenho para tabelas do InnoDB.
De acordo com o manual do MySQL , innodb_flush_log_at_trx_commit
é uma variável dinâmica global. Assim, eu posso alterá-lo usando o comando SET GLOBAL e parece estar funcionando.
mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2;
Query OK, 0 rows affected
mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2 |
+--------------------------------+-------+
1 row in set
Mas isso não alterou a configuração real do MySQL. Quando atualizei o my.cnf e reiniciei o servidor MySQL, ele funcionou. Então, não posso alterar a variável global em tempo de execução?
Prefiro o valor padrão innodb_flush_log_at_trx_commit=1
, mas preciso alterá-lo para 2 antes de executar um processo de restauração para que um banco de dados grande fique mais rápido. Mas quando o processo terminar, quero alterar o valor novamente para 1. É possível fazer isso em tempo de execução?
Não tenho acesso ao my.cnf no meu servidor de hospedagem compartilhada.
fonte
SET GLOBAL max_connections = 1000;
e quando corroSHOW VARIABLES LIKE 'max_connections';
para ver o valor antigo deixaria mal-humorado até eu sair e entrar novamente. +1 para esse ponto de vista que é dado como certo e muitas vezes esquecido.connect
é realmente novo para mim no MySQL. Eu já fiz isso um milhão de vezes no PostgreSQL e Oracle. Eu nunca pensei de MySQL permitindo queconnect
). Com o valor 2, a importação de 2.241.319 registros levou 27 minutos e 43 segundos, enquanto levou cerca de 1 dias com o valor 1. A configuração parece estar funcionando na sessão atual, mas restaurou a configuração original (demy.cnf
) após a reinicialização.innodb_flush_log_at_trx_commit
? Ou será que, para todas as configurações, definir oglobal
não afetaria a sessão atual?Ao definir innodb_flush_log_at_trx_commit , você corre o risco de confusão com a interoperabilidade do mysqld / OS. Digo isso porque o sistema operacional está sendo confiável para executar o flush.
Observe o cuidado na documentação do MySQL
O que isso diz é o seguinte: O sistema operacional pode mentir como um marido traidor. O sistema operacional diz que vai liberar para o disco e simplesmente não faz isso. Portanto, mesmo que você defina innodb_flush_log_at_trx_commit, você deve separar a liberação do SO para o disco da liberação do mysqld para o disco.
Tente definir innodb_flush_method como O_DIRECT se você ainda não o fez. Você pode ver uma diferença porque o método flush difere bastante (veja meu
Mar 04, 2011
post sobre esclarecimentos sobre a variável innodb_flush_method do MySQL ).EMBARGO
Como você mencionou, você não tem acesso
my.cnf
. Entre em contato com o SysAdmin do seu provedor e altere o innodb_flush_method .UPDATE 2012-12-10 12:45 EDT
Atualmente, estou executando o MySQL 5.5.12 no meu PC. Quando conecto e corro
show variables like 'innodb_flush_method';
, receboComo está em branco, apenas indica que a configuração padrão é usada. Por favor, leia minha postagem em 04/03/2011 para esclarecimentos sobre a variável innodb_flush_method do MySQL
fonte
innodb_flush_method
emmy.ini
(nãomy.cnf
). Informações do servidor - Apache 2.4.1, PHP 5.4.4, MySQL 5.5innodb_flush_method
configuração eSHOW VARIABLES
não a mostra.my.ini
oumy.cnf
não é uma variável dinâmica, não sei como configurá-lo.