Existe uma maneira pela qual você pode medir o atraso de replicação no MySQL com uma resolução de menos de 1 segundo?
Ou seja, o atraso de replicação pode ser medido no nível de microssegundo ou milissegundo?
Existe uma maneira pela qual você pode medir o atraso de replicação no MySQL com uma resolução de menos de 1 segundo?
Ou seja, o atraso de replicação pode ser medido no nível de microssegundo ou milissegundo?
Você já experimentou o batimento cardíaco maatkit ? Este é o que estou usando atualmente. Você precisará de outro processo perl em execução, mas, do meu ponto de vista, isso é muito mais útil do que o mecanismo MySQL atual.
Também estou usando mk-slave-delay para gerar lag. Eu mantenho um lag de 1 hora em um dos escravos para ter uma camada extra de proteção em caso de injeção de SQL ou erros do usuário.
Esses dois scripts fazem o truque.
Saudações
Como uma resposta rápida e suja, você pode querer usar o código-fonte e criar um UDF para fazer a replicação monitorar o atraso em microssegundos .
No entanto, pensei em um método interessante para descobrir uma abordagem mais granular para a replicação.
Crie um banco de dados (replagdb) cujo único objetivo seja registrar esse carimbo de data/hora granular. No banco de dados replagdb, crie uma tabela que contenha apenas um número de ponto flutuante representando o carimbo de data/hora.
Crie um script perl que abra uma conexão de banco de dados no mestre e, em um loop infinito, execute isso no mestre:
Deixando isso replicar do mestre para o escravo, você pode executar isso no escravo:
df representará o atraso de replicação como um número de ponto flutuante de precisão dupla.
Para evitar o crescimento massivo do log de retransmissão no escravo, você deve definir max_relay_log_size como 8G no escravo. Você também deve monitorar cuidadosamente a taxa de crescimento dos logs binários de seu mestre.
A ferramenta mk-heartbeat do Maatkit tem suporte para timestamps com precisão de microssegundos em versões recentes. Isso fará o que você está procurando.
Existem vários problemas para inventar uma métrica de atraso de replicação precisa.
Se o seu escravo estiver do outro lado do mundo, você pode ter um atraso de 200ms apenas por causa da distância da conexão.
Da mesma forma, se você estiver monitorando daqui, mas seu escravo estiver lá, suas informações ficarão mais 200ms desatualizadas.
Se você injetar um batimento cardíaco preciso, tudo o que ele diz é o atraso naquele batimento cardíaco; não diz nada sobre a longa declaração que começou logo depois. Nem as declarações que estão enfileiradas por trás dessa declaração.
Se você injetar uma pulsação abaixo de um segundo com muita frequência, diminuirá a velocidade da replicação.
Como você espera "usar" um batimento cardíaco preciso?