Resumen
MySQL es un sistema de gestión de bases de datos de relaciones desarrollado en lenguajes de programación C y C, creado por MySQL AB, que fue fundado por David Axmark, Allan Larsson y Michael Widenius. La versión más nueva es MySQL 9.0.
MySQL es un proyecto de código abierto con licencia GNU.
MySQL es el sistema de gestión de bases de datos más popular y útil actualmente porque es de código abierto, tiene todas las funciones y un alto rendimiento.
Arquitectura
- Diagrama de arquitectura MySQL: Fuente
Capa de cliente
- La primera capa de la arquitectura del sistema MySQL.
- Los servicios importantes de esta capa son el manejo de conexión, la autenticación y la seguridad.
- Manejo de conexiones: Administra las conexiones de los clientes. Cuando un cliente quiere conectarse al servidor MySQL, se crea un nuevo hilo para la conexión. El servidor almacena en caché los subprocesos cuando se crean nuevas conexiones.
- Autenticación: cuando un cliente se conecta a un servidor, debe proporcionar información de autenticación para establecer una conexión. Normalmente, los clientes se autentican utilizando un nombre de usuario y una contraseña.
- Seguridad: MySQL proporciona muchas funciones para proteger la base de datos y verificar los permisos del usuario después de la autenticación.
Capa de servidor
- La siguiente capa de MySQL es responsable de procesar declaraciones de consulta y proporcionar muchas utilidades.
- Las características principales:
- Analizador: cuando un cliente solicita una declaración de consulta, el servidor la analiza para crear un árbol de consulta, reescribe la consulta y define el orden y los índices que se utilizarán para ejecutar la declaración de consulta.
- Optimizador: Optimiza la declaración de consulta antes de su ejecución. Al optimizador no le importa qué motor se utiliza, pero el motor de almacenamiento puede afectar la optimización de la consulta específica.
- Caché de consultas: el caché de consultas almacena el resultado de una declaración de consulta. Si un cliente vuelve a solicitar la misma consulta, el servidor devuelve el resultado almacenado en caché, sin pasar por los pasos de análisis y optimización. Esta característica quedó obsoleta en la versión 8.0 o superior debido a su problema de cuello de botella.
- Servicios y utilidades:
- Copia de seguridad y restauración
- Seguridad: usuario proveedor y sistema de permisos
- Replicación: este es un proceso para copiar y sincronizar datos desde el servidor principal a muchos servidores secundarios.
- Grupo
- Partición: divide la tabla en muchas partes usando una lógica específica.
- Workbench: Es una herramienta visual diseñada para interactuar y utilizar MySQL.
Capa de almacenamiento
- Es un nivel de responsabilidad por la forma en que almacenamos los datos en la base de datos.
- De forma predeterminada, MySQL utiliza el motor de almacenamiento InnoDB.
- MySQL admite muchos motores de almacenamiento diferentes:
- InnoDB (predeterminado)
- MiISAM
- MEMORIA
- CSV
- ARCHIVO
- AGUJERO NEGRO
- UNIR
- FEDERADO
Optimizar el rendimiento para MySQL
Optimizar la declaración SQL
Explicar la declaración
- Predicción de consultas sin ejecución
explain sql_statememnt
- Explicar después de ejecutar la consulta
explain analyze sql_statement
Técnica de indexación
- Mejora el rendimiento al realizar consultas y búsquedas.
- Al crear un índice para varias columnas, la primera columna es muy importante. Decide la ejecución de una declaración de consulta. Por ejemplo, si crea un índice en (nombre, cumpleaños), una consulta que utilice la columna "nombre" utilizará este índice, pero una consulta que utilice la columna "cumpleaños" no.
- Sintaxis para crear un nuevo índice:
create index idx_birthday on customers(birthday);
- El comando hará que el índice especificado sea inaccesible para el optimizador de consultas, evitando así que se considere para los planes de ejecución de consultas:
alter table customers alter index idx_birthday invisible;
Dividir
- Cuando el tamaño de una base de datos es superior a 2 GB (o superior a 10 millones de registros), debes utilizar particiones para esa base de datos.
- Al utilizar particiones, el rendimiento mejorará.
- El plan de partición debe basarse en la columna que se utiliza con frecuencia en las cláusulas WHERE.
Optimizar los parámetros de la base de datos.
Golpe de caché de búfer
- Es el porcentaje de datos que el sistema carga desde el buffer cache en lugar del almacenamiento físico.
- Si el porcentaje es inferior al 90%, entonces debes optimizarlo.
- Depende de 2 parámetros:
-
Innodb_buffer_pool_read_requests: solicitud total enviada al Buffer Pool. Comando: muestra el estado global como '%Innodb_buffer_pool_read_requests%
-
Innodb_buffer_pool_reads: el total de solicitudes que no se encuentran en el grupo de búfer en la memoria se deben leer desde el disco. Comando: muestra el estado global como '%Innodb_buffer_pool_reads%
- Fórmula de cálculo:
(Innodb_buffer_pool_read_requestss - Innodb_buffer_pool_reads) x100 / Innodb_buffer_pool_read_requests
Golpe de caché de tabla
- MySQL almacenará en caché la tabla para consultarla rápidamente en la memoria.
- Si el porcentaje es inferior al 80%, entonces debes optimizarlo.
- Depende de 2 parámetros:
-
Open_tables: el total de tablas se abre en caché. Comando: muestra el estado global como 'Open_tables
-
Opened_tables: Total de tablas abiertas. Comando: muestra el estado global como 'Tablas_abiertas
- Fórmula de cálculo: Open_tables/Opened_tables
Acierto de caché de definición de tabla
- Al ejecutar una consulta, MySQL requiere información sobre la tabla, como su nombre, número de columnas y número de filas. Esta información se conoce como definición de tabla.
- Si el porcentaje es inferior al 80%, entonces debes optimizarlo.
- Depende de 2 parámetros:
-
Open_table_definitions: las tablas de definiciones totales están en caché. Comando: muestra el estado global como 'Open_table_definitions'
-
Opened_tables: Se solicitan tablas de definición total. Comando: muestra el estado global como 'Tablas_abiertas'
- Fórmula de cálculo: Open_table_definitions/Opened_table_definitions
Tabla temporal en memoria
- Muchas sentencias SQL como Ordenar, Agrupar por, ... deben utilizar una tabla temporal.
- Si el porcentaje es inferior al 80%, entonces debes optimizarlo.
- Depende de 2 parámetros:
-
Create_tmp_disk_tables: las tablas temporales totales se crean en el disco. Comando: muestra el estado global como '%Created_tmp_disk_tables%
-
Create_tmp_tables: se crean tablas temporales totales. Comando: muestra el estado global como '%Created_tmp_tables%
- Fórmula de cálculo: (Created_tmp_tables -Created_tmp_disk_tables)/Created_tmp_tables
Conclusión
Este blog ofrece conocimientos basados en investigaciones sobre MySQL. MySQL es un sistema de gestión de bases de datos relacionales conocido por su bajo costo, amplias utilidades y alto rendimiento, lo que lo hace adecuado para una amplia gama de proyectos. Si bien este blog cubre muchas características y aspectos de MySQL, hay más por explorar. Profundizaré en características y conocimientos adicionales en futuros blogs.
Gracias por leer y nos vemos en mi próximo blog.
Documento de referencia
- Documentación MySQL
- Curso MySQL - Tran Quoc Huy
- Wikipedia-MySQL