SQL Trace usa dos tablas para almacenar y exponer los datos de seguimiento: mysql.sql_sharing conserva las instrucciones SQL registradas para el seguimiento, mientras que information_schema.sql_sharing contiene las estadísticas de ejecución en tiempo real de dichas instrucciones y sus planes de ejecución. Ambas tablas se crean automáticamente durante el inicio.
mysql.sql_sharing
mysql.sql_sharing es una tabla del sistema InnoDB ubicada en la base de datos mysql. Almacena las instrucciones SQL parametrizadas que se registraron para el seguimiento.
CREATE TABLE `sql_sharing` (
`Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`Sql_id` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Schema_name` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Type` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Digest_text` longtext COLLATE utf8_bin,
`Plan_id` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Plan` text COLLATE utf8_bin,
`Version` int(11) unsigned DEFAULT NULL,
`Create_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`Update_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`Extra_info` longtext COLLATE utf8_bin,
PRIMARY KEY (`Id`),
UNIQUE KEY `sqlid_schema_type` (`Sql_id`,`Schema_name`,`Type`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
Campo |
Descripción |
|
|
Identificador de fila con incremento automático. |
|
|
Identificador de la instrucción SQL parametrizada. |
|
|
Esquema sobre el cual se ejecutan las instrucciones SQL. |
|
|
Función que utiliza el registro. |
|
|
Contenido de la instrucción SQL parametrizada. |
|
|
Identificador del plan de ejecución. |
|
|
Nombre del plan de ejecución. |
|
|
Número de versión del registro. |
|
|
Hora en la que se insertó el registro. |
|
|
Hora de la última actualización del registro. |
|
|
Información adicional registrada por el sistema. |
information_schema.sql_sharing
information_schema.sql_sharing es una tabla MEMORY que registra las estadísticas de ejecución en tiempo real de las instrucciones SQL monitoreadas y sus planes de ejecución. Cada fila representa una instrucción SQL rastreada (TYPE = SQL) o uno de sus planes de ejecución (TYPE = PLAN).
CREATE TEMPORARY TABLE `SQL_SHARING` (
`TYPE` varchar(16) DEFAULT NULL,
`SQL_ID` varchar(64) DEFAULT NULL,
`SCHEMA_NAME` varchar(64) DEFAULT NULL,
`DIGEST_TEXT` varchar(2048) DEFAULT NULL,
`PLAN_ID` varchar(64) DEFAULT NULL,
`PLAN` varchar(1024) DEFAULT NULL,
`PLAN_EXTRA` varchar(1024) DEFAULT NULL,
`ERROR_CODE` bigint(21) DEFAULT NULL,
`REF_BY` varchar(512) DEFAULT NULL,
`FIRST_LOAD_TIME` datetime DEFAULT NULL,
`LAST_HIT_TIME` datetime DEFAULT NULL,
`EXECUTIONS` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_WAIT_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_WAIT_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_WAIT_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_EXEC_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_EXEC_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_EXEC_TIME` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_ROWS_SENT` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_ROWS_SENT` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_ROWS_SENT` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_ROWS_EXAMINED` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_ROWS_EXAMINED` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_ROWS_EXAMINED` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_ROWS_AFFECTED` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_ROWS_AFFECTED` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_ROWS_AFFECTED` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_LOGICAL_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_LOGICAL_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_LOGICAL_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_PHY_SYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_PHY_SYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_PHY_SYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`SUM_PHY_ASYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MIN_PHY_ASYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`MAX_PHY_ASYNC_READ` bigint(21) unsigned NOT NULL DEFAULT '0',
`EXTRA` varchar(1024) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
Descripción de los campos
Campos de identificación
|
Campo |
Descripción |
|
|
Tipo de registro. |
|
|
Identificador de la instrucción SQL parametrizada. |
|
|
Esquema sobre el cual se ejecutan las instrucciones SQL. |
|
|
Contenido de la instrucción SQL parametrizada. |
|
|
Identificador del plan de ejecución. |
|
|
Nombre del plan de ejecución. |
|
|
Información adicional, como el método utilizado para acceder a la tabla y si se emplea el protocolo de instrucciones preparadas. Los métodos de acceso incluyen el escaneo completo de tabla, el escaneo por rango de índice y el acceso mediante el mismo índice. |
|
|
Código de error. |
|
|
Función que registró esta instrucción o plan. |
Campos de marca de tiempo
|
Campo |
Descripción |
|
|
Hora en la que se registró por primera vez la instrucción o el plan en memoria. |
|
|
Hora de la última ejecución de la instrucción o el plan. |
Estadísticas de ejecución
Cada métrica se captura mediante tres agregaciones: SUM_* (total acumulado), MIN_* (valor mínimo entre todas las ejecuciones) y MAX_* (valor máximo entre todas las ejecuciones).
|
Métrica |
Campos |
Unidad |
|
Cantidad de ejecuciones |
|
— |
|
Tiempo de espera |
|
Microsegundos |
|
Tiempo de ejecución |
|
Microsegundos |
|
Filas devueltas |
|
— |
|
Filas examinadas |
|
— |
|
Filas afectadas |
|
— |
|
Lecturas lógicas |
|
— |
|
Lecturas físicas síncronas |
|
— |
|
Lecturas físicas asíncronas |
|
— |
|
Información adicional |
|
— |
Ejemplo
A continuación se muestra cómo SQL Trace llena information_schema.sql_sharing cuando loose_sql_trace_type se establece en ALL.
Ejecute las instrucciones de configuración:
CREATE TABLE t AS WITH RECURSIVE t(c1, c2, c3) AS (SELECT 1, 1, 1 UNION ALL SELECT c1+1, c2 + 1, c3 + 1 FROM t WHERE c1 < 100) SELECT c1, c2, c3 FROM t;
CREATE index i_c1 ON t(c1);
SELECT COUNT(*) FROM t;
Resultado:
+----------+
| count(*) |
+----------+
| 100 |
+----------+
Consulte los datos de seguimiento:
SELECT * FROM information_schema.sql_sharing;
Resultado:
*************************** 1. row ***************************
TYPE: SQL
SQL_ID: 83qmtgr8d6rwn
SCHEMA_NAME: test
DIGEST_TEXT: SELECT * FROM `t` WHERE `c2` < ?
PLAN_ID: NULL
PLAN: NULL
PLAN_EXTRA: NULL
ERROR_CODE: NULL
REF_BY: SQL_TRACE
FIRST_LOAD_TIME: 2022-11-07 19:04:30
LAST_HIT_TIME: 2022-11-07 19:04:30
EXECUTIONS: 1
SUM_WAIT_TIME: 184
MIN_WAIT_TIME: 184
MAX_WAIT_TIME: 184
SUM_EXEC_TIME: 417
MIN_EXEC_TIME: 417
MAX_EXEC_TIME: 417
SUM_ROWS_SENT: 2
MIN_ROWS_SENT: 2
MAX_ROWS_SENT: 2
SUM_ROWS_EXAMINED: 100
MIN_ROWS_EXAMINED: 100
MAX_ROWS_EXAMINED: 100
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 101
MIN_LOGICAL_READ: 101
MAX_LOGICAL_READ: 101
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL
*************************** 2. row ***************************
TYPE: PLAN
SQL_ID: 83qmtgr8d6rwn
SCHEMA_NAME: test
DIGEST_TEXT: NULL
PLAN_ID: 5a4cvp4gjqgfj
PLAN: /*+ NO_INDEX(`t`@`select#1`) */
PLAN_EXTRA: {`t`@`select#1`:ALL}
ERROR_CODE: 0
REF_BY: SQL_TRACE
FIRST_LOAD_TIME: 2022-11-07 19:04:30
LAST_HIT_TIME: 2022-11-07 19:04:30
EXECUTIONS: 1
SUM_WAIT_TIME: 184
MIN_WAIT_TIME: 184
MAX_WAIT_TIME: 184
SUM_EXEC_TIME: 417
MIN_EXEC_TIME: 417
MAX_EXEC_TIME: 417
SUM_ROWS_SENT: 2
MIN_ROWS_SENT: 2
MAX_ROWS_SENT: 2
SUM_ROWS_EXAMINED: 100
MIN_ROWS_EXAMINED: 100
MAX_ROWS_EXAMINED: 100
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 101
MIN_LOGICAL_READ: 101
MAX_LOGICAL_READ: 101
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL
*************************** 3. row ***************************
TYPE: SQL
SQL_ID: cvdqw6ncsmwgh
SCHEMA_NAME: test
DIGEST_TEXT: CREATE TABLE `t` AS WITH RECURSIVE `t` ( `c1` , `c2` , `c3` ) AS ( SELECT ?, ... UNION ALL SELECT `c1` + ? , `c2` + ? , `c3` + ? FROM `t` WHERE `c1` < ? ) SELECT `c1` , `c2` , `c3` FROM `t`
PLAN_ID: NULL
PLAN: NULL
PLAN_EXTRA: NULL
ERROR_CODE: NULL
REF_BY: SQL_TRACE
FIRST_LOAD_TIME: 2022-11-07 19:04:15
LAST_HIT_TIME: 2022-11-07 19:04:15
EXECUTIONS: 1
SUM_WAIT_TIME: 376
MIN_WAIT_TIME: 376
MAX_WAIT_TIME: 376
SUM_EXEC_TIME: 10679
MIN_EXEC_TIME: 10679
MAX_EXEC_TIME: 10679
SUM_ROWS_SENT: 0
MIN_ROWS_SENT: 0
MAX_ROWS_SENT: 0
SUM_ROWS_EXAMINED: 200
MIN_ROWS_EXAMINED: 200
MAX_ROWS_EXAMINED: 200
SUM_ROWS_AFFECTED: 100
MIN_ROWS_AFFECTED: 100
MAX_ROWS_AFFECTED: 100
SUM_LOGICAL_READ: 1089
MIN_LOGICAL_READ: 1089
MAX_LOGICAL_READ: 1089
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL
*************************** 4. row ***************************
TYPE: SQL
SQL_ID: btcj0kh12wx26
SCHEMA_NAME: test
DIGEST_TEXT: CREATE INDEX `i_c1` ON `t` ( `c1` )
PLAN_ID: NULL
PLAN: NULL
PLAN_EXTRA: NULL
ERROR_CODE: NULL
REF_BY: SQL_TRACE
FIRST_LOAD_TIME: 2022-11-07 19:04:21
LAST_HIT_TIME: 2022-11-07 19:04:21
EXECUTIONS: 1
SUM_WAIT_TIME: 295
MIN_WAIT_TIME: 295
MAX_WAIT_TIME: 295
SUM_EXEC_TIME: 8620
MIN_EXEC_TIME: 8620
MAX_EXEC_TIME: 8620
SUM_ROWS_SENT: 0
MIN_ROWS_SENT: 0
MAX_ROWS_SENT: 0
SUM_ROWS_EXAMINED: 0
MIN_ROWS_EXAMINED: 0
MAX_ROWS_EXAMINED: 0
SUM_ROWS_AFFECTED: 0
MIN_ROWS_AFFECTED: 0
MAX_ROWS_AFFECTED: 0
SUM_LOGICAL_READ: 761
MIN_LOGICAL_READ: 761
MAX_LOGICAL_READ: 761
SUM_PHY_SYNC_READ: 0
MIN_PHY_SYNC_READ: 0
MAX_PHY_SYNC_READ: 0
SUM_PHY_ASYNC_READ: 0
MIN_PHY_ASYNC_READ: 0
MAX_PHY_ASYNC_READ: 0
EXTRA: NULL
El resultado muestra tres instrucciones SQL rastreadas (filas 1, 3 y 4 con TYPE = SQL) y un plan de ejecución (fila 2 con TYPE = PLAN). El campo SQL_ID vincula una fila SQL con sus filas PLAN; tanto la fila 1 como la 2 comparten SQL_ID: 83qmtgr8d6rwn.