MySQL alta utilização de memória e usando swap

3

Eu tenho um banco de dados de 1,6 GB que adiciona cerca de 200 MB de tamanho todo mês. Eu tenho uma memória RAM de 12GB (compartilhada com apache, mysql e os), o mysql sempre usa swap que eu preciso para reiniciar o serviço, uma vez que atingiu o limite do espaço de troca. O uso típico de memória do processo mysql é de 3.5GB e aumenta para 4.5GB quando há muita atividade em meu servidor web.

  1. Como posso evitar o mysql usando swap?
  2. O uso de memória de processo mysql de 3,5 GB para um tamanho de banco de dados de 1,6 GB é normal?
  3. Minha configuração do mysql é assim, minha configuração é otimizada?
[mysqld]
innodb_file_per_table
datadir=/var/lib/mysql
tmpdir=/var/lib/mysqltmp
socket=/var/lib/mysql/mysql.sock
skip-locking
skip-name-resolve
table_cache=3072
thread_cache_size=16
back_log=100
max_connect_errors=10000
open-files-limit=20000
interactive_timeout=30
wait_timeout=40
max_connections=100
skip-name-resolve
max_allowed_packet=16M
tmp_table_size=1768M
max_heap_table_size=1768M
query_cache_size=64M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=8M
join_buffer_size=32M
key_buffer_size=64M
myisam_sort_buffer_size=64M
innodb_log_file_size=100M
innodb_buffer_pool_size=1512M
    
por shinmac 25.02.2014 / 16:50

1 resposta

1

Provavelmente, os culpados são essas configurações:

tmp_table_size=1768M
max_heap_table_size=1768M

Isso significa que cada tabela temporária individual criada por uma consulta em seu site pode levar até 1768 megabytes de memória ou 1,7 GB.

Eu diminuiria isso para 64M. Isso diminuirá o uso da memória, mas também poderá fazer com que o MySQL grave dados temporários da tabela para consultas no disco, o que desaceleraria as coisas.

Se o MySQL usa muito o disco para tabelas temporárias, você precisa analisar seu aplicativo e descobrir onde estão as consultas que geram grandes tabelas temporárias, e depois refatorar o código para que grandes tabelas temporárias não sejam necessárias.

    
por 25.02.2014 / 21:57