Inserir linhas para o arquivo slow_query no arquivo my.cnf e revisar o slow-query.log
log-slow-queries = /var/log/slow-query.log
reinicie o serviço mysqld e execute
tail -f /var/log/slow-query.log
Recentemente, mudei minha loja magento de um ambiente de host compartilhado para um VPS privado. O VPS está executando o CentOS, mysql, nginx e php-fpm.
Meu VPS tem 4 GB de RAM e 4 núcleos de CPU. No momento, meu site é bem pequeno, mas espero que o número de visitantes aumente.
De qualquer forma, aqui está o meu problema. O Mysqld está sempre rodando a 90% da CPU. Mesmo quando não há processos ativos, na inicialização, sempre. Nem menos nem mais. Eu procurei por esse problema, mas não encontrei nada que pudesse ser usado para resolvê-lo.
Se alguém olhar gentilmente através do arquivo my.cnf, seria muito bom ver se os problemas são causados por configuração defeituosa, eu sou muito novo neste trabalho administrativo do servidor.
[mysql]
# CLIENT #
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
query_cache_limit=4M
query_cache_size=16M
query_cache_type=1
sort_buffer_size=1M
read_buffer_size=2M
read_rnd_buffer_size=1536K
join_buffer_size=2M
bulk_insert_buffer_size = 8M
max_allowed_packet = 64M
thread_stack = 192K
# GENERAL #
user = mysql
default_storage_engine = InnoDB
socket = /var/lib/mysql/mysql.sock
pid_file = /var/run/mysqld/mysqld.pid
symbolic-links=0
skip-networking
skip-slave-start
log_warnings=0
# SAFETY #
skip_name_resolve
innodb = FORCE
innodb_strict_mode = 0
# DATA STORAGE #
datadir = /var/lib/mysql
tmpdir = /tmp
# BINARY LOGGING #
#log_bin = /var/lib/mysql/mysql-bin
#expire_logs_days = 6
#sync_binlog = 1
max_connections=20
max_user_connections=10
wait_timeout=400
key_buffer_size=32M # 256M for 4GB, 512M for 8GB
key_buffer=32M
table_open_cache=1024
table_definition_cache=1024
max_heap_table_size=32M
tmp_table_size=32M
innodb_additional_mem_pool_size=8M
innodb_buffer_pool_size=64M
innodb_flush_log_at_trx_commit=2
innodb_support_xa = 0
innodb_flush_method=O_DIRECT
innodb_log_file_size=32M
innodb_log_files_in_group=2
innodb_use_sys_malloc=0
innodb_thread_concurrency=10
# Advanced
low_priority_updates=1
concurrent_insert=2
thread_cache_size=32
Muito apreciada! Muito obrigado!
Mostra apenas o seguinte:
202 | root | localhost | NULL | Query | 0 | NULL | show processlist
O vmstat mostra o seguinte:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 3215392 0 172600 0 0 28 10 0 16 69 7 2 0 23
Mysql Show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+
| 11 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)
Inserir linhas para o arquivo slow_query no arquivo my.cnf e revisar o slow-query.log
log-slow-queries = /var/log/slow-query.log
reinicie o serviço mysqld e execute
tail -f /var/log/slow-query.log
Nada problemático com a sua configuração my.cnf.
Verifique se seu banco de dados & tabelas usam innodb não myISAM. Se você tem myisam - então você pode experimentar o bloqueio de tabela que aumentará o uso da CPU, pois mais consultas serão colocadas na fila até que o bloqueio seja liberado
De acordo com a sua configuração você tem um site muito pequeno (20 conexões paralelas - Max), então o tráfego não é um problema.
Se você executar um site personalizado - provavelmente o problema poderia estar em consultas ineficientes, será necessário configurar o log de consultas sloq e monitorar o tempo de execução para consultas lentas por trás de 2 segundos. Se você tiver consultas que são executadas por mais de 15 segundos, você tem problemas com índices.
Você precisará verificar quantos registros você tem em suas tabelas e então aplicar índices ou desnormalizar seu banco de dados
Outro problema é que você pode ter um VPS em um ambiente virtualizado "superlotado". Isso significa que você pode ter um IO muito ineficaz ou lutar pela memória / CPU de outras VMs. Executar
vmstat 1
e observe colunas
nos forneça os seguintes comandos
Tags mysql