Compartir tecnología

[Preguntas de la entrevista] MySQL (Parte 4)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Hablemos en detalle de los pasos para ejecutar una declaración MySQL.

Los pasos para que la capa Servidor ejecute SQL en secuencia son:

Solicitud de cliente -> Conector (verificar la identidad del usuario y otorgar permisos) Consultar caché (regresar directamente si existe caché, realizar operaciones posteriores si no) Analizador (realizar análisis léxico y análisis de sintaxis de SQL) Optimizador (ejecutar principalmente el método de optimización de SQL para seleccionar el mejor plan de ejecución) Ejecutor (al ejecutar, primero verificará si el usuario tiene permiso de ejecución y luego usará la interfaz proporcionada por este motor) -> Vaya a la capa del motor para obtener la devolución de datos (si el caché de consultas está activado, almacenará en caché los resultados de la consulta)

2. Pool de búfer

Buffer Pool es una parte importante del motor de almacenamiento InnoDB en la base de datos MySQL. Se utiliza principalmente para almacenar en caché datos de tablas e indexar datos para reducir las operaciones de E/S del disco y mejorar la eficiencia del procesamiento de la base de datos. El siguiente es un análisis detallado de Buffer Pool:

1. Conceptos básicos

  • definición: Buffer Pool es un área de memoria en el motor de almacenamiento InnoDB, que se utiliza para almacenar en caché páginas de datos e indexar páginas en el disco para reducir el acceso directo al disco.

  • efecto: Mejore la velocidad de acceso a los datos y reduzca los costos de E/S del disco mediante el mecanismo de almacenamiento en caché.

  • composición : Buffer Pool consta de páginas de datos almacenadas en caché (Page) y bloques de control correspondientes. El bloque de control almacena la información de metadatos de la página de caché, como el espacio de tabla al que pertenece, el número de página de datos, la dirección de la página de caché en el Buffer Pool, etc.

2. Tamaño y configuración

  • tamaño predeterminado: El tamaño predeterminado del Buffer Pool en MySQL suele ser 128 MB (pero tenga en cuenta que diferentes versiones de MySQL o diferentes configuraciones pueden hacer que el tamaño predeterminado sea diferente).

  • Parámetros de configuración:aprobarinnodb_buffer_pool_sizeLos parámetros pueden configurar el tamaño del grupo de búfer. Generalmente se recomienda configurarlo entre el 60% y el 80% de la memoria del sistema.

  • asignación de memoria: Buffer Pool es un espacio de memoria continuo. Cuando MySQL se ejecuta durante un período de tiempo, habrá páginas de caché libres y páginas de caché utilizadas en este espacio de memoria.

3. Tipos y gestión de páginas de datos

  • tipo

    : Las páginas de datos del Buffer Pool se pueden dividir en tres tipos según su estado: Página libre, Página limpia y Página sucia.

    • Páginas libres: páginas en caché que no se utilizan.

    • Página limpia: una página de caché que se ha utilizado pero los datos no se han modificado.

    • Página sucia: una página de caché que se ha utilizado y los datos se han modificado, y sus datos no son consistentes con los datos del disco.

  • administrar

    : InnoDB administra estas páginas de caché a través de tres estructuras de listas vinculadas:

    • Lista enlazada gratuita: gestiona páginas gratuitas y registra la información del bloque de control de las páginas de caché gratuitas.

    • Lista vinculada LRU: administra páginas limpias y páginas sucias, utiliza un algoritmo LRU mejorado y se divide en áreas jóvenes y áreas antiguas para optimizar la tasa de aciertos de caché.

    • Lista enlazada de vaciado: gestiona las páginas sucias que deben vaciarse en el disco, ordenadas por hora de modificación.

4. Mecanismo de trabajo

  • acceso a los datos : Cuando es necesario acceder a una página de datos, InnoDB primero verificará si la página ya está en el Buffer Pool. Si ya existe, la página se usa directamente; si no existe, la página se lee desde el disco al grupo de búfer y se actualiza la lista vinculada correspondiente.

  • Actualización de datos: Cuando se modifica una página de datos, la página se marcará como una página sucia y se puede agregar a la lista vinculada de Vaciar para esperar a que el hilo en segundo plano la vacíe en el disco.

  • desalojo de caché: Cuando el espacio del grupo de búfer es insuficiente, la página de caché utilizada menos recientemente se eliminará de acuerdo con el algoritmo LRU.

5. Optimización y precauciones

  • Establecer el tamaño apropiadamente: Configuraciones razonables basadas en la memoria del sistema y las condiciones de carga de la base de datosinnodb_buffer_pool_sizeparámetro.

  • Monitorear y ajustar: Supervise periódicamente los indicadores de uso y rendimiento de Buffer Pool y realice los ajustes necesarios.

  • Evite el escaneo completo de la tabla: El escaneo completo de la tabla hará que se cargue una gran cantidad de páginas de datos en el grupo de búfer, lo que reducirá la tasa de aciertos de la caché.

En resumen, Buffer Pool es uno de los componentes clave del motor de almacenamiento InnoDB en la base de datos MySQL. Mediante una configuración y administración razonables, el rendimiento y la eficiencia de la base de datos se pueden mejorar significativamente.

3.proceso MySQL

El proceso MySQL involucra múltiples enlaces, desde la conexión entre el cliente y el servidor MySQL, hasta la ejecución, optimización, lectura de datos y devolución de resultados de sentencias SQL. La siguiente es una descripción detallada del proceso MySQL:

1. Conexión y autenticación

  1. Conector (Administrador de conexiones):

    • Cuando un cliente (como una aplicación o herramienta de línea de comandos) solicita una conexión a un servidor MySQL, el conector de MySQL es responsable de manejar estas solicitudes de conexión.

    • El conector verifica la identidad y los permisos del cliente, lo que normalmente incluye verificar que el nombre de usuario y la contraseña coincidan.

    • Si la verificación es exitosa, el conector asignará un hilo (o sesión) al cliente para operaciones SQL posteriores.

2. Procesamiento de consultas

  1. Query Cache (Query Cache, nota: este módulo se ha eliminado en MySQL 8.0):

    • Para consultas SELECT, MySQL primero verifica si la misma consulta y sus resultados existen en el caché de consultas.

    • Si está presente, MySQL devolverá directamente los resultados en el caché, evitando así realizar la operación de consulta real.

    • Sin embargo, debido a que el almacenamiento en caché de consultas puede causar inconsistencia en los datos (por ejemplo, los datos almacenados en caché pueden haber sido modificados por otras transacciones), la función de almacenamiento en caché de consultas se eliminó en MySQL 8.0.

  2. Analizador:

    • La declaración SQL enviada por el cliente se envía primero al analizador.

    • La tarea del analizador es analizar la declaración SQL, verificar si su sintaxis es correcta y convertirla en una estructura de datos interna (como un árbol de análisis o un árbol de sintaxis).

    • Si hay un error de sintaxis en la declaración SQL, el analizador devolverá información de error al cliente.

  3. Preprocesador:

    • En algunas versiones de MySQL o en algunos escenarios específicos, puede haber una etapa de preprocesador.

    • El preprocesador es el principal responsable de procesar aún más las declaraciones SQL, como verificar si la tabla o el campo existe, expandir * en la declaración SELECT a todas las columnas de la tabla, etc.

  4. Optimizador:

    • El optimizador es responsable de evaluar diferentes planes de ejecución para declaraciones SQL y seleccionar el plan de ejecución óptimo.

    • El optimizador considera una variedad de factores, como los índices disponibles, la eficiencia del método de unión, el costo de la consulta, etc.

    • El optimizador puede mejorar significativamente el rendimiento de las consultas mediante operaciones como el uso de índices, la reordenación de consultas o la combinación de consultas.

  5. Ejecutor:

    • El ejecutor realiza las operaciones de consulta reales según el plan de ejecución generado por el optimizador.

    • El ejecutor llamará a la interfaz del motor de almacenamiento (como InnoDB) para leer los datos en la tabla de datos y realizar operaciones como clasificación, agregación y filtrado.

    • Finalmente, el ejecutor devuelve los resultados de la consulta al cliente.

3. Almacenamiento y recuperación de datos

  • Motor de almacenamiento:

    • MySQL admite múltiples motores de almacenamiento y cada motor de almacenamiento tiene sus propios métodos específicos de almacenamiento y recuperación de datos.

    • InnoDB es uno de los motores de almacenamiento predeterminados de MySQL y admite funciones avanzadas de bases de datos, como procesamiento de transacciones, bloqueo a nivel de filas y claves externas.

    • Cuando el ejecutor llama a la interfaz del motor de almacenamiento, el motor de almacenamiento es responsable de leer datos del disco o escribir datos en el disco.

  • Grupo de búfer:

    • El motor de almacenamiento InnoDB utiliza Buffer Pool para almacenar en caché los datos de la tabla e indexar los datos para reducir el acceso directo al disco.

    • Las páginas de datos en el Buffer Pool se administran según la frecuencia de acceso y el estado de modificación para mejorar la tasa de aciertos de la caché y el rendimiento de las consultas.

4. Procesamiento de transacciones

  • Transacción:

    • MySQL admite el procesamiento de transacciones, lo que permite confirmar o revertir múltiples operaciones en su conjunto.

    • Durante la ejecución de la transacción, MySQL registrará la información de registro necesaria (como el registro de rehacer y el registro de deshacer) para garantizar la integridad y coherencia de los datos.

    • Si la ejecución de la transacción es exitosa, todas las modificaciones se guardarán permanentemente en la base de datos; si la ejecución de la transacción falla, puede usar el registro de deshacer para realizar una operación de reversión y restaurar los datos al estado antes de que comenzara la transacción.

5. Resumen

El proceso de MySQL implica conexión y autenticación, procesamiento de consultas, almacenamiento y recuperación de datos y procesamiento de transacciones. Al optimizar cada paso en estos enlaces, se puede mejorar significativamente el rendimiento y la confiabilidad de la base de datos MySQL. Al mismo tiempo, comprender el proceso de ejecución de MySQL también ayudará a comprender mejor su mecanismo de trabajo interno, lo que permitirá diseñar y optimizar mejor la base de datos.

4.Grupo de conexiones MySQL

El grupo de conexiones de MySQL es una tecnología utilizada para administrar y reutilizar conexiones de bases de datos. Está diseñada para mejorar el rendimiento y la eficiencia de las operaciones de la base de datos, especialmente en entornos de alta concurrencia. La siguiente es una explicación detallada sobre el grupo de conexiones MySQL:

1. Concepto

El grupo de conexiones MySQL establece una cantidad suficiente de conexiones de bases de datos cuando se inicia el programa y administra estas conexiones de manera uniforme para formar un grupo de conexiones. Cuando el programa necesita acceder a la base de datos, solicitará dinámicamente una conexión desde el grupo de conexiones y devolverá la conexión al grupo de conexiones después de su uso, en lugar de volver a crear y cerrar la conexión para cada operación.

2. ¿Por qué utilizar la agrupación de conexiones?

  1. Reducir el consumo de recursos : La creación y el cierre de una conexión de base de datos es un proceso que requiere relativamente tiempo, ya que implica el protocolo de enlace de tres vías y el movimiento de cuatro vías de la conexión TCP, así como el proceso de autenticación de la base de datos. Mediante la agrupación de conexiones, las conexiones existentes se pueden reutilizar para reducir estos gastos generales.

  2. Mejorar el rendimiento : En un escenario de alta concurrencia, si se crea una nueva conexión de base de datos para cada solicitud, el rendimiento del servidor disminuirá significativamente. El uso de un grupo de conexiones puede mejorar significativamente la velocidad de respuesta y el rendimiento de la base de datos.

  3. Evite fugas de conexión : Sin utilizar un grupo de conexiones, si ocurre una excepción cuando el programa cierra la conexión, puede causar una fuga de conexión, es decir, la conexión no se cierra correctamente y ocupa recursos del sistema. El grupo de conexiones puede evitar esta situación mediante el mecanismo de reciclaje de tiempo de espera.

3. Principio de funcionamiento del grupo de conexiones.

  1. inicialización: Cuando se inicia el programa, el grupo de conexiones creará una cierta cantidad de conexiones de base de datos de acuerdo con la configuración y colocará estas conexiones en el grupo de conexiones para realizar una copia de seguridad.

  2. Solicitar conexión : Cuando el programa necesite acceder a la base de datos, solicitará una conexión desde el grupo de conexiones. Si hay una conexión inactiva en el grupo de conexiones, se devolverá directamente al programa para su uso; si no hay una conexión inactiva, esperará un cierto período de tiempo o devolverá un error según la configuración.

  3. Usar conexión: El programa utiliza la conexión solicitada para realizar operaciones de base de datos.

  4. conexión de regreso : Una vez completada la operación, el programa devuelve la conexión al grupo de conexiones. El grupo de conexiones realizará ciertas comprobaciones en la conexión. Si la conexión aún es válida, se volverá a colocar en el grupo de conexiones; si la conexión ha caducado, se cerrará y se eliminará del grupo de conexiones.

  5. Cerrar grupo de conexiones: Cuando finalice el programa, todas las conexiones en el grupo de conexiones se cerrarán y se liberarán los recursos del sistema ocupados.

4. Proveedor del grupo de conexiones

Hay muchos proveedores de grupos de conexiones MySQL en el mercado, entre los cuales los más populares son:

  • DBCP : Es una implementación del grupo de conexiones de código abierto bajo el proyecto Apache, y es el grupo de conexiones que viene con Tomcat. Es más rápido que otros grupos de conexiones, pero puede que no sea lo suficientemente estable.

  • C3P0 : Es un grupo de conexiones JDBC de código abierto, que implementa origen de datos y enlace JNDI, y admite el estándar JDBC3 y la extensión estándar JDBC2. La tasa de C3P0 es relativamente lenta pero muy estable.

  • druida (Druida): es un grupo de conexiones de código abierto proporcionado por Alibaba. Combina las ventajas de DBCP y C3P0 y proporciona potentes funciones de monitoreo y expansión. Druid es actualmente uno de los grupos de conexiones MySQL más utilizados.

5. Configuración del grupo de conexiones

La configuración del pool de conexiones suele incluir los siguientes aspectos:

  • Número máximo de conexiones: el número máximo de conexiones que el grupo de conexiones puede gestionar.

  • Número mínimo de conexiones: El número inicial de conexiones creadas cuando se inicia el grupo de conexiones.

  • Obtener tiempo de espera de conexión: El tiempo máximo de espera al obtener una conexión del grupo de conexiones.

  • Verificación de conexión: Verifique la validez de la conexión antes de obtener la conexión o al devolverla.

  • Estrategia de reciclaje de conexiones: Recicle las conexiones según su tiempo de inactividad y tiempo de uso.

6. La relación entre el grupo de conexiones y el grupo de subprocesos.

La agrupación de conexiones y la agrupación de subprocesos son dos tecnologías de agrupación de recursos diferentes, pero existe una cierta relación entre ellas. El grupo de subprocesos se utiliza principalmente para administrar recursos de subprocesos, mientras que el grupo de conexiones se utiliza para administrar los recursos de conexión de la base de datos. Cuando un subproceso en el grupo de subprocesos necesita realizar una operación de base de datos, solicitará una conexión desde el grupo de conexiones una vez completada la operación y la conexión se devolverá al grupo de conexiones; Esta relación ayuda a lograr una utilización eficiente de los recursos y una gestión simplificada.

En resumen, el grupo de conexiones MySQL es una importante tecnología de gestión de conexiones de bases de datos. Proporciona un fuerte soporte para las operaciones de la base de datos mediante la reutilización de conexiones, lo que reduce el consumo de recursos y mejora el rendimiento. En aplicaciones reales, se pueden seleccionar el proveedor del grupo de conexiones y los parámetros de configuración adecuados de acuerdo con las necesidades y escenarios específicos del proyecto.

Las preguntas de la entrevista relacionadas con los registros de MySQL pueden cubrir muchos aspectos, incluido el tipo, la función, la configuración, la optimización de los registros y la aplicación de los registros en la recuperación y replicación de datos, etc. Las siguientes son algunas preguntas comunes de entrevistas relacionadas con registros de MySQL y sus respuestas detalladas:

5. ¿Cuáles son los registros comunes en MySQL? ¿Cuál es su función respectiva?

Los registros comunes en MySQL incluyen los siguientes:

  • Registro de errores : Registre información de error cuando el servidor MySQL se inicia, ejecuta o se detiene, así como cualquier información de error crítica. Esto ayuda a diagnosticar el problema.

  • Registro de consultas (Registro general) : Registre cada solicitud y respuesta del cliente recibida por el servidor MySQL, incluidas las actividades de inicio de sesión del usuario, declaraciones SQL ejecutadas, etc. Normalmente se utiliza para auditoría o depuración.

  • Registro de consultas lento : Registre las sentencias SQL cuyo tiempo de ejecución supere el umbral, así como el tiempo de ejecución, las tablas a las que se accedió, los índices utilizados y otra información de estas sentencias. Se utiliza para ajustar el rendimiento y optimizar consultas.

  • Registro binario (Binlog para abreviar): Registre todas las declaraciones que cambian los datos de la base de datos (excluyendo declaraciones como SELECT y SHOW), utilizadas principalmente para replicación y recuperación de datos.

  • Rehacer registro: En el motor de almacenamiento InnoDB, se utiliza para garantizar la durabilidad de las transacciones. Incluso si ocurre una falla del sistema, los datos se pueden recuperar mediante registros de rehacer.

  • Deshacer registro: En el motor de almacenamiento InnoDB, se utiliza para registrar el estado de los datos antes de que comience la transacción, de modo que cuando la transacción falla o se revierte, los datos se puedan restaurar al estado anterior al inicio de la transacción.

  • Registro de retransmisión: En la arquitectura de replicación MySQL, el registro de retransmisión en el servidor esclavo se utiliza para almacenar el contenido del registro binario recibido del servidor maestro.

6. ¿Cómo habilitar y configurar el registro de consultas lento?

El registro de consultas lentas se puede abrir y configurar a través del archivo de configuración de MySQL (como my.cnf o my.ini), o se puede configurar dinámicamente mediante comandos SQL.

  • Método del archivo de configuración:

    • Agregue o modifique los siguientes parámetros en el archivo de configuración de MySQL:

      [mysqld]  
      slow_query_log = 1  
      slow_query_log_file = /path/to/your/slow-query.log  
      long_query_time = 2

      en,

      slow_query_log

      Se utiliza para habilitar registros de consultas lentos,

      slow_query_log_file

      Especifique la ruta al archivo de registro de consultas lentas,

      long_query_time

      Establezca el tiempo de ejecución de las declaraciones SQL que excedan la cantidad de segundos que se registrarán en el registro de consultas lentas.

    • Después de modificar el archivo de configuración, debe reiniciar el servicio MySQL.

  • Modo de comando SQL:

    • El registro de consultas lento se puede habilitar dinámicamente mediante comandos SQL, peroslow_query_log_fileylong_query_timeEs posible que sea necesario establecer los parámetros a través de un archivo de configuración, ya que es posible que las configuraciones dinámicas no sean compatibles o no funcionen.

    • Habilitar registro de consultas lento:

      sql复制代码
      ​
      SET GLOBAL slow_query_log = 'ON';
    • Tenga en cuenta que el registro de consultas lentas abierto dinámicamente mediante comandos SQL puede dejar de ser válido después de reiniciar el sistema, por lo que se recomienda configurarlo a través del archivo de configuración.

7. ¿Cuántos formatos existen para el registro binario (Binlog)? ¿Cual es la diferencia entre ellos?

Los registros binarios (Binlog) tienen tres formatos:

  • DECLARACIÓN : Replicación basada en declaraciones SQL (replicación basada en declaraciones, SBR). En este formato, MySQL registrará las declaraciones SQL ejecutadas en el binlog. Su ventaja es que el volumen de registro es pequeño, pero puede encontrar algunos problemas de replicación, como funciones, activadores, procedimientos almacenados, etc., que pueden causar inconsistencia en los datos maestro-esclavo.

  • FILA : Replicación basada en filas (RBR). En este formato, MySQL registrará los cambios de datos de las filas modificadas. Tiene la ventaja de evitar algunos problemas de replicación, pero el volumen de registro puede ser grande.

  • MEZCLADO : Replicación de base mixta (MBR). MySQL elegirá automáticamente utilizar el formato DECLARACIÓN o FILA según la situación. El modo mixto es el modo predeterminado y está diseñado para combinar lo mejor de ambos mundos.

8. ¿Cómo garantiza Redo Log la durabilidad de las transacciones?

Redo Log garantiza la durabilidad de las transacciones en el motor de almacenamiento InnoDB de las siguientes maneras:

  • Cuando se envía una transacción, el motor InnoDB primero almacenará en caché el registro de rehacer de la transacción en el búfer del registro de rehacer en la memoria y, al mismo tiempo, actualizará la página de datos correspondiente en la memoria.

  • Luego, en el momento apropiado, escriba el registro de rehacer en el búfer de registro de rehacer en el archivo de registro de rehacer en el disco. Este proceso es asíncrono, pero el tiempo y la frecuencia del cepillado del disco se pueden controlar configurando parámetros.

  • Si se produce una falla del sistema, el motor InnoDB verificará el archivo de registro de rehacer al inicio y restaurará las modificaciones realizadas por la transacción enviada más recientemente en función de los registros que contiene para garantizar la durabilidad de los datos.

9. Describa brevemente cómo ver y eliminar archivos de registro en MySQL.

Ver archivos de registro

  • registro de errores: Esto generalmente se puede hacer mirando el archivo de configuración de MySQL.log_errorparámetro para especificar la ruta del archivo para ubicar el archivo de registro de errores y usar un editor de texto o una herramienta de línea de comandos comotailcatetc.) para ver su contenido.