Eu tenho um servidor dedicado do qual administro meu site. Tem 32GB de RAM, Xeon E5-1650 3.2Ghz (6 núcleos, 12 com HT) e duas unidades de 3TB em RAID 1.
Estou executando o Percona 5.7.18
99% das minhas tabelas são InnoDB
Meu arquivo ibdata1 tem 500 MB.
São principalmente consultas SELECT, mas algumas junções/consultas bastante complexas. Com uma proporção de INSERT/UPDATE também.
O servidor gasta parte do seu tempo redimensionando JPEGs que os usuários enviaram, então preciso estar atento a isso ao alocar memória etc.
Há mais alguma coisa que eu possa lhe dizer que ajudaria?
Eu planejo implementar algum cache decente em nível de webapp em algum momento, mas gostaria de melhorar a configuração do mysql nesse meio tempo.
O site funciona muito bem em dias normais de tráfego, mas pode sofrer um pouco em dias movimentados (como hoje ...)
Eu sou um desenvolvedor único, então full-stack e espalhado, e admitirei alegremente que minhas habilidades de DBA são bastante pobres. Eu posso escrever uma consulta decente, mas não sei nada sobre a configuração do servidor. O que está no meu my.cnf foi remendado de várias fontes diferentes ao longo dos anos, e acho que está longe de ser o ideal!
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
user = mysql
default-storage-engine = InnoDB
socket = /var/lib/mysql/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
datadir = /var/lib/mysql
skip-name-resolve
max-allowed-packet = 16M
max-connect-errors = 1000000
# is this a silly thing to do..?
tmpdir = /dev/shm
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0
character-set-client-handshake = FALSE
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
ft_min_word_len = 2
group_concat_max_len = 4096
max_connections = 500
tmp-table-size = 32M
max-heap-table-size = 32M
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 2048
join_buffer_size = 2M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
slow-query-log = 1
long-query-time = 1
slow-query-log-file = /var/lib/mysql/slow_log
log-error = /var/lib/mysql/mysite.err
max_allowed_packet = 256M
query_cache_size = 268435456
query_cache_limit = 1048576
query_cache_type = 1
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 12
innodb_read_io_threads = 12
innodb_write_io_threads = 12
thread_pool_size = 24
sql_mode = ""
[mysqld_safe]
log-error=/var/lib/mysql/mysite.err
pid-file=/var/run/mysqld/mysqld.pid
Qualquer ajuda / orientação seria muito apreciada, adoro aprender e, mais importante, preciso aprender!
Obrigada!
32 GB de RAM, 12 G buffer_pool --> sobra muito espaço para redimensionar imagens.
12G buffer_pool, 0.5GB ibdata1 e 5.7 -->
innodb_file_per_table
é provavelmenteON
. É isso? Se sim, você não nos deu uma pista de quantos dados você tem. Veja os.ibd
arquivos.query_cache_size = 256M
provavelmente é ruim. Qualquer gravação em uma tabela causa a limpeza de todas as entradas de CQ dessa tabela. A purga é proporcional ao tamanho do QC. Mantenha-o abaixo de 50M. (Ou desligue-o.)Uma regra prática: "Não coloque um cache na frente de um cache." O MySQL faz muito cache internamente; adicionar um cache no nível do aplicativo da web pode não ajudar e pode roubar a RAM do buffer_pool, onde é importante.
Você sabe se está vinculado a E/S? vinculado à CPU?
Vejo que você está com o slowlog ativado. Use pt-query-digest para resumir. Então, vamos discutir o pior par de consultas. A correção de consultas lentas provavelmente aumentará seu desempenho do que qualquer ajuste.
Mas, se você quiser mais conselhos de ajuste, vamos ver o
GLOBAL STATUS
. Em particular, siga as instruções aqui .