Vista MySQL ejecutando SQL

Vista de MySQL ejecutando SQL
Prefacio
Al instalar MySQL, varias bases de datos requeridas para la operación de MySQL se inicializarán de forma predeterminada: mysql, sys, information_schema, performance_schema.Estas bibliotecas almacenan la información de configuración y la información de operación de MySQL durante la operación, la configuración de parámetros, la información de la base de datos, la tabla información, etc Hoy en día, las dos bibliotecas que se utilizan principalmente para ver el SQL en ejecución son information_schema y performance_schema.

lista de procesos
La tabla lista de procesos se encuentra en la biblioteca information_schema, y ​​almacena principalmente información básica de los hilos de MySQL. Usamos

desc information_schema.processlist para ver la estructura de la tabla:

ID: la identificación del subproceso
USUARIO: a qué usuario pertenece el subproceso
HOST: la información del host del cliente: nombre de host+puerto
DB: en qué base de datos se encuentra el subproceso
COMMAND: qué comando está ejecutando el subproceso y el estado inactivo del subproceso es sleep
TIME: el subproceso ya está en ejecución, en segundos
ESTADO: lo que está haciendo el subproceso: el estado actual, el comportamiento o el evento
INFO: la declaración que el subproceso está ejecutando, pero esto no es muy preciso, por lo que necesitamos usar otro maneras de lograr nuestro objetivo.

Use show processlist o seleccione * de information_schema.processlist para ver la tabla de la lista de procesos

subprocesos
los subprocesos se encuentran en la biblioteca performance_schema y cada fila registra un subproceso del servidor. Cuando se inicializa performance_schema, completará la tabla de subprocesos de acuerdo con los subprocesos existentes en ese momento, y luego, cada vez que el servidor cree un subproceso, se agregará una nueva pieza de datos. Cuando finaliza el hilo, estos datos también se eliminarán de la tabla de hilos. Use desc performance_schema.threads para ver la estructura de la tabla:

THREAD_ID: identificación única del hilo
NOMBRE: nombre asociado con el código de monitoreo del hilo en el servidor
TIPO: tipo de hilo. Dividido en primer plano y fondo. Los subprocesos conectados por el usuario son subprocesos de primer plano y los subprocesos relacionados con la actividad interna del servidor son subprocesos de back-end. Por ejemplo, hilos internos de InnoDB.
PROCESSLIST_ID: id de la lista de procesos superior
PROCESSLIST_USER: usuario de la lista de procesos superior
PROCESSLIST_HOST: host de la lista de procesos superior
PROCESSLIST_DB: DB de la lista de procesos superior
PROCESSLIST_COMMAND: COMMAND de la lista de procesos
superior PROCESSLIST_TIME: TIME PROCESSLIST de la lista de procesos superior _STATE: STATE PROCESSLIST_INFO
de la lista de procesos anterior
: INFO PARENT_THREAD_ID de la lista de procesos anterior
: el valor de id del subproceso derivado
ROL: no se usa
INSTRUMENTADO: si el evento ejecutado por el subproceso está instrumentado, (SÍ o ENCENDIDO)
HISTORIA: si registrar eventos históricos para el subproceso
CONNECTION_TYPE: el protocolo utilizado para establecer la conexión, o NULL para subprocesos en segundo plano.
THREAD_OS_ID: el subproceso de MySQL corresponde a la identificación del subproceso del sistema operativo

events_statements_current
events_statements_current se encuentra en la biblioteca performance_schema, que almacena los eventos de declaraciones actuales, y la tabla almacena una fila para cada subproceso, que muestra el estado actual de los eventos de declaraciones que el hermano Xianchen ha monitoreado recientemente. Use desc performance_schema.events_statements_current para ver la estructura de la tabla:

THREAD_ID: la identificación del subproceso asociada con el evento, que corresponde a la identificación de los subprocesos anteriores.
EVENT_ID: el número de evento actual del subproceso cuando comienza el evento.

THREAD_ID y EVENT_ID juntos marcan una fila única, no hay dos filas que tengan el mismo par clave-valor

END_EVENT_ID: establecer nulo al comienzo del evento y actualizarlo al número de evento actual del subproceso al final del evento
EVENT_NAME: el nombre del evento
SOURCE: el nombre del archivo fuente que contiene el código de monitoreo que genera el evento y el número de línea del archivo donde ocurre el monitoreo
TIMER_START, TIMER_END, TIMER_WAIT: información de tiempo del evento, hora de inicio, hora de finalización, tiempo de ejecución del evento, la unidad es picosegundo (diez milésima de segundo).
LOCK_TIME: el tiempo de espera para los bloqueos de la mesa. En microsegundos
SQL_TEXT: El texto de la sentencia SQL, o nulo para comandos sin sentencia SQL asociada
DIGEST: 32 caracteres para MD5
DIGEST_TEXT: Texto de resumen de sentencia normalizado.
CURRENT_SCHEMA: la base de datos predeterminada para la sentencia
OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME: para sentencias anidadas, estas columnas contienen información sobre la sentencia principal
OBJECT_INSTANCE_BEGIN: la dirección del objeto de la sentencia en la memoria
MYSQL_ERRNO: el número de
error de la sentencia Si se produjo un error. ADVERTENCIAS: cantidad de advertencias ROWS_AFFECTED: cantidad de filas afectadas por la declaración ROWS_SENT: cantidad de filas devueltas por la declaración ROWS_EXAMINED: cantidad de filas examinadas por la capa del servidor CREATED_TMP_DISK_TABLES







CREATED_TMP_TABLES
SELECT_FULL_JOIN
SELECT_FULL_RANGE_JOIN
SELECT_RANGE
SELECT_RANGE_CHECK
SELECT_SCAN
SORT_MERGE_PASSES
SORT_RANGE
SORT_ROWS
SORT_SCAN
NO_INDEX_USED
NO_GOOD_INDEX_USED
NESTING_EVENT_ID
NESTING_EVENT_TYPE
NESTING_EVENT_LEVEL

Cómo ver el SQL en ejecución
1. La tabla de lista de procesos registra la información del subproceso que ejecuta MySQL, y cada subproceso tiene una identificación única de un subproceso útil en la tabla de subprocesos >>> thread_id. La tabla events_statements_current registra la identificación única del subproceso y la instrucción SQL sql_text correspondiente al subproceso.

2. Entonces, primero podemos obtener la identificación correspondiente a la lista de procesos en la lista de procesos

3. A través del análisis de campo de la tabla de subprocesos, tenemos una correspondencia uno a uno entre processlist_id y thread_id, por lo que podemos obtener thread_id a través de processlist_id en la tabla de subprocesos.

4. El último paso es la clave, obtenemos sql_text en la tabla events_statements_current a través de thread_id, que es la declaración sql que necesitamos obtener.

Obtenga el processlist_id que se está ejecutando,
seleccione el id de information_schema.processlist

Obtenga el thread_id correspondiente a processlist_id
seleccione thread_id de performance_schema.threads donde processlist_id in (la lista de processlist_id obtenida en el paso anterior)

Obtenga la instrucción sql en ejecución,
seleccione thread_id, sql_text from performance_schema.events_statements_current donde thread_id in (lista thread_id obtenida en el paso anterior)

完整SQL
SELECT a.*, c.thread_id, c.sql_text from information_schema.processlist a
LEFT JOIN performance_schema.threads b en a.id = b.PROCESSLIST_ID
LEFT JOIN performance_schema.events_statements_current c en c.THREAD_ID = b.THREAD_ID;

 

Supongo que te gusta

Origin blog.csdn.net/eagle89/article/details/129686151
Recomendado
Clasificación