terça-feira, 11 de março de 2014

Planejando o tempo de inatividade MySQL e outras variáveis ​​de estado para revisão

Original post: http://anothermysqldba.blogspot.com/2014/03/planning-mysql-downtime-and-other.html

Todos nós sabemos que, enquanto o MySQL é estável e pode funcionar por um tempo muito longo sem reiniciar. De vez em quando nós precisamos reiniciar a ele ajustar algumas variáveis ​​ou para atualizar embora. Alguns poderiam supor que durante a noite é o melhor momento para fazer isso, porque os seus usuários estão dormindo. No entanto, muitas vezes durante a noite também inclui backups e outros scripts crontab relatou que poderia estar fazendo diferente mineração de dados e etc

Então, como você pode obter uma orientação sobre quando você tem a menor atividade no servidor? Agora cada aplicação e banco de dados são diferentes, por isso você precisa levado em conta que a atividade relacionada está em execução, durante os prazos diferentes. Se você começar a registrar a variável de status "threads_connected" a cada minuto para 5 a 10 minutos, mais uma vez isso depende de como o sistema é carregado uma vez por hora pode ser bom, você vai em breve reunir a quantidade de diferentes conexões MySQL através de seu login de tempo quadro.

Isto pode ser feito de uma de numerosas maneiras. Ele já está previsto em muitas ferramentas de nível corporativo e você pode escrever scripts e etc, mas apenas para mantê-lo no MySQL. Vou usar um evento e de rotina para este exemplo simples.

Criar uma tabela simples:

CREATE TABLE `threads_count` (
`threads_count_id` int(11) NOT NULL AUTO_INCREMENT,
`variable_value` varchar(255) DEFAULT NULL,
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`threads_count_id`)
) ENGINE=InnoDB;

Criar uma rotina simples:

delimiter //
CREATE PROCEDURE threads_tally()
BEGIN
INSERT INTO threads_count SELECT NULL , VARIABLE_VALUE , NOW() FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME IN ('Threads_connected');
END//
delimiter ;

Criar um evento simples:

SET GLOBAL event_scheduler = ON;
CREATE EVENT `threads_tally`
ON SCHEDULE EVERY 5 MINUTE
DISABLE ON SLAVE
COMMENT 'keeps a count of Threads_connected'
DO
CALL threads_tally();
DELIMITER ;

Agora, mas a implementação do exemplo acima, você terá uma tabela que você pode selecionar os valores de (provavelmente colocado em um gráfico ou apenas para revisão), assim você pode ver quando o menor número de conexões existia em seu servidor. Dependendo da aplicação e do tráfego que você pode manter esta funcionando o tempo suficiente para ganhar uma perspectiva válida e, em seguida, desativar o evento.

select variable_value , time_recorded FROM threads_count;

Agora você pode naturalmente levar isso um passo adiante, se você não tem ferramentas da empresa, e manter um registro de todas as suas variáveis ​​de estado para a revisão:

Tabela para valores:

CREATE TABLE `status_review` (
`status_review_id` int(11) NOT NULL AUTO_INCREMENT,
`variable_name` varchar(255) DEFAULT NULL,
`variable_value` varchar(255) DEFAULT NULL,
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`status_review_id`)
) ENGINE=InnoDB;

Rotina para recolher os valores:

delimiter //
CREATE PROCEDURE status_reviews()
BEGIN
INSERT INTO status_review SELECT NULL , VARIABLE_NAME, VARIABLE_VALUE , NOW() FROM information_schema.GLOBAL_STATUS;
END//
delimiter ;

Evento para executar rotina:

SET GLOBAL event_scheduler = ON;
CREATE EVENT `status_reviews`
ON SCHEDULE EVERY 1 HOUR
DISABLE ON SLAVE
COMMENT 'keeps a eye on status values'
DO
CALL status_reviews();
DELIMITER ;

Você pode apenas querer certos nomes de variáveis ​​e valores para a revisão e você pode ajustar a consulta na rotina de acordo. O tempo de execução é dependente de suas necessidades, eu usei uma hora neste exemplo.

Isto, obviamente, que vai gerar uma grande quantidade de informações ao longo do tempo para que se relevante uma limpeza fora destas tabelas ao longo do tempo pode ser necessário. Tudo depende de quantas vezes você registrar e analisar as informações fornecidas.

Enquanto você vai ver um aumento constante de muitos dos valores por causa de seu crescimento de dados e sistema de usar, você também será capaz de identificar pontos de dados nos dados como e correlacionar isso com a sua aplicação e uso do sistema.

Empresa MySQL por exemplo, já cria um gráfico todo este tipo de informação para você, mas esta é uma maneira que você também pode fazê-lo com um pouco de tempo e revisão dos dados.