services pricing prices multi espaƱol aws mysql amazon-web-services amazon-rds database-replication

pricing - Problemas de AWS RDS MySQL Read Replica Lag



mysql aws rds (1)

La replicación de Mysql ejecuta todas las transacciones en una única base de datos en orden, y maestro: puede ejecutar esas transacciones en paralelo.

Probablemente tenga la mayoría de las actualizaciones ejecutadas en un DA único, y eso es lo que no le permite obtener ventaja de la replicación multiproceso.

Verifique el iostat en su servidor de réplica. La mayoría de las veces, esos problemas ocurren debido al alto IO en la máquina.

Para disminuir el IO en una máquina, hay varios cambios adicionales que puede hacer:

  • Aumente innodb_buffer_pool_size ; esto es lo primero que debe cambiar de forma predeterminada. Si esta instancia solo ejecuta mysql, aquí puede asignar aproximadamente el 80% de la memoria disponible.

  • Verifique también los siguientes parámetros:

    log_slave_updates = false binlog_format = STATEMENT

    (Si tiene MIXED o ROW binlog_format configurado, verifique que comprenda qué significa eso aquí http://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html

  • Si tiene muchos datos que se modifican varias veces, aumentar

    innodb_max_dirty_pages_pct a 90 o 95% puede valer la pena verificar.

Ejecuto un servicio que debe ser capaz de admitir más de 4000 IOPS y mantener el retraso de reproducción de <= 1 segundo para que funcione correctamente.

Estoy usando instancias AWS RDS MySQL y tengo 2 réplicas de lectura. Mi servicio experimentaba picos de retraso de réplica gigantes en la réplica de lectura, así que estuve en contacto con el soporte de AWS durante una semana para tratar de comprender por qué estaba experimentando el retraso: tenía 6000 IOPS provisionados y mis instancias eran muy potentes. Me dieron todo tipo de razones.

Después de cambiar los tipos de instancias, actualizar a MySQL 5.6 de 5.5 para aprovechar el multihilo y reemplazar el hardware subyacente, todavía estaba viendo un retraso significativo de la réplica al azar.

Eventualmente decidí comenzar a retocar los grupos de parámetros cambiando mis configuraciones solo por las réplicas de lectura en cualquier cosa que pudiera encontrar que estuviese involucrada en el proceso de replicación y ahora finalmente estoy experimentando <= 1 segundo de demora de réplica.

Aquí están las configuraciones que modifiqué y sus valores que parecen ser exitosos (copié el grupo de parámetros predeterminado mysql 5.6 y cambié estos valores aplicando el grupo de parámetros actualizado a solo las réplicas leídas):

innodb_flush_log_at_trx_commit=0 sync_binlog=0 sync_master_info=0 sync_relay_log=0 sync_relay_log_info=0

Lea acerca de cada uno de estos para comprender el impacto de las modificaciones: http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html

Otras cosas para asegurarse de que se ocupe de:

Convert any MyISAM tables to InnoDB Upgrade from MySQL < 5.6 to MySQL >= 5.6 Ensure that your provisioned IOPS are > the combined read/write IOPS you require Ensure that your read replica instances are >= master instance

Si alguien más tiene algún parámetro adicional que pueda modificarse en la réplica de lectura o en el DB maestro para obtener el mejor rendimiento de replicación, me encantaría saber más.

ACTUALIZACIÓN 7-8-2014

Para aprovechar la replicación multiproceso Mysql 5.6 que he configurado:

slave_parallel_workers=5 (Set it to the number of read replica DBs you have running)

Encontré esto en esto aquí:

https://blogs.oracle.com/MySQL/entry/benchmarking_mysql_replication_with_multi