Você deve dar uma olhada no "InnoDB Change Buffering"
Eu tenho um computador PI Raspberry com algum dispositivo de medição e um script que faz uma medição a cada cinco minutos e armazena o resultado no banco de dados MySQL. Eu configurei o servidor MySQL para manter o banco de dados em HDD USB externo, a fim de minimizar o desgaste no cartão SD usado como sistema de arquivos raiz na Rpi.
Dados inteiros salvos no meu HDD a cada cinco minutos consistem em apenas alguns números - dois números como resultado, timestamp e id como chave primária para a tabela MySQL - e o servidor MySQL continua gravando no disco toda vez que um novo os dados estão disponíveis. Isso faz com que o disco aumente a cada cinco minutos, o que aumenta o uso de energia e desgasta o HDD. Existe uma maneira de configurar o MySQL para armazenar alguns dados em RAM até que ele tenha o suficiente para gravar no HDD? Presumo que a configuração padrão seja otimizada para grandes quantidades de dados em períodos curtos e confiabilidade no caso de, por exemplo. falta de energia, mas na verdade não me importo com nenhum desses. Mesmo que ocorra uma falha de energia (bastante improvável), não será um problema se eu perder alguns resultados mais do que o necessário de qualquer maneira.
Eu examinei a documentação do MySQL e pesquisei por ela, mas todos os recursos relacionados ao uso do MySQL e do disco parecem se concentrar em aumentar o rendimento do HDD ou otimizá-lo para tempos de resposta rápidos.
Caso seja importante, mysqld -V
retorna:
mysqld Ver 5.5.46-0+deb7u1 for debian-linux-gnu on armv7l ((Debian))
EDITAR:
Eu percebo que estou usando o MySQL um pouco como um golden hammer aqui - o MySQL nunca foi escrito com o meu tipo de aplicativo em mente. Talvez alguém possa propor uma solução alternativa para o meu problema que exigiria uma quantidade semelhante de trabalho para configurar.
Você deve dar uma olhada no "InnoDB Change Buffering"
Eu encontrei uma maneira de contornar meu problema que não depende da configuração do servidor, mas do esquema do banco de dados. Eu criei matriz adicional com a configuração de armazenamento engine=memory
, onde o processo de medição adicionou dados. Eu também adicionei uma tarefa cron que move dados dessa tabela temporária para uma baseada em disco. Ele está sendo executado a cada duas horas e no desligamento do sistema, então não acho que seja provável que eu perca muitos dados. Eu também precisei modificar minhas consultas SQL selecionando de ambas as tabelas e combinando os conjuntos de resultados usando 'UNION'.
Esta configuração pode não ser utilizável para todos que desejam minimizar o acesso ao disco MySQL e se eu encontrar outra solução (incluindo um servidor de banco de dados diferente que seja transparente na rede e permita consultas simples) que possa ser configurada para usar o HDD tão pouco quanto possível, vou postar aqui.
Tags mysql configuration linux