es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Múltiples instancias de una base de datos Aurora MySQL. Solo una de ellas no utiliza el índice posible.

Me encontré con un problema de rendimiento con una consulta grande y la descompongo usando el comando explain. El entorno de desarrollo y el de producción están bien, pero la base de datos de control de calidad (QA) está teniendo problemas.

Aquí tienes un explain modificado para que no revele información confidencial:

EXPLAIN SELECT COUNT(*)
FROM  table1 t1
LEFT OUTER JOIN table2 t2 ON t2.correlation_id = t1.correlation_id
WHERE t2.request_id = '<varchar(100) aquí="">';

En una instancia de la base de datos de desarrollo, obtengo lo siguiente:

select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, extra
SIMPLE, t2, , ref, request_id, request_id, 1022, const, 3753, 100, Using where
SIMPLE, t1, , eq_ref, "correlationIdUniqueConstraint, idx_correlation_id", correlationIdUniqueConstraint, 402, dev_db.t2.correlation_id, 1, 100, Using index

La producción es muy similar o idéntica. Por lo tanto, todo parece estar bien hasta ahora.

Sin embargo, en la base de datos de control de calidad (QA), obtengo lo siguiente:

select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, extra
SIMPLE, t2, , ref, request_id, request_id, 1022, const, 1176, 100, <null>
SIMPLE, t1, , ALL, "correlationIdUniqueConstraint, idx_correlation_id", , , , 3271577, 10, Range checked for each record (index map: 0x40000004)

Utilicé la herramienta de comparación de esquemas en DataGrip para hacer que las bases de datos de desarrollo y control de calidad (QA) sean iguales. La única diferencia serían las filas / recuentos exactos. Sin embargo, en términos de filas, Producción > QA > Desarrollo y, sin embargo, Producción y Desarrollo están bien.

Información del esquema relevante:

  • request_id cuenta con un índice.
  • correlation_id es una cadena de caracteres (varchar) de longitud 100 tanto en t1 como en t2.
  • La restricción de unicidad y el índice de correlation_id existen en t1.

Confirmé con la siguiente consulta:

SELECT CHAR_LENGTH(correlation_id)
FROM merchant_analysis
WHERE CHAR_LENGTH(correlation_id) > 90;

Que no hay correlation_id que excedan los 90 caracteres, y mucho menos 100.

Información de la base de datos:

  • Versión de MySQL Aurora 5.7.2.07.2
  • Memoria RAM de QA y producción > Memoria RAM de desarrollo

Espero que alguien haya tenido un problema similar antes y no tenga que recrear la base de datos de control de calidad (QA).</varchar(100)>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Análisis del problema de rendimiento con una consulta larga

    Un experto en TI especializado en mysql, base de datos, amazon-aurora, e índices de bases de datos se enfrentó a un problema de rendimiento con una consulta larga en la base de datos de QA. El experto dividió la consulta con la ayuda de EXPLAIN y descubrió que en la base de datos de QA la consulta era diferente a la de las instancias de desarrollo y producción.

    A continuación se muestra el declaración se EXPLAIN anonimizada utilizada para analizar la consulta:

    EXPLAIN SELECT COUNT(*)
    FROM  tabla1 t1
    LEFT OUTER JOIN tabla2 t2 ON t2.correlation_id = t1.correlation_id
    WHERE t2.request_id = '<aquí va el varchar(100)>';
    

    En la instancia de desarrollo y la instancia de producción, la salida de la declaración EXPLAIN parecía estar bien. Sin embargo, en la base de datos de QA, el experto encontró que la declaración EXPLAIN mostraba problemas de rendimiento.

    select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, extra
    SIMPLE,t2,,ref,request_id,request_id,1022,const,1176,100, <null>
    SIMPLE,t1,,ALL,"correlationIdUniqueConstraint,idx_correlation_id",,,,,3271577,10,Verificación de rango para cada registro (mapa de índices: 0x40000004)
    

    El experto utilizó la herramienta de comparación de esquemas en Datagrip para igualar las bases de datos de Desarrollo y QA, y aparte de las filas y recuentos exactos, no hubo otras diferencias. Sin embargo, el problema persistió y no parecía haber IDs de correlación que superaran los 100 caracteres ni siquiera los 90 caracteres.

    A continuación se presentan algunos datos relevantes del esquema y la base de datos:

    • request_id tiene un índice.
    • correlation_id es varchar(100) en ambas tablas.
    • La restricción de unicidad y el índice de correlation_id existen en tabla1.
    • La base de datos es 5.7.mysql_aurora.2.07.2.
    • QA y Producción tienen más RAM que Desarrollo.

    El experto espera encontrar una solución sin tener que recrear la base de datos de QA.

Comments are closed.