sql >> Base de Datos >  >> RDS >> Mysql

Mejores prácticas para crear índices en sus tablas MySQL:compilaciones de índices móviles

Al tener índices apropiados en sus tablas de MySQL, puede mejorar en gran medida el rendimiento de las consultas SELECT. Pero, ¿sabía que agregar índices a sus tablas en sí mismo es una operación costosa y puede llevar mucho tiempo completarla según el tamaño de sus tablas? Durante este tiempo, también es probable que experimente un rendimiento degradado de las consultas, ya que los recursos del sistema también están ocupados en el trabajo de creación de índices. En esta publicación de blog, discutimos un enfoque para optimizar el proceso de creación de índices de MySQL de tal manera que su carga de trabajo habitual no se vea afectada.

Creación de índice móvil de MySQL

A este enfoque lo llamamos "Creación de índice móvil". Si tiene un conjunto de réplicas maestro-esclavo de MySQL, puede crear el índice de un nodo a la vez de forma progresiva. Debe crear el índice solo en los nodos esclavos para que el rendimiento del maestro no se vea afectado. Cuando se completa la creación del índice en los esclavos, degradamos el maestro actual y promovemos uno de los esclavos que está actualizado como el nuevo maestro. En este momento, la construcción del índice continúa en el nodo maestro original (que ahora es un esclavo). Habrá una breve duración (decenas de segundos) durante la cual perderá la conectividad con su base de datos debido a la conmutación por error, pero esto se puede solucionar con reintentos en el nivel de la aplicación.

Beneficios de rendimiento de la creación de índices móviles

Hicimos un pequeño experimento para comprender los beneficios de rendimiento de la creación de índices móviles.

La prueba utilizó un conjunto de datos MySQL creado con Sysbench que tenía 3 tablas con 50 millones de filas cada una. Generamos carga en el maestro MySQL con 30 clientes ejecutando una carga de trabajo equilibrada (50 % de lectura y 50 % de escritura) durante 10 minutos y, al mismo tiempo, construimos un índice secundario simple en una de las tablas en dos escenarios:

  1. Crear el índice directamente en el maestro
  2. Creando el índice en el esclavo

Configuración del banco de pruebas de MySQL

Tipo de instancia de MySQL Instancia EC2 m4.large con 8 GB de RAM
Tipo de implementación Conjunto maestro-esclavo de 2 nodos con replicación semisincrónica
Versión de MySQL 5.7.25

Resultados de rendimiento

Escenario Rendimiento de la carga de trabajo (consultas por segundo) Latencia del percentil 95
Creación de índice en maestro 453,63 670 ms
Creación de índice móvil 790.03 390 ms

Para llevar

Al ejecutar la creación de índices directamente en el maestro de MySQL, pudimos experimentar solo el 60 % del rendimiento que se logró al ejecutar la creación de índices en el esclavo de MySQL a través de una operación continua. La latencia del percentil 95 de las consultas también fue 1,8 veces mayor cuando la creación del índice se produjo en el servidor principal.

Mejores prácticas para crear índices en sus tablas #MySQLHaga clic para twittear

Automatización de la creación de índices móviles

ScaleGrid automatiza la creación de índices móviles para su implementación de MySQL con una interfaz de usuario simple para iniciarla.

En la interfaz de usuario anterior, puede seleccionar el nombre de su base de datos y tabla, y 'Agregar índice' como operación de modificación de tabla. Luego, especifique un nombre de columna y un nombre de índice, y se generará y mostrará un comando de modificación de tabla. Una vez que haga clic en Crear, la creación del índice ocurrirá un nodo a la vez de manera continua.

Además, ScaleGrid también admite otras operaciones simples de modificación de tabla, como agregar una nueva columna a su tabla de forma continua. ¡Estén atentos a mi siguiente publicación de blog con más detalles!