Componente de análisis Mybatis-SQL | Equipo técnico de logística de Jingdong

fondo

Uno de los mayores peligros ocultos en la preparación para la gran promoción es SQL lento, que es el más destructivo, y también es el mayor peligro oculto que a menudo hace que toda la aplicación se tambalee en el trabajo diario, y existen ciertos requisitos técnicos para evaluar la calidad de sql. La falta de experiencia o la falta de cuidado hicieron que un sql incorrecto se conectara en línea con éxito. Cuando se descubrió, causó un impacto en línea, una alarma o un descubrimiento de colección de sql posterior a la lentitud. En este momento, generalmente es imposible para detener la pérdida rápidamente y debe modificarse. El código se conecta en línea o se ajusta el índice de la base de datos.

Puntos de dolor centrales:

1. Es imposible detectar SQL lento por adelantado y puede deteriorarse en sentencias SQL lentas

2. Después de que SQL lento aparece en línea, es imposible detener rápidamente la pérdida

Soluciones

1. Para resolver el problema antes de conectarse, la mejor manera es averiguar si un sql es bueno o malo durante la fase de prueba, o incluso durante la fase de desarrollo.

2. Después de que el SQL lento se encuentra en línea, además de cambiar el código para conectarse y ajustar el índice de la tabla de la base de datos, admite actualizaciones en caliente para reemplazar la instrucción SQL .

Dentro del departamento, la mayoría de los marcos de base de datos actualmente usan mybatis y luego desarrollan un componente de mybatis basado en el mecanismo de implementación de mybatis en sí mismo, que puede extraer y analizar automáticamente sql en ejecución, personalizar un conjunto de reglas de análisis predeterminadas y dejar que sql en el entorno de desarrollo Al ejecutar con el entorno de prueba, puede hacer una evaluación preliminar y exponer el sql lento problemático en esta etapa; al mismo tiempo, tiene la función de reemplazo de sql. Cuando hay un problema sql en línea, puede completar rápidamente un sql a través de la configuración ducc ​​El reemplazo en línea reduce en gran medida el tiempo de parada de pérdida para problemas en línea.

Investigación sobre soluciones de código abierto

En la actualidad, las funciones principales de los principales componentes de análisis de SQL se ubican principalmente en dos direcciones: 1. Análisis de SQL lento y sugerencias de optimización; Integración con el código de la aplicación. También es imposible darse cuenta de nuestros principales puntos débiles, la advertencia de análisis temprano de sql lento y el reemplazo dinámico de sql.

Diseño

Funciones principales: análisis de SQL y capacidades de alerta temprana, capacidades de reemplazo de SQL

diseño detallado

Principalmente dividido en 8 módulos funcionales

Módulo 1: el núcleo es el principal responsable de la conexión de los componentes a mybatis y de la disposición y llamada de otros módulos.

Módulo 2: config es principalmente responsable de la inicialización de la información de configuración del componente

Módulo 3: extrat extrae principalmente el sql completo para ser ejecutado mediante el análisis de objetos relacionados con mybatis

Módulo 4: el análisis empalma principalmente declaraciones de análisis, ejecuta declaraciones de análisis de explicación y obtiene resultados de análisis

Módulo 5: Carga e inicialización de reglas de análisis de reglas sql, soporte de reglas personalizadas

Reglas por defecto actuales (expansión continua):

1. Consulta de índice no coincidente

2. El efecto de filtrado del índice de coincidencia es deficiente

3. Se devolvieron demasiadas filas

4. Se utiliza la clasificación de archivos

Módulo 6: puntúa partidos y puntuaciones en base a los resultados del análisis y reglas de puntuación configuradas, y optimiza el montaje de sugerencias

Módulo 7: módulo de salida, salida de los resultados de salida, actualmente hay dos métodos de salida: registro de errores y MQ

Módulo 8: módulo de reemplazo, que puede reemplazar dinámicamente las declaraciones SQL basadas en la configuración de ducc

Instrucciones

1. Introducir paquetes jar dependientes

<dependency>
    <groupId>com.jd.sql.analysis</groupId>
    <artifactId>sql-analysis</artifactId>
    <version>1.2-SNAPSHOT</version>
</dependency>

2. Componente de configuración xml

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <!-- 开启sql分析功能最简配置 -->
            <property name="analysisSwitch" value="true"/>

            <!-- 开启sql替换功能最简配置 -->
            <property name="sqlReplaceModelSwitch" value="true"/>
            <property name="duccAppName" value="workbench-backend"/>
            <property name="duccUri" value="ucc://workbench-backend:[email protected]/v1/namespace/workbench_backend/config/default/profiles/test?longPolling=60000&necessary=false"/>
            <property name="duccMonitorKey" value="refundBugFlag"/>
        </plugin>
    </plugins>
</configuration>

3. Elementos de configuración básicos

Atributos usar ¿Es obligatorio? valores predeterminados Observación
cambio de análisis Ya sea para habilitar la función de análisis FALSO  
soloComprobar una vez Si analizar un sqlid solo una vez No verdadero  
comprobarIntervalo Intervalo de análisis por sqlid No 300000 milisegundos onlyCheckOnce es falso para tener efecto
exceptoSqlIds Ssqlid que necesita ser filtrado y no analizado No    
tipo sql tipo sql analizado No Selección predeterminada, actualización apoyo
scoreRuleLoadClass Cargador de reglas de puntuación para ampliar las reglas personalizadas No    
fuera de modelo Método de salida predeterminado No Predeterminado: REGISTRO Admite LOG, MQ de dos maneras
clase de salida Clase de salida de resultados de puntuación, utilizada para ampliar los métodos de salida de resultados personalizados No    
sqlReplaceModelSwitch Si el módulo de reemplazo de sql está habilitado No predeterminado falso  
duccAppName Nombre de la aplicación de configuración ducc ​​(jdos) No    
liderar configuración de ducc ​​uri No    
duccMonitorKey SQL reemplaza la clave correspondiente al archivo de configuración No    

4. Pantalla de efecto de análisis predeterminada

4.1, efecto de análisis de sql lento

4.2, efecto de reemplazo dinámico sql

5. Plan de uso práctico

5.1, análisis sql lento - salida de registro + alarma de palabra clave

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="analysisSwitch" value="true"/>
        </plugin>
    </plugins>
</configuration>

5.2, análisis sql lento - salida de registro + salida mq + almacenamiento es + análisis Kibana

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="appName" value="workbench-backend"/>
            <property name="analysisSwitch" value="true"/>
            <property name="outputModel" value="mq"/>
            <property name="mqApp" value="qlstation"/>
            <property name="mqUser" value="qlstation"/>
            <property name="mqPassword" value="D1BCC547"/>
            <property name="mqAddress" value="jmq-testcluster.jd.local:50088"/>
            <property name="mqTopic" value="jdl_kds_key_node_log"/>
        </plugin>
    </plugins>
</configuration>

efecto final

5.3, reemplazo lento de sql - declaración de sql de actualización dinámica de configuración de ducc

<configuration>
    <plugins>
        <plugin interceptor="com.jd.sql.analysis.core.SqlAnalysisAspect" >
            <property name="sqlReplaceModelSwitch" value="true"/>
            <property name="duccAppName" value="workbench-backend"/>
            <property name="duccUri" value="ucc://workbench-backend:[email protected]/v1/namespace/workbench_backend/config/default/profiles/test?longPolling=60000&necessary=false"/>
            <property name="duccMonitorKey" value="sqlReplaceConfig"/>
        </plugin>
    </plugins>
</configuration>

sql lento encontrado

configuración de conducto

El sql en línea se reemplaza dinámicamente

Nota: después de que la función se repare oficialmente, esta configuración debe eliminarse. Esta función es solo para problemas urgentes en línea y no se recomienda su uso como función durante mucho tiempo.

Pruebas de rendimiento

En el entorno de prueba, se realizaron miles de consultas SQL ordinarias y se realizaron 5 pruebas para cada escenario.

Tiempo pasado sin complemento habilitado: 11108ms, 10237ms, 9482ms, 7938ms, 8196ms

Lleva mucho tiempo habilitar el análisis SQL: 16619ms, 17333ms, 16321ms, 19057ms, 18164ms

Configuración real, solo la primera ejecución o ejecución de intervalo, un solo impacto de aproximadamente 10 ms)

Requiere mucho tiempo habilitar el reemplazo de sql: 10642ms, 8803ms, 8353ms, 8830ms, 9170ms

básicamente ningún efecto

escena aplicable

1. Prevención de SQL lento

2. Stop loss para problemas en línea

Ventaja

1. Ventaja central: análisis de sql durante la ejecución, que es diferente de la evaluación tradicional de sql lento que consume mucho tiempo y que se basa en la ejecución de sql, y el análisis previo directamente en función de la sintaxis y los índices, que no solo pueden evitar que se encuentren algunos sql incorrectos. para ser lento sql después de conectarse, pero también puede dar sugerencias de optimización de sql, lo que puede evitar la lentitud de sql en línea en la mayor medida. Admite el reemplazo dinámico de sql en línea, que puede detener rápidamente la pérdida de problemas en línea.

2. Rendimiento: según el rendimiento y los diferentes escenarios de uso, se admite la configuración personalizada, ya sea que cada SQL se verifique solo una vez o se configure en un intervalo de tiempo determinado. El reemplazo de SQL es casi sin pérdidas.

3. Expansión: en función de la expansión de las reglas de puntuación de sql posteriores y la consideración de generar resultados de análisis de diferentes maneras, admite extensiones personalizadas de reglas de puntuación y métodos de salida.

4. Costo: bajo costo de acceso, sin intrusión de código.

Autor: JD Logística Hu Haitao

Fuente: Comunidad de desarrolladores de JD Cloud Ziyuanqishuo Tech

Los graduados de la Universidad Popular Nacional robaron la información de todos los estudiantes de la escuela para construir un sitio web de puntuación de belleza, y han sido detenidos criminalmente.La nueva versión de Windows de QQ basada en la arquitectura NT se lanza oficialmente.Estados Unidos restringirá el uso de China de Amazon, Microsoft y otros servicios en la nube que brindan capacitación en modelos de IA. Se anunciaron proyectos de código abierto para detener el desarrollo de funciones LeaferJS , el puesto técnico mejor pagado en 2023, lanzado: Visual Studio Code 1.80, una biblioteca de gráficos 2D de código abierto y potente , compatible funciones de imagen de terminal . El número de registros de subprocesos ha superado los 30 millones. "Cambio" deepin adopta Asahi Linux para adaptarse a la clasificación de la base de datos Apple M1 en julio: Oracle aumenta, abriendo el puntaje nuevamente
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4090830/blog/10086660
Recomendado
Clasificación