MySQL (MariaDB) se bloquea con frecuencia

9

Recientemente migré un antiguo servidor que ejecuta MySQL a un nuevo VPS que ejecuta MariaDB 5.5. No tengo demasiado en ejecución en el servidor (solo unos pocos sitios PHP) y la memoria libre parece estar bien, pero la base de datos sigue fallando, a veces cada pocos días, otras veces en unas pocas horas.

Recibo los siguientes errores en los registros:

131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 54362112 bytes)
131231  1:43:04 InnoDB: The InnoDB memory heap is disabled
131231  1:43:04 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131231  1:43:04 InnoDB: Compressed tables use zlib 1.2.3.4
131231  1:43:04 InnoDB: Using Linux native AIO
131231  1:43:04 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
131231  1:43:04 InnoDB: Completed initialization of buffer pool
131231  1:43:04 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131231  1:43:04 [ERROR] Plugin 'InnoDB' init function returned error.
131231  1:43:04 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
131231  1:43:04 [Note] Plugin 'FEEDBACK' is disabled.
131231  1:43:04 [ERROR] Unknown/unsupported storage engine: InnoDB
131231  1:43:04 [ERROR] Aborting

131231  1:43:04 [Note] /usr/sbin/mysqld: Shutdown complete

He jugado con la configuración de my.cnf para InnoDB Heap, que no parece ayudar. Aquí está la porción relevante:

innodb_buffer_pool_size = 128M
innodb_log_buffer_size  = 8M
innodb_file_per_table   = 1
innodb_open_files       = 400
innodb_io_capacity      = 400
innodb_flush_method     = O_DIRECT

Parece que tengo "un montón" de RAM libre, y también tengo algunos intercambios disponibles:

root@phoenix:~# free -m
             total       used       free     shared    buffers     cached
Mem:           994        923         71          0         19        417
-/+ buffers/cache:        486        508
Swap:         1023        131        892

¿Cómo puedo resolver / solucionar este problema? He buscado pistas en el interwebz, pero nada me ha ayudado.

Matt Hamann
fuente
1
¿Cómo se ve la memoria justo antes de que falle? El [ERROR] mysqld: Out of memoryseguro parece una pista fuerte. ¿Revisó los registros de su sistema para ver si el núcleo (OOM) decidió matar mysql?
Zoredache
Debe registrar los identificadores de archivo utilizados y la memoria utilizada antes y después del bloqueo (tal vez incluso el volcado del topcomando en cada intervalo) para saber qué podría causar el bloqueo. ¿Algún otro servicio se ejecuta en sus servidores como mysql (mariadb)?
Ashwin Kumar
1
Hay una gran respuesta sobre DBA que parece ser útil: dba.stackexchange.com/questions/1927/…
Matt Hamann
Prueba performance_schema = off?

Respuestas:

9

Espero que te sea útil.

tratar

performance_schema = off

en la [mysqld]sección de su configuración.

https://mariadb.com/resources/blog/starting-mysql-on-low-memory-virtual-machines/

sheng chi
fuente
Dando esto una oportunidad. Informaré poco después de que le de al servicio unos días para mantenerme en funcionamiento constantemente.
Matt Hamann
Parece haber ayudado bastante. No estoy seguro de que esté 100% resuelto, pero ha estado funcionando bastante bien desde que ajusté esto. Gracias.
Matt Hamann