Ajuste del rendimiento de mysql (4)

Prefacio

  Los artículos recientes tratan sobre el contenido relacionado con el ajuste del rendimiento de mysql. Los tres artículos anteriores introdujeron respectivamente el conocimiento relacionado de índices , la implementación de vistas y disparadores en mysql, y el conocimiento relacionado de procedimientos almacenados y funciones almacenadas en mysql . El siguiente artículo primero presentará la arquitectura de mysql, para que podamos comprender mejor la estructura interna y el principio de funcionamiento de mysql, e introducir la diferencia y el uso específico de varios motores de almacenamiento típicos en mysql.
  En primer lugar, presentaré la arquitectura de mysql.

Uno, arquitectura Mysql

  La arquitectura mysql es la parte principal de la operación de mysql. Debemos entender su arquitectura para comprender mejor los principios de mysql y tener una buena base para nosotros al optimizar mysql. La siguiente figura es un diagrama esquemático de la arquitectura de mysql.

  De la figura, sabemos claramente que todo el servidor MySQL se compone de las siguientes partes, como sigue:

  • Grupo de conexiones: componente del grupo de conexiones
  • Servicios y utilidades de administración: servicios y utilidades de administración
  • Interfaz SQL : componentes de la interfaz SQL
  • Analizador : componente analizador de consultas
  • Optimizador : componente optimizador
  • Cachés y búfer : componente de grupo de caché
  • Motores de almacenamiento conectables : motores de almacenamiento
  • Sistema de archivos : sistema de archivos

  A través de la introducción anterior a las distintas partes de MySQL Server, creo que todos tienen una comprensión general de su arquitectura. A continuación, les presentaré los detalles específicos de cada parte.

  • Capa de
      conexión La capa de conexión es la capa más alta de la arquitectura y proporciona principalmente algunos servicios de enlace y cliente , incluida la comunicación de calcetín local y la mayoría de las comunicaciones similares a TCP / IP basadas en herramientas cliente / servidor (C / S). Principalmente completa algunos procesos de conexión similares , autenticación de autorización y esquemas de seguridad relacionados . En esta capa, se introduce el concepto de grupo de subprocesos para proporcionar subprocesos para los clientes que pasan la autenticación y el acceso seguro. El enlace seguro basado en SSL también se implementa en esta capa. El servidor también verificará la autoridad de operación que tiene para cada cliente que acceda de forma segura.

  •   La arquitectura de la segunda capa de la capa de servicio completa principalmente la mayoría de las funciones básicas del servicio , como la interfaz SQL, y completa la consulta de caché, el análisis y la optimización de SQL y la ejecución de algunas funciones integradas. Todas las funciones del motor de almacenamiento cruzado también se implementan en esta capa, como procedimientos, funciones, etc. En esta capa, el servidor analizará la consulta y creará el árbol de análisis interno correspondiente, y completará las optimizaciones correspondientes, como determinar el orden de consulta de la tabla, si usar el índice, etc., y finalmente generará la operación de ejecución correspondiente. . Si es una sentencia de selección, el servidor también consultará la consulta interna Si el espacio de la caché es lo suficientemente grande, el rendimiento del sistema puede mejorarse bien en un entorno que resuelve una gran cantidad de operaciones de lectura.
  • Capa de
      motor Capa de motor de almacenamiento, el motor de almacenamiento es realmente responsable del almacenamiento y extracción de datos en MySQL, y el servidor se comunica con el motor de almacenamiento a través de la API. Los diferentes motores de almacenamiento tienen diferentes funciones de almacenamiento, por lo que podemos elegir el motor de almacenamiento adecuado según nuestras necesidades.
  • Capa de almacenamiento La capa
      de almacenamiento de datos almacena principalmente datos en el sistema de archivos y completa la interacción con el motor de almacenamiento.
      Las anteriores son las funciones principales de cada capa de la arquitectura de la base de datos MySQL. Comparado con otras bases de datos, Mysql tiene su propia singularidad. Su arquitectura se puede aplicar en una variedad de escenarios diferentes y juega un buen papel. Principalmente reflejada en el motor de almacenamiento, la arquitectura del motor de almacenamiento enchufable separa el procesamiento de consultas de otras tareas del sistema y el almacenamiento y extracción de datos. Esta arquitectura puede seleccionar un motor de almacenamiento adecuado según las necesidades comerciales y las necesidades reales. A continuación, le presentaré el contenido relacionado del motor de almacenamiento.

En segundo lugar, el motor de almacenamiento

1. Descripción general del motor de almacenamiento

  A diferencia de la mayoría de las bases de datos, MySQL tiene un concepto de motor de almacenamiento y se puede seleccionar el motor de almacenamiento óptimo para diferentes requisitos de almacenamiento. De hecho, el motor de almacenamiento es una forma de almacenar datos, crear índices, actualizar y consultar datos y otras tecnologías. El motor de almacenamiento se basa en tablas, no en bibliotecas . Por lo tanto, el motor de almacenamiento también se puede llamar tipo de tabla. Las bases de datos como Oracle y SqlServer tienen solo un motor de almacenamiento. MySQL proporciona una arquitectura de motor de almacenamiento enchufable. Por lo tanto, MySQL tiene una variedad de motores de almacenamiento y puede escribir motores de almacenamiento basados ​​en los motores correspondientes.
  Los motores de almacenamiento compatibles con MySQL 5.0 son: InnoDB, MyIAM, BDB, MEMORY, MERGE, EXAMPLE, NDB Cluster, ARCHIVE, CSV, BLACKHOLE, FEDERATED, etc. Entre ellos, InnoDB y BDB proporcionan tablas de transacciones seguras y otros motores de almacenamiento son tablas no seguras para transacciones.
  A continuación, podemos consultar los motores de almacenamiento compatibles con la base de datos actual especificando el motor. Los comandos específicos son los siguientes:

show engines;

  Los motores de almacenamiento compatibles con MySQL son los siguientes: A

  lo que debemos prestar atención aquí es: cuando creamos una nueva tabla, si no especificamos un motor de almacenamiento, el sistema utilizará el motor de almacenamiento predeterminado. Antes de mysql5.5, el motor de almacenamiento predeterminado es MyISAM. Después de 5.5, el motor de almacenamiento predeterminado se convirtió en InnoDB. A continuación, le presentaré varias funciones del motor de almacenamiento.

2. Varias características del motor de almacenamiento

  Anteriormente presentamos los principales motores de almacenamiento en Mysql y luego presentaremos las características de estos motores de almacenamiento. Primero, comprendamos las diferencias entre los principales motores de almacenamiento en su conjunto.

2.1 InnoDB

  El motor de almacenamiento InnoDB es el motor de almacenamiento predeterminado de Mysql. El motor de almacenamiento InnoDB proporciona seguridad en las transacciones con capacidades de confirmación, reversión y recuperación de fallos. Sin embargo, en comparación con el motor de almacenamiento de MyISAM, las escrituras InnoDB son menos eficientes y ocuparán más espacio en disco para retener datos e índices.
  El motor de almacenamiento InnoDB es diferente de otros motores de almacenamiento en características:

  • Para el control de transacciones,
      primero creamos una tabla goods_innodb:
create table goods_innodb(
	id int not NULL AUTO_INCREMENT,
	name varchar(20) NOT NULL,
	primary key(id)
)ENGINE=innodb DEFAULT CHARSET=utf8;

  En segundo lugar, usamos la tabla goods_innodb anterior para el control de transacciones:

start transaction;
insert into goods_innodb(id, name) values(null, 'Meta40');
commit;

  El efecto logrado es el siguiente:

  • Restricciones de clave externa
      MySQL solo admite InnoDB como el motor de almacenamiento que admite claves externas. Al crear una clave externa, la tabla principal debe tener un índice correspondiente. Al crear una clave externa, el índice correspondiente también se creará automáticamente para la tabla de palabras. A continuación, crearemos dos tablas, donde country_innodb es la tabla principal, city_innodb es la tabla secundaria y el campo country_id es la clave externa, que corresponde a la clave principal country_id de la tabla country_innodb. La información correspondiente de las dos tablas es la siguiente:
create table country_innodb(
	country_id int NOT NULL AUTO_INCREMENT,
	country_name varchar(100) NOT NULL,
	primary key(country_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

create table city_innodb(
	city_id int NOT NULL AUTO_INCREMENT,
	city_name varchar(50) not NULL,
	country_id int NOT NULL,
	primary key(city_id),
	key idx_fk_country_id(country_id),
	CONSTRAINT `fk_city_country` FOREIGN KEY(country_id) REFERENCES country_innodb(country_id) ON DELETE
	RESTRICT ON UPDATE CASCADE
)ENGINE= InnoDB DEFAULT CHARSET=utf8;

  El siguiente proceso de creación es similar a la tabla anterior. Por lo tanto, para ahorrar espacio, podemos reemplazarlo directamente con gráficos:

  A continuación, inserte los datos para estas dos tablas:

insert into country_innodb values(null, 'China'),(null,'America'),(null,'Japan');
insert into city_innodb values(null, 'xian', 1),(null,'NewYork', 2),(null,'BeiJing', 1);

  Al crear un índice, puede especificar las operaciones correspondientes en la tabla secundaria al eliminar o actualizar la tabla principal, incluidas RESTRICT, CASCADE, SET NULL y NO ACTION.

  • RESTRICT y NO ACTION son lo mismo, lo que significa que la tabla principal no se puede actualizar cuando la tabla secundaria tiene registros relacionados;
  • CASCADA significa que cuando la tabla principal se actualiza o elimina, el registro correspondiente a la tabla secundaria se actualiza o elimina;
  • SET NULL significa que cuando la tabla principal se actualiza o elimina, la columna correspondiente a la tabla secundaria es SET NULL.

  Para las dos tablas creadas anteriormente, la clave externa de la subtabla se especifica como ON DELETE RESTRICT ON UPDATE CASCADE, luego, cuando la tabla principal elimina registros, si la subtabla tiene registros correspondientes, la eliminación no está permitida y el la tabla principal se está actualizando Al grabar, si la subtabla tiene un registro correspondiente, la subtabla se actualiza en consecuencia. Podemos ver los resultados específicos consultando los datos:

select * from city_innodb;
select * from country_innodb;

  La información de la tabla específica es la siguiente:

  • Método de almacenamiento

  InnoDB almacena tablas e índices de las dos formas siguientes:
  ① Utilice almacenamiento de espacio de tabla compartido , la estructura de la tabla creada de esta manera se almacena en el archivo .frm, los datos y los índices se almacenan en innodb_data_home_dir e innodb_data_file_path se definen en el espacio de tabla , que pueden ser varios archivos.
  ② Al utilizar el almacenamiento de espacio de varias tablas , la estructura de la tabla creada de esta manera todavía existe en el archivo .frm, pero los datos y los índices de cada tabla se almacenan por separado en .idb.

2.2 MyISAM

  Anteriormente presentamos InnoDB y luego presentamos MyISAM. MyISAM no soporta transacciones, y por supuesto no soporta claves foráneas, su ventaja es que tiene una velocidad de acceso rápida, no requiere la integridad de las transacciones, o las aplicaciones basadas en select e insert pueden utilizar básicamente este motor para crear tablas. Entre ellos se encuentran las siguientes dos características más importantes:

create table goods_myisam(
	id int NOT NULL AUTO_INCREMENT,
	name varchar(20) NOT NULL,
	primary key(id)
)Engine=MyISAM DEFAULT CHARSET=utf8;

start transaction;
insert into goods values(null, '电脑3');
rollback;

  El contenido específico es el siguiente:

  A través de los experimentos anteriores, podemos ver que no hay control de transacciones en el motor de almacenamiento myisam.

  • Método de almacenamiento de archivos
      Cada MyISAM se almacena como 3 archivos en el disco, los nombres de los archivos son los mismos que los nombres de las tablas, pero las extensiones son:
  • .frm: definición de tabla de almacenamiento
  • .MYD: MyData, almacenar datos
  • .MYI: MyIndex, índice de almacenamiento

2.3 MEMORIA

  El motor de almacenamiento de memoria almacena los datos de la tabla en la memoria. Cada tabla de memoria corresponde realmente a un archivo de disco, el formato es .frm, en el que solo se almacena la estructura de la tabla, y sus archivos de datos se almacenan en la memoria, lo que favorece el procesamiento rápido de datos y mejora la eficiencia de toda la mesa. El acceso a la tabla de tipo MEMORIA es muy grande, porque sus datos se almacenan en la memoria y el índice Hash se usa por defecto, pero una vez que se cierra el servicio, los datos de la tabla se perderán.

2.4 FUSIÓN

  El motor de almacenamiento MERGE es una combinación de un conjunto de tablas MyISAM. Estas tablas MyISAM deben tener exactamente la misma estructura. La tabla MERGE en sí no almacena datos. Puede realizar operaciones de consulta, actualización y eliminación en tablas MERGE. Estas operaciones son en realidad en la tabla interna MyISAM proceda. Para la operación de inserción de la tabla de tipo MERGE, la tabla insertada se define mediante la cláusula INSERT_METHOD. Puede haber 3 valores diferentes. Se utiliza el valor FIRST o LAST, de modo que la operación de inserción se aplique a la primera o última tabla según corresponda. No está definido. Esta cláusula puede definirse como NO, lo que significa que la operación de inserción no se puede realizar en la tabla MERGE. Podemos realizar una operación DROP en la tabla MERGE, pero esta operación simplemente elimina la definición de la tabla MERGE y no tiene ningún efecto en las tablas internas. La relación entre las tablas es la siguiente:

  Usamos los siguientes casos para crear y usar la tabla MERGE:
1. Primero, creemos tres tablas de prueba payment_2006, payment_2007, payment_all, donde payment_all es la tabla MERGE de las dos primeras tablas; porque creamos antes El caso de la tabla. A continuación, debido a la longitud del artículo, el proceso de creación e inserción de la tabla se reemplaza por imágenes. El código específico para crear la tabla es el siguiente:

2. El código para insertar Los datos son los siguientes:

3. La creación y la inserción de la tabla de datos están terminadas, a continuación, miramos los datos en estas tres tablas respectivamente;

select * from order_1990;
select * from order_1991;
select * from order_all;

  Los datos de la tabla se muestran en la figura:

3. La elección del motor de almacenamiento

  Al elegir un motor de almacenamiento, debe elegir un motor de almacenamiento adecuado de acuerdo con las características del sistema de aplicación. Para sistemas de aplicación complejos, también se puede seleccionar una variedad de motores de almacenamiento para combinarlos de acuerdo con las condiciones reales. A continuación, se muestran los entornos de uso de varios motores de almacenamiento de uso común.

  • InnoDB : es el motor de almacenamiento predeterminado de mysql, se utiliza para aplicaciones de procesamiento de transacciones y admite claves externas. Si la aplicación tiene requisitos relativamente altos para la integridad de las transacciones, requiere consistencia de datos en condiciones concurrentes y las operaciones de datos incluyen muchas operaciones de actualización y eliminación además de accidentes de inserción y consulta, entonces el motor de almacenamiento InnoDB es una opción más adecuada. El motor de almacenamiento InnoDB no solo reduce eficazmente los bloqueos causados ​​por eliminaciones y actualizaciones, sino que también garantiza el envío completo y la reversión de las transacciones. Para sistemas que requieren alta precisión de datos, como sistemas de facturación o sistemas financieros, InnoDB es la selección más adecuada.
  • MyIsam : si la aplicación se basa en operaciones de lectura e inserción, solo hay unas pocas operaciones de actualización y eliminación, y los requisitos de integridad y concurrencia de la transacción no son muy altos, entonces este motor de almacenamiento es muy adecuado.
  • MEMORIA : almacena todos los datos en la RAM y puede proporcionar acceso a varios bloques en el entorno donde se requieren registros de posicionamiento rápido y otros datos similares. El defecto de la MEMORIA es que hay un límite para el tamaño de la tabla. Las tablas que son demasiado grandes no se pueden almacenar en la memoria caché. En segundo lugar, los datos que se deben garantizar se pueden restaurar. Los datos de la tabla se pueden restaurar después de la anomalía terminación de la base de datos. La tabla de MEMORIA se usa generalmente para actualizar tablas pequeñas que no se actualizan con frecuencia para obtener rápidamente resultados de acceso.
  • MERGE : se utiliza para combinar lógicamente una serie de tablas MyISAM equivalentes y referirse a ellas como un objeto. La ventaja de la tabla MERGE es que puede superar el límite de tamaño de una sola tabla MyISAM y, al distribuir tablas no razonables en varios discos, la eficiencia de acceso de la tabla MERGE se puede mejorar de manera efectiva. Esto es muy adecuado para almacenar entornos VLDB como el almacenamiento de datos.

para resumir

  Nuestro artículo reciente le dirá todo el rendimiento de mysql de los dos artículos anteriores, presentamos los índices de conocimiento y vistas relevantes , y los desencadenadores y procedimientos almacenados y funciones almacenadas , este artículo para presentar la arquitectura mysql, así que aprendamos más sobre la estructura interna y principio de funcionamiento de mysql, y también introducir la diferencia y el uso específico de varios motores de almacenamiento típicos en mysql. Por lo tanto, mysql es una habilidad muy importante. Casi todos los trabajos en la computadora necesitan una habilidad de mysq. Por lo tanto, necesitamos un dominio especial. La vida es interminable y la lucha es interminable Trabajamos duro todos los días, estudiamos mucho, mejoramos constantemente nuestras habilidades y creemos que aprenderemos algo. ¡Vamos! ! !

Supongo que te gusta

Origin blog.csdn.net/Oliverfly1/article/details/109546817
Recomendado
Clasificación