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 | Sí | 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.
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 nuevamenteAutor: JD Logística Hu Haitao
Fuente: Comunidad de desarrolladores de JD Cloud Ziyuanqishuo Tech