Estou procurando ajuda para entender o que acontece quando a seguinte linha de comando é executada:
root@prodn$ service mysqld stop
Sim, ele desliga o servidor MySQL, portanto, o acesso a ele não fica mais disponível até que o serviço seja iniciado novamente. No entanto, mais especificamente, existe algo mais que acontece quando o serviço é interrompido? Perdoe meu novato aqui, mas quando o mysqld é reiniciado, isso significa que os logs foram liberados, alguma memória liberada, caches esvaziados etc.?
O motivo pelo qual pergunto é o seguinte:
Nosso banco de dados DB é um banco de dados MySQL e, nos últimos 4 meses, levou em média 8,5 horas.
Na quarta-feira passada, parei o serviço mysql e o reiniciei após 30 minutos. Desde então, começo a notar uma grande melhoria no desempenho geral - os processos SELECT / INSERT / UPDATE / DELETE eram mais eficientes. O DW terminou quase 4 horas antes com o mesmo número de linhas de dados
No entanto, a cada dia que passa, de 15 a 20 minutos são adicionados à hora de término. Portanto, suspeito que talvez seja necessário reiniciar o serviço semanalmente.
Existe uma explicação para esse comportamento? Não sei que outras questões são relevantes, mas seria brilhante saber o que acontece quando o mysqld
serviço é reiniciado.
Alguém pode esclarecer isso, por favor?
fonte
Respostas:
Quando você emite
service mysql stop
, muito mais acontece do que apenas interromper o DB Connectivity. O link no comentário de @ethrbunny já explica o que acontece.Eu gostaria de focar em um aspecto específico: o InnoDB Buffer Pool. O InnoDB precisa liberar as páginas sujas do buffer pool do InnoDB. Se você quiser saber quanto, execute isso antes do desligamento:
Isso informará a quantidade de dados que precisa ser liberada do InnoDB Buffer Pool.
Lembre-se de que o InnoDB possui muitas partes móveis no espaço de tabela do sistema (o arquivo
ibdata1
). Clique aqui para ver a representação pictórica de toda a infraestrutura do InnoDB .Algumas informações transacionais são gravadas de maneira que o Crash Recovery seja executado quando você executa
service mysql start
.OPCIONAL
É possível obter todos os dados liberados e todas as transações confirmadas corretamente do ibdata1 e dos Logs de transações (
ib_logfile0
,ib_logfile1
) executando esteantes de correr
De uma chance !!!
UPDATE 2013-04-24 07:17 EDT
Como você tem o MyISAM como o principal mecanismo de armazenamento, a única coisa que acontece é a liberação das alterações de índice em todos os
.MYI
arquivos com alterações pendentes.Eu também gostaria de recomendar que, no próximo encerramento do mysqld, execute isso de antemão em outra sessão:
e observe as mensagens que passam e veja o que diz o que o mysqld está fazendo com qualquer mecanismo de armazenamento. Se você não tem absolutamente nenhuma tabela do InnoDB em uso, pense em desativar o InnoDB com
pois isso permitirá uma inicialização mais rápida e, possivelmente, um desligamento mais rápido.
fonte