Comprensión profunda de Mysql: arquitectura interna y módulos

Tabla de contenido

Descripción general:

1. Módulos internos y sus funciones

2. Proceso de ejecución de una instrucción select

3. Proceso de ejecución de una declaración de actualización

4, grupo de búfer de InnoDB (grupo de búfer)

5,Búfer de registro de InnoDB

6, Binlog


1. Módulos internos y sus funciones

El interior de mysql se divide principalmente en la capa de servicio de mysql y la capa del motor de almacenamiento. La capa de servicio incluye conectores, analizadores, preprocesadores, optimizadores y ejecutores. Principalmente para funciones de operación, filtrado y cálculo de datos; la capa del motor de almacenamiento es una capa de motor de almacenamiento separada, que es principalmente responsable del acceso a los datos, y el motor de almacenamiento es el hardware del sistema de archivos de la computadora.

  1. conector
  2. analizador
  3. preprocesador
  4. optimizador
  5. Solenoide
  6. motor de almacenamiento

1. Conector:

El conector administra principalmente los objetos de enlace de la base de datos y verifica los permisos de los usuarios al conectarse

2. Analizador:

El analizador realiza principalmente análisis léxico y gramatical en SQL. El análisis léxico divide principalmente la instrucción sql en palabras individuales, y el análisis gramatical consiste en realizar algunas comprobaciones gramaticales en sql, como si las comillas simples, corchetes, etc. son normales y tienen un final normal, y luego la instrucción sql para ser ejecutado de acuerdo con las reglas gramaticales de mysql generar un árbol de análisis (consulta: select_lex)

3. Preprocesador

El preprocesador se usa principalmente para realizar verificaciones adicionales en el sql sin problemas en la gramática después de que el analizador analiza y ejecuta el sql normalmente sin informar un error, como verificar si la tabla en el sql existe, si el campo existe, si el sql es ambiguo, y el permiso de ejecución del usuario Coincide. Después del preprocesamiento, se generará un nuevo árbol de análisis.

4. Optimizador

¿Se puede ejecutar directamente el sql obtenido después del preprocesamiento en el paso anterior? De hecho, hay muchas maneras de ejecutar un sql, y los resultados son todos iguales, pero el optimizador implementa cómo elegir la mejor manera de ejecutar.

El optimizador genera principalmente diferentes planes de ejecución basados ​​en el árbol de análisis generado por el preprocesador , y selecciona un plan de ejecución óptimo (mysql usa un optimizador basado en costos, se selecciona el que tiene el menor costo).

Otras optimizaciones del optimizador incluyen seleccionar esa tabla como la tabla base cuando se realizan consultas asociadas a varias tablas, seleccionar ese índice cuando hay varios índices, eliminar paréntesis redundantes, identidad 1=1, etc.

Puede verificar la información del plan de ejecución agregando EXPLAIN delante de la instrucción sql . Agregue EXPLAIN FORMAT=JSON SQL...  para ver información más detallada del plan de ejecución.

5. Actuador

El ejecutor llama al plan de ejecución generado por el optimizador llamando a la interfaz API proporcionada por la capa del motor de almacenamiento y finalmente devuelve los datos del resultado al cliente.

6. Motor de almacenamiento

Hay tres tipos principales de motores de almacenamiento: InnoDB, MyISAM y Memory.

Cómo especificar: Al crear una tabla, especifique crear tabla 'xxxx'(xxxx) ENGINE=InnoDB a través de la palabra clave ENGINE

Diferencias entre diferentes motores:

InnoDB (2 archivos):

Es el motor de almacenamiento predeterminado de mysql5.7.

Admite transacciones y claves externas, por lo que la integridad y la consistencia de los datos son mayores.

Admite bloqueos de nivel de fila y bloqueos de nivel de tabla.

Admite simultaneidad de lectura y escritura, escritura sin bloqueo de lectura (MVCC).

El método de almacenamiento de índice especial puede reducir IO y mejorar la eficiencia de las consultas.

Memoria (1 archivo):

Coloque los datos en la memoria, la velocidad de lectura y escritura es muy rápida, pero si la base de datos se reinicia o falla, todos los datos desaparecerán. Solo apto para mesas temporales.

Almacene los datos de la tabla en la memoria.

Los índices hash se utilizan de forma predeterminada.

MyISAM (3 archivos)

Admite bloqueos a nivel de tabla (inserciones y actualizaciones de tablas de bloqueo). Las transacciones no son compatibles.

Tiene una alta velocidad de inserción (insertar) y consulta (seleccionar).

Almacena el número de filas en la tabla (el conteo es más rápido).

(¿Cómo insertar rápidamente 1 millón de datos en la base de datos? Tenemos una operación para insertar datos con MyISAM primero y luego modificar el motor de almacenamiento a InnoDB).

Cómo elegir un motor de almacenamiento

Si tiene altos requisitos de consistencia de datos y necesita soporte de transacciones, puede elegir InnoDB.

Si hay más consultas de datos y menos actualizaciones, y los requisitos de rendimiento de las consultas son relativamente altos, puede elegir MyISAM.

Si necesita una tabla temporal para la consulta, puede elegir Memoria.

2. Proceso de ejecución de una instrucción select

 

3. Proceso de ejecución de una declaración de actualización

Updata en realidad se refiere a la declaración de la operación de inserción y eliminación de actualizaciones.

4, grupo de búfer de InnoDB (grupo de búfer)

Dado que los datos se almacenan en el disco duro, el motor de almacenamiento necesita operar los datos leyendo y cargando primero los datos en la memoria para su funcionamiento. El motor de almacenamiento tiene una unidad mínima al leer datos del disco, que se denomina tamaño de página. El sistema operativo también tiene un tamaño de página, que generalmente es de 4 KB (un archivo de texto de 1 byte ocupa 4 KB). El tamaño de página de InnoDB es de 16 KB, es decir, los datos que InnoDB lee y escribe de cada operación de E/S en el disco duro es un múltiplo entero de 16 KB.

Para acelerar las operaciones de datos y la velocidad correspondiente, InnoDB diseñó un grupo de búfer de memoria. Cuando InnoDB lee datos, primero juzga si los datos están en el búfer de memoria, si existen, los lee directamente desde el búfer, si no existe, lee desde el disco duro y almacena en caché los datos en el búfer.

Página sucia : al modificar datos, los datos también se escriben primero en el búfer. Esto se debe a que los datos en el área del búfer no son coherentes con los datos en el disco duro, lo que se denomina páginas sucias.

Depuración : InnoDB tiene un subproceso de fondo dedicado que escribirá periódicamente los datos modificados en el búfer en el disco duro al mismo tiempo.Este proceso se denomina depuración.

5,Búfer de registro de InnoDB:

Registro de rehacer (redo log, ib_logfile0 e ib_logfile1 ubicados en el directorio /var/lib/mysql/, 2 archivos por defecto): sabemos que los datos en el BufferPool anterior se almacenan en un búfer de memoria, si ocurre una interrupción En escenarios tales como electricidad, los datos en la memoria desaparecerán.Si no hay un mecanismo para garantizar la persistencia de los datos en el búfer, los datos recién actualizados no se escribirán en el disco, lo que provocará la pérdida de datos. Por lo tanto, InnoDB tiene un archivo de registro de rehacer que se usa especialmente para registrar cada operación de modificación en el grupo de búfer. En el caso de un corte de energía, etc., cuando la base de datos se inicie la próxima vez, InnoDB actualizará las operaciones que no se descargaron previamente en el disco desde el registro de rehacer al disco. Para asegurar la persistencia de los datos. (Dado que la escritura de archivos redolog es una lectura y escritura secuencial (un tiempo de búsqueda + una rotación + una lectura y escritura), es más eficiente que la lectura y escritura aleatoria de los datos de la base de datos (varias veces (tiempo de búsqueda + tiempo de rotación + tiempo de lectura y escritura) )), así que escriba redolog en lugar de escribir directamente en el archivo de datos de la base de datos). El tamaño del registro de rehacer es fijo. Una vez que los datos estén llenos, activará las tareas programadas de InnoDB para realizar operaciones sucias. Luego continúe registrando el contenido antes de sobrescribirlo.

Registro de deshacer (registro de reversión): El registro de deshacer registra principalmente el estado de los datos antes de que se inicie la transacción. Si ocurre una excepción durante la transacción, el registro de deshacer se utilizará para lograr la recuperación de reversión de datos. Asegurar la atomicidad de las transacciones. Esto es similar al registro beforeimage en la consistencia de transacción distribuida de alibaba seata, que se utiliza para la compensación de recuperación de fallas.

6, Binlog

binlog registra todas las declaraciones DDL y DML en forma de eventos. Sus dos funciones muy importantes son 1. Replicación maestro-esclavo y 2. Recuperación de datos.

El principio de la replicación maestro-esclavo es leer el binlog del servidor maestro desde el servidor y luego ejecutarlo nuevamente.

Supongo que te gusta

Origin blog.csdn.net/liuhenghui5201/article/details/115513926
Recomendado
Clasificación