SQL Trace registra los planes de ejecución y las estadísticas en tiempo de ejecución de las sentencias SQL en su clúster de PolarDB for MySQL. Úselo para detectar regresiones de rendimiento provocadas por cambios en los planes de ejecución e identificar las sentencias SQL que más recursos consumen.
Requisitos previos
Antes de empezar, asegúrese de que su clúster ejecute una de a continuación versiones:
PolarDB for MySQL 8.0.1, versión de revisión 8.0.1.1.30 o posterior
PolarDB for MySQL 8.0.2, versión de revisión 8.0.2.2.12 o posterior
Para comprobar la versión de su clúster, consulte Query the engine version.
Limitaciones
SQL Trace no rastrea las sentencias relacionadas con cuentas: CREATE USER, DROP USER y GRANT.
Parámetros
|
Parámetro |
Descripción |
|
|
Modo de seguimiento. Valores válidos: OFF (predeterminado), DEMAND, ALL, SLOW_QUERY. El valor SLOW_QUERY requiere la versión de revisión 8.0.1.1.34 o posterior en PolarDB for MySQL 8.0.1. |
|
|
Memoria máxima asignada a SQL Sharing, el componente subyacente de SQL Trace. Valores válidos: de 8388608 a 1073741824 bytes. Valor predeterminado: 134217728 bytes. |
|
|
Tiempo durante el cual se conserva un plan de ejecución rastreado sin reutilizarse. Si ninguna sentencia posterior ejecuta el mismo plan dentro de este periodo, el plan se desaloja. Valores válidos: de 0 a 18446744073709551615 segundos. Valor predeterminado: 604800 segundos (7 días). |
Elija un modo de seguimiento
Seleccione un modo según lo que necesite monitorear:
|
Modo |
Qué rastrea |
Cuándo usarlo |
|
OFF |
Nada (predeterminado) |
SQL Trace está inactivo |
|
DEMAND |
Sentencias SQL específicas que usted agregue |
Cuando ya conoce las consultas lentas o críticas |
|
ALL |
Todas las sentencias SQL |
Para investigar problemas de rendimiento desconocidos en todo el clúster |
|
SLOW_QUERY |
Consultas que superan el umbral de consulta lenta |
Cuando solo le interesan las consultas lentas |
Según pruebas de Sysbench (oltp_read_onlyyoltp_read_write) con 2,000 tablas de 10,000 filas cada una, en clústeres de 4 núcleos/8 GB y 8 núcleos/32 GB, el modo ALL reduce el rendimiento de la base de datos menos del 3%. SQL Trace utiliza diseños sin bloqueos para minimizar el impacto bajo alta concurrencia.
Rastree sentencias SQL
Rastree todas las sentencias SQL
Establezca loose_sql_trace_type en ALL.
Rastree sentencias SQL específicas
Establezca
loose_sql_trace_typeen DEMAND.Agregue las sentencias que desea rastrear mediante dbms_sql.add_trace.
Consulte las estadísticas de ejecución
Todas las sentencias rastreadas se almacenan en la tabla information_schema.sql_sharing. Consúltela para ver el plan de ejecución y las estadísticas de cualquier sentencia rastreada.
Obtenga el plan de ejecución de una sentencia específica
SELECT * FROM information_schema.sql_sharing WHERE sql_id = polar_sql_id('select * from t');
Identifique las principales sentencias SQL
Utilice estas consultas para identificar las sentencias que requieren mayor atención. Comience por el tiempo total de ejecución para encontrar el costo general más alto. Después, use las demás consultas para precisar las causas raíz.
Las 10 principales por tiempo total de ejecución: identifica las sentencias con el costo acumulado más alto en todas sus ejecuciones.
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_EXEC_TIME DESC
LIMIT 10;
Las 10 principales por tiempo promedio de ejecución: detecta las sentencias lentas por cada llamada, incluso si se invocan con poca frecuencia.
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_EXEC_TIME / EXECUTIONS DESC
LIMIT 10;
Las 10 principales por total de filas examinadas: señala las sentencias que generan más operaciones de E/S. Esto suele indicar índices faltantes o planes de consulta ineficientes.
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_ROWS_EXAMINED DESC
LIMIT 10;
Gestione las sentencias rastreadas y las estadísticas
Elimine sentencias rastreadas
Para dejar de rastrear sentencias específicas agregadas en el modo DEMAND:
Eliminar por texto de la sentencia: utilice dbms_sql.delete_trace.
Eliminar por ID de SQL: utilice dbms_sql.delete_trace_by_sqlid.
Restablezca las estadísticas
Para restablecer todas las estadísticas en information_schema.sql_sharing, utilice dbms_sql.reset_trace_stats.
Borre y vuelva a cargar los datos
Para borrar todos los datos de information_schema.sql_sharing, utilice dbms_sql.flush_trace.
Para volver a cargar las plantillas SQL desde mysql.sql_sharing y reanudar la recopilación de estadísticas de las sentencias agregadas previamente, utilice dbms_sql.reload_trace.