Por que Replicação Atrasa no MySQL?

Recentemente respondi algumas questões referente a lag(atraso) na replicação, o que percebi é que muita gente não intende corretamente como este processo funciona internamente no MySQL e o porque do lag acontecer:

Veja a figura abaixo, ela representa replicação assíncrona no MySQL, recomendo que você leia meu outro post sobre o assunto:

“Como Funciona A Replicação No MySQL?”

How replication works

Como pode ser visto, existe uma grade diferença quanto ao ponto de entrada de dados no master e no slave, enquanto o master possui múltiplas threads inserindo/alterado/deletando dados ao mesmo tempo, no slave, existe somente uma única thread responsável por aplicar todas essas transações no banco de dados.

Vamos imaginar que uma transação(UPDATE por exemplo) demorou 50 segundos para rodar no master, durante e depois este período, outras conexões executaram comandos no master, o que vai acontecer quando o slave receber e executar essa transação? Isso mesmo, as demais transações pendentes e que forem sendo inseridas no relay log, vão ter que esperar a SQL_THREAD terminar de executar a transação(o nosso UPDATE que demorou 50 segundos no master) para serem processadas.

Se você utiliza MySQL a partir da versão 5.6.3 e sua aplicação divide os dados em múltiplos bancos internamente no MySQL, você pode minimizar este “gargalo” utilizando slave-parallel-workers, com esta opção você poderá configurar o numero de SQL_THREAD'S para executar transações simultâneas desde que elas sejam em banco de dados diferentes.

Gostou ? Ajude e Compartilhe!
Esta entrada foi publicada em binlog, performance, replicacao. Adicione o link permanente aos seus favoritos.