Uso de ram do Mysql

1

Atualmente estou otimizando nosso servidor de produção mysql e notei que o uso de memória RAM nesse servidor só aumenta. Isso nunca diminui. Eu li em vários sites que isso poderia ser causado por muitas conexões abertas. No entanto, nosso servidor tem muito poucas conexões em um determinado momento (máx 15 sleep / query). Depois de algum tempo, as consultas ficam muito lentas, e acho que isso ocorre porque o arquivo de troca do servidor é usado porque a memória RAM está cheia.

Esse comportamento normal é algo que está vazando de memória e como posso identificar melhor o problema?

Só para ficar completo abaixo da configuração do nosso servidor e do arquivo de configuração my.ini.

Configuração do servidor:

  • Windows 2008 SBS Server
  • Servidor da comunidade MySQL 5.1
  • 4 processadores quad core
  • 32 gb de ram
  • Memória de 142 GB (Raid 1)

my.ini

[client]
port=3306
[mysql]
default-character-set=utf8


[mysqld]
port=3306
basedir="E:/MySQL/MySQL Server 5.1/"
datadir="E:/MySQL/Data/"
default-character-set=utf8
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
table_cache=256
tmp_table_size = 2G
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=410M
key_buffer_size=354M
read_buffer_size = 64 
read_rnd_buffer_size=256K
sort_buffer_size = 10M
innodb_additional_mem_pool_size=15M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=7M
innodb_buffer_pool_size = 7G
innodb_log_file_size=343M
innodb_thread_concurrency=18
max_allowed_packet=16M
wait_timeout = 4800
ft_min_word_len = 2
ft_stopword_file = ""
max_heap_table_size = 2G
tmpdir = "E:/mysql/MySqlTmp/"
log-slow-queries = "F:/log/slow.log"
long_query_time = 2
init-file=E:\mysql\MySQL Server 5.1\my_OnStartup.txt
    
por Nebu 24.01.2014 / 12:11

2 respostas

1

À medida que os caches são construídos, o uso de memória aumenta. Simplificando, é como lembrar partes e partes de quais consultas foram feitas e quais foram seus resultados, para que consultas semelhantes ou iguais possam ser buscadas mais rapidamente. É por isso que você tem configurações como tmp_table_size, etc.

Este é um comportamento normal, no entanto, não é possível dizer que você não tem vazamento de memória ou algum tipo de problema, já que a resposta acima é geral.

Se você acredita que você tem um problema, você pode tentar atualizar se você já não tem (de 5.1 ramo, 5.1.73 é agora mais novo estável. Ou você pode ir muito mais longe para 5.5 / 5.6 ramos).

Você também pode ajustar sua configuração para que ela seja mais capaz de lidar com situações propensas a erros. Estes incluem, mas não se limitam a:

  • Reduzindo o seu wait_timeout. Francamente, por muito ... Você realmente tem um caso em que precisa esperar por 80 minutos?!
  • myisam_max_sort_file_size=100G - Você realmente precisa desse tamanho? Você nem tem memória para lidar com isso.
  • Configurando sua configuração para que seu uso de memória não possa ser maior que sua memória disponível (que você declarou ser de 32 GB). Isso evita o uso de troca, o que resultará em desempenho lento.
por 24.01.2014 / 13:51
0

A redução no uso físico de RAM é rara em um sistema operacional moderno. RAM livre é totalmente desperdiçada. Se há algo que o sistema operacional possa colocar na memória RAM que possa ter alguma chance de ser útil, é melhor do que torná-lo livre. Por isso, é perfeitamente normal ver o uso de RAM física aumentar e raramente diminuir.

Pense nos dados lidos do disco. Quando esses dados não são mais necessários, o sistema tem duas opções. Pode libertar a memória ou não libertá-la. Vamos considerar em primeiro lugar se ele ficar livre:

  1. Isso exige esforço, a memória deve ser colocada na lista livre.

  2. Se os dados forem necessários mais tarde, eles devem ser lidos novamente no disco.

  3. Se a memória RAM precisar ser usada para outra finalidade, ela não precisa mais ser liberada.

Agora, vamos considerar se ele é usado:

  1. Isso não requer esforço. A RAM já é usada e só fica assim.

  2. Se os dados forem necessários mais tarde, eles não precisam ser lidos do disco.

  3. Se a RAM precisar ser usada para algum outro propósito posterior, ela não precisará ser removida da lista livre.

Ganha tudo ao redor.

Se você está pensando: "Eu quero que a RAM esteja livre agora para que eu possa usá-la mais tarde", isso é bobagem. Você pode usá-lo agora e usá-lo mais tarde. Não há compromisso doloroso para fazer.

    
por 24.01.2014 / 14:01

Tags