Optimización de la configuración de MySQL: mysqld se está quedando sin memoria

15

Estoy un poco confundido acerca de qué configuraciones cambiar en mi archivo my.conf para optimizar para mi servidor (el servidor mysql sigue fallando debido a nuestro alto tráfico).

Aquí está el archivo my.cnf:

[mysqld]

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

key_buffer              = 16M
max_allowed_packet      = 16M
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10

query_cache_limit       = 1M
query_cache_size        = 16M

Y las especificaciones del servidor son:

CPU Cores   2 cores
RAM (Memory)    1GB
SSD (Disk Space)    20GB

Ejecutando Ubuntu 12.04 LTS

Aquí están mis particiones:

NAME   FSTYPE   SIZE MOUNTPOINT LABEL
vda              20G            
├─vda1 ext4     476M /boot      
├─vda2 swap     477M [SWAP]     
└─vda3 ext4    19.1G / 

Cualquier ayuda sería muy apreciada.

Mirando los registros de errores, puedo ver que mysqld se quedó sin memoria:

Feb 17 11:02:06 111488 kernel: [8276839.559141] Out of memory: Kill process 20719 (mysqld) score 75 or sacrifice child
Feb 17 11:02:06 111488 kernel: [8276839.559209] Killed process 20719 (mysqld) total-vm:1347424kB, anon-rss:30524kB, file-rss:0kB
babbaggeii
fuente

Respuestas:

10

Respuesta general del wiki de la guía del servidor :

MySQL Tuner Instalar mysqltuner

MySQL Tuner es una herramienta útil que se conectará a una instancia de MySQL en ejecución y ofrecerá sugerencias sobre cómo se puede configurar mejor para su carga de trabajo. Cuanto más tiempo se esté ejecutando el servidor, mejor será el consejo que mysqltuner puede proporcionar. En un entorno de producción, considere esperar al menos 24 horas antes de ejecutar la herramienta. Puede instalar mysqltuner desde los repositorios de Ubuntu:

sudo apt-get install mysqltuner

Luego, una vez que se haya instalado, ejecútelo:

 mysqltuner

y espera su informe final. La sección superior proporciona información general sobre el servidor de bases de datos, y la sección inferior proporciona sugerencias de ajuste para modificar en su my.cnf. La mayoría de estos pueden modificarse en vivo en el servidor sin reiniciar, consulte la documentación oficial de MySQL (enlace en la sección de Recursos) para ver las variables relevantes para cambiar en la producción. Lo siguiente es parte de un informe de ejemplo de una base de datos de producción que muestra que puede haber algún beneficio al aumentar la cantidad de caché de consultas:

-------- Recomendaciones ----------------------------------------- ------------
Recomendaciones generales:
    Ejecute OPTIMIZE TABLE para desfragmentar tablas para un mejor rendimiento
    Aumente gradualmente table_cache para evitar los límites del descriptor de archivo
Variables a ajustar:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32M)
    caché_tabla (> 64)
    innodb_buffer_pool_size (> = 22G)

Un último comentario sobre el ajuste de bases de datos: si bien podemos decir en términos generales que ciertas configuraciones son las mejores, el rendimiento puede variar de una aplicación a otra. Por ejemplo, lo que funciona mejor para Wordpress podría no ser lo mejor para Drupal, Joomla o aplicaciones propietarias. El rendimiento depende de los tipos de consultas, el uso de índices, la eficacia del diseño de la base de datos, etc. Puede resultarle útil dedicar un tiempo a buscar consejos para el ajuste de la base de datos en función de las aplicaciones para las que lo esté utilizando. Una vez que supere cierto punto, cualquier ajuste que realice solo dará como resultado mejoras menores, y será mejor que mejore la aplicación o busque ampliar su entorno de base de datos mediante el uso de hardware más potente o agregando servidores esclavos.


  • Vea la sección de métricas de rendimiento del informe de mysqltuner. Mantenga la máxima memoria posible por debajo del 50%.
  • tmp_table_size, max_heap_table_size variable: mantenga estos iguales y altos.
  • join_buffer_size, aumento en pequeñas cantidades; que será multiplicado por max_connections.
  • innodb_buffer_pool_size. Hazlo alto.
Rinzwind
fuente
0

Resolución para docker compose

mysql:
    volumes:
        - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf

Contenido de configuración ./config/mysql/my.cnf

[mysqld]
performance_schema = off
Hubertinio
fuente