Saltar al contenido

MySQL no libera memoria

Recabamos en internet y así de esta manera traerte la respuesta para tu problema, en caso de alguna duda puedes dejarnos tu inquietud y te contestaremos con mucho gusto.

Solución:

Primero, eche un vistazo a la arquitectura InnoDB (cortesía de Percona CTP Vadim Tkachenko)

Arquitectura InnoDB

InnoDB

Su estado para el Buffer Pool dice

Tamaño del grupo de almacenamiento intermedio 1310719

Ese es su tamaño de búfer en páginas. Cada página es de 16K. Eso resulta 20G – 16K.

Tenga en cuenta lo siguiente: Empujó datos al grupo de búfer de InnoDB. Qué cambió ?

Buffer pool size
1310719 Free buffers 271419 (It was 347984) Database pages 1011886 (Is was 936740) Old database pages 373510 (It was 345808) Modified db pages 4262 (It was 0)

Además, tenga en cuenta la diferencia entre el tamaño del grupo de búfer en las páginas.

1310719 (Tamaño del grupo de búfer) – 1011886 (Páginas de la base de datos) = 298833

Eso es 298833 páginas InnoDB. Cuanto espacio es eso???

mysql> select FORMAT(((1310719  - 1011886) * 16384) / power(1024,3),3) SpaceUsed;
+-----------+
| SpaceUsed |
+-----------+
| 4.560     |
+-----------+

Eso es 4.56 GB. Ese espacio se utiliza para la sección de búfer de inserción del grupo de búfer de InnoDB (también conocido como búfer de cambio). Esto se usa para mitigar los cambios en los índices no únicos en el archivo de espacio de tabla del sistema (que todos conocen como ibdata1).

El motor de almacenamiento InnoDB está administrando las partes internas del Buffer Pool. Por lo tanto, InnoDB nunca superará el 62,5% de RAM. Es más, la memoria RAM para el Buffer Pool nunca se devuelve.

DE DONDE VIENE EL 70.2% DE LA RAM???

Vuelva a mirar la salida de mysqltuner.pl en estas lineas

[OK] Maximum possible memory usage: 22.6G (82% of installed RAM)
Key buffer size / total MyISAM indexes: 2.0G/58.7M
[--] Total buffers: 22.2G global + 2.7M per thread (151 max threads)

mysqld tiene tres formas principales de asignar RAM

  • Establece 20G del InnoDB Buffer Pool
  • Tienes 2G para MyISAM Key Cache
  • Los 0,6 G restantes provienen de 151 (máx_conexiones) veces (2,7 M por conexión de base de datos o subproceso). Los 2,7 millones provienen de (join_buffer_size + sort_buffer_size + read_buffer_size)

Cualquier pequeño aumento en las conexiones de la base de datos elevará la memoria RAM más allá del umbral del 62,5 % que ve para InnoDB.

MyISAM (nota al margen)

Lo que me llama la atención es

Key buffer size / total MyISAM indexes: 2.0G/58.7M

Dado que tiene tan pocos índices para MyISAM. Puede establecer key_buffer_size en 64M.

No necesita reiniciar mysql para eso. Solo corre

SET GLOBAL key_buffer_size = 1024 * 1024 * 64;

Luego, modifique esto en my.cnf

[mysqld]
key_Buffer_size = 64M

Esto le dará al sistema operativo 2 GB de RAM. ¡Tu VM simplemente te amará por eso!

Darle una oportunidad !!!

ADVERTENCIA

Corriendo FLUSH TABLES en las tablas de InnoDB simplemente cierra los archivos contra el .ibd archivos Esto realmente no impulsará los cambios directamente. Los cambios tienen que migrar a través de las tuberías de InnoDB. Es por eso que ves el pico en Modified db pages. Las 4262 páginas modificadas (66,59 MB) se vacían cuando los programas de InnoDB se vacían.

Sección de Reseñas y Valoraciones

Si piensas que ha resultado de ayuda nuestro artículo, agradeceríamos que lo compartas con el resto entusiastas de la programación y nos ayudes a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *