Infraestructura Mysql: cómo se ejecuta una declaración de consulta

MySQL es una base de datos relacional. Como sugiere el nombre, es una base de datos basada en un modelo relacional. Varias entidades en nuestro mundo real y varias conexiones entre entidades generalmente pueden representarse mediante un modelo relacional. Después de décadas de desarrollo, las bases de datos relacionales se han desarrollado a un nivel muy maduro tanto en la teoría como en la práctica industrial, se puede decir que la mayoría de las aplicaciones actuales tienen soluciones maduras usando MySQL.

La arquitectura de la base de datos generalmente se puede dividir en capa de aplicación, capa lógica, capa física, MySQL también se puede entender de esta manera.

Correspondiente a Mysql:

La capa de aplicación, encargada de interactuar con clientes y usuarios, necesita interactuar con diferentes clientes y servidores intermedios, establecer conexiones, recordar el estado de las conexiones, responder a sus solicitudes, devolver datos y controlar la información (mensajes de error, códigos de estado, etc.). ) .

La capa lógica es responsable del procesamiento de consultas específicas, la gestión de transacciones, la gestión de almacenamiento, la gestión de recuperación y otras funciones adicionales. El procesador de consultas es responsable del análisis y la ejecución de consultas. Cuando se recibe la consulta Sql del cliente, la base de datos asigna un subproceso para procesarla. El procesador de consultas genera el plan de ejecución y se lo entrega al ejecutor del plan para su ejecución. Algunas operaciones de También es necesario acceder al ejecutor. El administrador de almacenamiento de transacciones de nivel inferior opera los datos. El administrador de transacciones y almacenamiento es el principal responsable de nuestra gestión de transacciones, control de concurrencia y gestión de almacenamiento. Nuestro administrador de transacciones garantiza la función "ACID" y el El administrador de bloqueo controla nuestra concurrencia. El administrador de registro garantiza la persistencia de nuestros datos, y el administrador de almacenamiento generalmente también incluye un administrador de búfer, que determina la transferencia de datos entre el disco y los búferes de memoria.

Capa física, archivos de base de datos en discos físicos reales (almacenamiento), como nuestros archivos de datos, archivos de registro, etc.

Primero podemos mirar el diagrama de infraestructura oficial proporcionado por Mysql:

imagen.png

Echemos un vistazo al diagrama de arquitectura lógica simplificada de Mysql:

imagen.png

Como se puede ver en la figura, a nivel lógico, se puede dividir aproximadamente en dos partes: la capa del servidor y la capa del motor de almacenamiento.

La capa del servidor incluye principalmente: conector, analizador, optimizador, ejecutor, caché de consultas, etc. Cubre la mayoría de las funciones principales de MYSQL, así como todas las funciones integradas (como la fecha, la hora, las funciones matemáticas y de encriptación, etc.), y todas las funciones del motor de almacenamiento cruzado se implementan en esta capa, como los procedimientos almacenados. , disparadores, vistas, etc.

La capa del motor de almacenamiento es responsable del almacenamiento y recuperación de datos. Su modo de arquitectura es plug-in y admite múltiples motores de almacenamiento como InnoDB, MyISAM y Memory. El motor de almacenamiento más utilizado hoy en día es InnoDB, que ha sido el motor de almacenamiento predeterminado desde MySQL 5.5.5.

Diferentes motores de almacenamiento comparten una capa de Servidor

  1. Conector

Los conectores son los principales responsables de establecer conexiones, permisos, mantenimiento y gestión de conexiones con los clientes.

mysql -h$ip -P$port -u$username -p$password

Después de que el conector MYSQL establezca una conexión, incluso si modifica los permisos del usuario actual, no afectará la conexión actual. Después de desconectar la conexión, la verificación de permisos se realizará nuevamente después de volver a conectarse. Una vez que se completa la conexión, no hay ninguna operación de seguimiento, lo que se denomina conexión inactiva. Puede consultar la conexión inactiva a través del comando show processlist como se muestra a continuación:

imagen.png

El tiempo de conexión por defecto de MYSQL es de 8h, que puede ser controlado por el parámetro wait_timeout.Establecer una conexión es un proceso muy complicado, por lo que se recomienda utilizar el método de conexión larga. Durante la ejecución de mysql, la administración de memoria se usa temporalmente en el objeto de conexión y solo se liberará después de la desconexión. Si la conexión se mantiene durante mucho tiempo, puede ocurrir OOM. La solución es la siguiente:

 1.  定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。

 2.  如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。
复制代码
  1. caché de consultas

Antes de la versión mysql8, había un módulo de caché de consultas, y cada resultado de consulta se almacenaba en caché en la caché de consultas. La próxima vez, el mismo SQL irá directamente a la caché para devolver el resultado. En general, no se recomienda la instrucción de consulta predeterminada para use el caché, porque el caché es para la tabla. Las modificaciones eliminarán todos los cachés en esta tabla. Puede configurar los siguientes parámetros para no usar el caché de forma predeterminada, pero para usar el caché según sea necesario:

query_cache_type 设置为 DEMAND
select SQL_CACHE * from T where ID=10;//SQL_CACHE 显示指定当前sql走缓存
复制代码
  1. Analizador

El analizador mysql juzga la selección, actualización, eliminación e inserción desensamblando la instrucción sql y desensamblando la tabla correspondiente y la condición posterior. Determine si la instrucción sql actual se ajusta a la especificación mysql mediante el desmantelamiento. Si no está estandarizada, aparecerá un mensaje de error "Tiene un error en su sintaxis SQL".

  1. optimizador

El optimizador mysql determina a qué índice ir si hay varios índices en el sql actual, de la siguiente manera:

select * from a join b useing(ID) where  a_id = 1;
复制代码

El optimizador comparará las dos tablas por asociación. Si los datos en la tabla a tienen menos datos en la tabla b, el optimizador usa la tabla a como la tabla principal para asociar la tabla b y la cantidad de consultas es mucho menor que la cantidad de veces que la tabla b está asociada con la tabla a. Los resultados de la consulta son los mismos pero la eficiencia de ejecución es diferente, el optimizador elegirá la solución óptima. Aquí es donde a menudo decimos que MySQL optimiza el principio más a la izquierda, la cobertura del índice, la reducción del índice, etc. puede verificar el plan de ejecución de SQL a través de la explicación para determinar si debe optar por el índice.

  1. Solenoide

El ejecutor de mysql es el lugar donde realmente se ejecuta sql.Primero, se realizará la verificación de permisos para determinar si tiene el permiso de ejecución, y luego hay dos casos de si hay un índice:

select * from a  where ID = 1;
复制代码

Si el campo ID tiene un índice, hay un índice para recorrer el árbol de índice de acuerdo con las condiciones para atravesar rápidamente el árbol de índice para llegar al índice, el índice de clave principal consulta directamente los datos y los guarda en el conjunto de resultados, y continúa ejecutando el siguiente Set, después de atravesar el árbol de índice, devuelve el conjunto de resultados al cliente

Si el campo ID no tiene un índice, llame a la interfaz del motor de innodb para obtener la primera fila de la tabla para determinar si cumple con las condiciones, y no continúe llamando a la interfaz para consultar la siguiente fila hasta que todas las filas de la tabla se recorren y los resultados de la consulta se colocan en el conjunto de resultados y se devuelven al cliente

resumen:

Este artículo presenta la infraestructura mysql y se enfoca en la arquitectura lógica, para que sepamos el orden en que se ejecuta una declaración de consulta en mysql, para que tengamos una impresión preliminar del proceso de ejecución de mysql. proceso paso a paso en detalle.

Referencias:

Zhihu zhuanlan.zhihu.com/p/19965157

Geek time mysql combat 45 conferencias

Supongo que te gusta

Origin juejin.im/post/7011276065792327688
Recomendado
Clasificación