Excesivo uso de RAM con MySQL

Buenas a todos,

LLevo un tiempo que la RAM del servidor donde tengo instalado mysql está siempre al 100% y viendo los procesos que se están corriendo, MySQL es el que más consumo me da de CPU y memoria y por lo que puedo apreciar el causante de un gran uso de la RAM.

Observando el performance en queries, inserts, updates, etc solo consegui ver algunas queries que se ejecutaban cada hora y que tardaban mas de un minuto en terminarse las cuales ya solucione. Aún asi el problema continua y no consigo descubrir el porqué.

Os paso como tengo configurado el my.cnf y las cualidades del servidor para ver si alguno puede ayudarme en la mejora de performance y asi conseguir reducir el consumo de RAM, y si necesitais mas información me decis y estaré encantado de ofrecerla:

 

my.cnf:

federated

### General

user = ()

port = 3306

datadir                                              = /var/lib/mysql

tmpdir                                               = /tmp

socket                                              = /var/lib/mysql/mysql.sock

skip-external-locking                          = 1

log_error                                           = /var/log/mysqld.log

event_scheduler                                = on

open-files-limit                                   = 20000

 

### Cache

thread-cache-size                              = 16

table-open-cache                               = 2048

table-definition-cache                         = 512

query-cache-size                               = 32M

query-cache-limit                               = 1M

 

### Per-thread Buffers

sort-buffer-size                                 = 1M

read-buffer-size                                = 1M

read-rnd-buffer-size                          = 8M

join-buffer-size                                 = 1M

 

### Temp Tables

tmp-table-size                                = 64M 

max-heap-table-size                       = 64M

 

### Networking

back-log                                        = 100

max-connections                            = 500

max-connect-errors                        = 10000

max-allowed-packet                        = 16M

interactive-timeout                          = 600

wait-timeout                                   = 180

net_read_timeout              = 30

net_write_timeout              = 30

 

# This value is the size of the listen queue for incoming TCP/IP connections.

back_log       = 128

 

#### Storage Engines

default-storage-engine             = InnoDB

innodb                                          = FORCE

 

### MyISAM

key-buffer-size                              = 64M

myisam-sort-buffer-size                  = 128M

 

### InnoDB

innodb-buffer-pool-size                   = 2G

innodb-log-buffer-size                     = 4M

innodb-log-file-size                       = 256M

innodb-log-files-in-group           = 2

 

### Replication

server-id                                       = ()

log-bin     = /var/lib/mysqllogs/db1-binary-log

expire_logs_days     = 14

server-id=21009674

binlog-format         = mixed

 

### Logging

slow-query-log                            = 1

slow-query-log-file                        = /var/lib/mysqllogs/slow-log

 

[mysqld-safe]

log-error                                       = /var/log/mysqld.log

 

[mysqldump]

max-allowed-packet    = 16M

 

 

Server:

 

System: CentOS 6 - MGC LAMP

CPU: 4vCPUs

RAM: 8BG

System Disk: 320GB

Network: 600 Mb / s

 

Saludos 

 

Mario

Hola Mario

Yo en los parámetros no veo nada raro, pero siempre lo mejor es buscar primero por dónde viene el problema y después ajustar los parámetros que puedan mejorar el rendimiento en tu caso. Si no hay queries demasiado costosas y el consumo de memoria es muy alto, el problema te podría venir por el número de sesiones abiertas a la vez, se puede consumir mucha memoria si se lanzan demasiadas consultas concurrentes, aunque éstas no sean demasiado pesadas.

De todas maneras, te recomiendo que investigues un poco más antes de tocar nada. Si no lo has visto aún, hace tiempo escribí un artículo que trataba justo de analizar el rendimiento de MySQL para poder tunear los parámetros de la base de datos.

Seguro que el script mysqltunner.pl que explico en el post cómo utilizar te puede ayudar a identificar dónde puedes mejorar el rendimiento, y reducir así el consumo de memoria.

Saludos,

Actualmente tengo una página web donde me consume cerca del 47% del consumo total de la CPU.

 

He analizado el caso, y no encuentro cual sea el problema.

 

He optimizado las tablas de todas las bases de datos.