Uma reinicialização do mysqld irá disparar tabelas de flush?

1

Gostaria de saber se um 'service mysqld restart' executará automaticamente uma limpeza de tabelas antes de reiniciar o serviço.

Eu tenho o Fedora / CentOS com 5.0.77 com principalmente tabelas MyISAM, milhares delas.

    
por Bastien974 21.07.2011 / 16:58

1 resposta

2

Sim, vai. De fato, se você tiver o InnoDB, todas as páginas sujas no InnoDB Buffer Pool serão liberadas para o disco como parte do processo de desligamento.

Se você quiser acelerar essa operação, você deve definir o seguinte parâmetro em /etc/my.cnf

[mysqld]
innodb_max_dirty_pages_pct=0

Definir innodb_max_dirty_pages_pct como zero (0) mantém o buffer do InnoDB Agrupe até o mínimo de páginas sujas, mas aumentará um pouco a E / S do disco, liberando o InnoDB Buffer Pool com um pouco mais de frequência.

O padrão para innodb_max_dirty_pages_pct é 75 no MySQL 5.5 e 90 antes do MySQL 5.5.

Isso agilizará o desligamento do mysql, pois haverá menos para liberar. Isso será ainda mais perceptível na versão.

Se você quiser limpar o InnoDB Buffer Pool sem 'service mysqld restart', execute este

SET GLOBAL innodb_max_dirty_pages_pct = 0;

Se a replicação estiver envolvida, o STOP SLAVE também será executado automaticamente.

Se você tiver o MyISAM, todas as tabelas MyISAM serão liberadas também, porque se uma tabela MyISAM não for liberada (digamos, no caso de uma falha), as tabelas MyISAM que estavam abertas no momento de uma falha ainda terão um contagem de arquivos abertos diferente de zero em seus cabeçalhos. Isso marca uma tabela MyISAM como travada. Você precisaria executar REPAIR TABLE novamente nessa tabela.

O mesmo acontece com o InnoDB se as tabelas não tiverem dados consolidados gravados, mas os mantiverem no ib_logfiles, assim, a recuperação de falhas é executada na fase de inicialização do mysqld.

Assim, 'service mysqld restart' tem que impor FLUSH TABLES para MyISAM e InnoDB.

    
por 21.07.2011 / 17:16