- deshacer tablespace
Enlace al documento oficial: https://dev.mysql.com/doc/refman/5.7/en/innodb-undo-tablespaces.html
Rol: utilizado para hacer la operación de deshacer
Almacenamiento: la versión 5.7 todavía está en el espacio de tabla compartido (ibdataN) por defecto, y es independiente por defecto después de la versión 8.0 (undo_001, undo_002)
Sugerencia de producción: después de la versión 5.7, deshaga manualmente de forma independiente
deshacer la gestión del espacio de tabla:
cómo ver los parámetros de configuración de deshacer
#打开独立undo模式,并设置undo的个数,3~5个(0 表示没有独立)
mysql> SELECT @@innodb_undo_tablespaces;
+---------------------------+
| @@innodb_undo_tablespaces |
+---------------------------+
| 3 |
+---------------------------+
#undo日志的大小,默认1G。
mysql> SELECT @@innodb_max_undo_log_size;
+----------------------------+
| @@innodb_max_undo_log_size |
+----------------------------+
| 1073741824 |
+----------------------------+
# 开启undo自动回收的机制(undo purge)
mysql> select @@innodb_undo_log_truncate;
+----------------------------+
| @@innodb_undo_log_truncate |
+----------------------------+
| 0 | 0 表示不回收
+----------------------------+
# 触发自动回收的条件,单位是检测次数。
mysql> select @@innodb_purge_rseg_truncate_frequency;
+----------------------------------------+
| @@innodb_purge_rseg_truncate_frequency |
+----------------------------------------+
| 128 |
+----------------------------------------+
Configurar deshacer tablespaces
Descripción del documento oficial: https://dev.mysql.com/doc/refman/5.7/en/innodb-undo-tablespaces.html
El espacio de tabla para deshacer solo se puede cambiar cuando se inicializa y no se puede cambiar en uso (en ibdata, no se puede cambiar)
Solución: migración de espacio de tabla (físico) e importación lógica.
# 初始化时配置:
第一历程:编写配置文件
# vim /etc/my.cnf
innodb_undo_tablespaces=3
innodb_max_undo_log_size=128M
innodb_undo_log_truncate=on
innodb_purge_rseg_truncate_frequency=32
第二历程:初始化数据
mysqld --initialize-insecure --user=mysql --basedir=/server/app/mysql --datadir=/server/data
第三历程:启动数据库
# systemctl restart mysqld
# ll -h /server/data/undo* 默认10M
-rw-r----- 1 mysql mysql 10M May 16 15:48 /server/data/undo001
-rw-r----- 1 mysql mysql 10M May 16 15:48 /server/data/undo002
-rw-r----- 1 mysql mysql 10M May 16 15:48 /server/data/undo003
¿Cómo realizar la migración Deshacer (almacenamiento independiente)?
查看存储位置:
show variables like "%undo%";
a.关闭数据库
# /etc/init.d/mysqld stop
b.设定路径参数
# vim /etc/my.cnf
innodb_undo_directory=/data/3306/undologs
c.创建目录,并拷贝文件
mkdir -p /data/3306/undologs
chown -R mysql. /data/*
#先复制过去,没问题,再删掉。
cp -a /data/3306/data/undo* /data/3306/undologs/
d.启动数据库
/etc/init.d/mysqld start
mysql
show variables like "%undo%";
- Espacio de tabla temporal
1. Función: almacenar la tabla temporal interna creada por el optimizador de tabla temporal creado por el usuario
2. ¿Cómo se administra?
# ll -h /server/3306/data/ibtmp1
-rw-r----- 1 mysql mysql 12M May 7 16:14 /server/3306/data/ibtmp1
#vim /etc/my.cnf
innodb_temp_data_file_path=ibtmp1:12M;ibtmp2:512M:autoextend:max:512M
# systemctl restart mysqld
建议数据初始化之前设定好,一般2-3个,大小512M-1G。
- Búfer de escritura doble (DWB)
Introducción: Mejore la confiabilidad de innodb para resolver fallas de escritura parcial (salto de página de escritura de página parcial).
Ubicación: 5.7 se almacena en ibdataN de forma predeterminada y puede ser independiente después de 8.20
¿Qué problema resuelve Doublewrite Buffer?
Luego, primero planteamos una pregunta sobre la unidad más pequeña de IO:
1. La unidad más pequeña de IO predeterminada de MySQL es () y Oracle es ().
2. La unidad más pequeña de E / S del sistema de archivos es ()
3. La unidad más pequeña de E / S de disco es ()
解析:16K,8K,4K (也有1K的),512B
Por lo tanto, existe el riesgo de que la página se dañe debido a las escrituras de IO:
Flujo de trabajo de Doublewrite Buffer
Doublewrite consta de dos partes, una es el búfer de doble escritura en la memoria, cuyo tamaño es de 2 MB, y la otra son las 128 páginas continuas en el espacio de tabla compartido (ibdata x) en el disco, es decir, 2 extensiones, y el tamaño también es de 2 m.
1. Cuando una serie de mecanismos desencadenan el vaciado de páginas sucias en el grupo de búfer de datos, no se escriben directamente en el archivo de datos del disco, sino que primero se copian en el búfer de escritura doble en la memoria;
2. Luego, escriba en el espacio de tabla compartido del disco dos veces desde los dos búferes de escritura (almacenamiento continuo, escritura secuencial, alto rendimiento), cada uno escribiendo 1 MB;
3. Una vez completado el segundo paso, escriba los datos de la página sucia en el búfer de escritura doble en los archivos de espacio de tabla reales (escritura discreta); (después de que se solidifiquen los datos de la página sucia, los datos de escritura doble correspondientes se pueden sobrescribir marcándolos)
- Cambiar búfer
Introducción: por ejemplo, insertar, actualizar y eliminar datos. Para índices agrupados, los nodos hoja se actualizarán inmediatamente. Para el índice auxiliar, no se actualiza en tiempo real. Ponlo en el búfer de cambios
En la estructura de memoria de InnoDB, se agrega insertar búfer (sesión) y la versión actual se llama cambiar búfer.
Tamaño predeterminado: mysql ocupa el 25% de la memoria.
Función: almacenar temporalmente los datos actualizados que necesita el índice auxiliar. Cuando es necesario consultar los datos de la nueva inserción, la operación de combinación se realiza en la memoria y el índice auxiliar es el último en este momento.
Para obtener contenido más interesante, preste atención a la cuenta pública de WeChat