MariaDB / MySQL usando muitos threads / memória

1

Estou criando um novo VPS e queria experimentar o MariaDB. Estou usando o MariaDB 10.0.1, que pelo que entendi é o equivalente do MySQL 5.6.

A manipulação de threads de threads mudou drasticamente desde o MariaDB / MySQL 5.5? Isto é o que eu vejo no meu antigo servidor (CentOS 5.9, MySQL 5.5):

EnoCentos6.3comMariaDB10(MySQL5.6):

Aqui está uma lista de fatos:

No servidor A (CentOS 5.9, MySQL 5.5):

  • Existem cerca de 15 bancos de dados conectados a vários sites e serviços
  • O Plesk está instalado
  • o MySQL é minimamente ajustado:

/etc/my.cnf

[mysqld]
local-infile=0
query_cache_type = 1
query_cache_size = 32M

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

# Misc vars
key_buffer_size=32M
join_buffer_size=512K
tmp_table_size=32M
max_heap_table_size=32M
thread_cache_size=4
table_cache=300

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# InnoDB vars
innodb_buffer_pool_size=96M
innodb_additional_mem_pool_size=500K
innodb_log_buffer_size=500K
innodb_thread_concurrency=2

No servidor B (CentOS 6.3, MariaDB 10):

  • Existem 3 bancos de dados, dos quais apenas um está atualmente "em uso" e está conectado a um site de baixo tráfego.
  • Não há plesk.
  • MariaDB minimamente ajustado:

/etc/my.cnf.d/server.cnf

[mysqld]
# threads
thread_concurrency=2
thread_cache_size=1
thread_handling=one-thread-per-connection
thread_pool_size=4
thread_pool_max_threads=4
thread_pool_idle_timeout=60
thread_stack=240K

# Limit Connections?
# max_connections=5

skip-external-locking
key_buffer_size=64M
max_allowed_packet=1M
table_open_cache=128
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=4M
net_buffer_length=8K
myisam_sort_buffer_size=32M
query_cache_size=16M

# innodb settings
innodb_buffer_pool_size=32M
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=30
innodb_thread_concurrency=0

Por que existem tantos tópicos? Eu tentei muitas configurações para tentar baixar o número de threads de processo para um nível razoável, mas não consigo afetá-lo. Está sempre usando 20 ou 21 threads. Consegui reduzir o uso de memória ajustando innodb_buffer_pool_size , mas 32M não é um valor razoável com mais de 10 sites em execução, então estarei aumentando novamente para 96M ou 128M. Nesses valores o ram usado pelo mysql excede 750-850M de memória.

Se isso é apenas algo que eu tenho que conviver, tudo bem (eu tenho mais memória RAM no novo VPS, YOLO), mas estou curioso para saber porque há uma enorme discrepância no uso da memória.

Também vale a pena mencionar que se eu desligar o mysql em ambos os VPS, eu tenho quase uma quantidade igual de ram usada - ~ 300M para A, ~ 260M para B.

    
por Brendan 11.02.2013 / 16:51

1 resposta

5

O MySQL deve usar tanto quanto a memória livre que você tem. O número de encadeamentos nessa escala é muito pequeno e não afeta o uso da memória. Os segmentos estão compartilhando o mesmo espaço de memória virtual. Eles usam apenas alguns KB para metadados de threads.

O uso de memória no novo MySQL é menor do que antes. Ele alocou no espaço de memória virtual 1.1GB, mas tem apenas 60MB de memória física.

Ao procurar por uma otimização do MySQL, tente mover o gargalo do E / S do disco para o acesso à memória. Otimize também as consultas (reescreva-as, índices) - ative o log de consultas lentas do MySQL.

Às vezes, você atinge o limite de hardware e a única otimização é atualizar o hardware. Para o MySQL, a primeira coisa é adicionar mais RAM, discos mais rápidos e mais CPUs.

    
por 11.02.2013 / 17:40