
Estou tentando ajustar um banco de dados mysql usando mysqltuner. O Mysqltuner está aconselhando que eu aumente o join_buffer_size e o query_cache_size. Ao mesmo tempo, porém, avisa que meu uso máximo de memória é alto, ou seja, 200% + da RAM instalada (que é 2 GB). O problema em que estou é, claro, que se eu fizer o que o mysqltuner diz, o uso de memória aumentará ainda mais. Então o que eu faço aqui? O problema não é com o mysql, mas com os aplicativos em execução neste servidor que evidentemente exigem que o mysql faça uma grande quantidade de cache? Como vocês, especialistas em administradores de MySQL, procederiam a partir daqui? Veja o relatório do mysqltuner abaixo junto com minhas configurações atuais do [mysqld]:
Relatório MySqlTuner:
MySQLTuner 1.2.0 - Principais relatórios de bugs do Hayden, solicitações de recursos e downloads emhttp://mysqltuner.com/ Execute com '--help' para opções adicionais e filtragem de saída
-------- Estatísticas Gerais ---------------------------------------- ----------
[--] Verificação de versão ignorada do script MySQLTuner
[OK] Atualmente executando o MySQL versão 5.5.30-log compatível
[OK] Operando em arquitetura de 64 bits-------- Estatísticas do mecanismo de armazenamento ---------------------------- ----
[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Dados em tabelas MyISAM: 310M (Tabelas: 264)
[--] Dados em tabelas InnoDB: 8M (Tabelas: 365)
[--] Dados nas tabelas PERFORMANCE_SCHEMA: 0B (Tabelas: 17) [!!] Total de tabelas fragmentadas: 376-------- Recomendações de segurança -------------------------------------------- ---
[OK] Todos os usuários do banco de dados têm senhas atribuídas-------- Métricas de desempenho -------------------------------------------- ---------
[--] Até: 20h 20m 10s (2M q [35.305 qps], conexão 25K, TX: 88B, RX: 2B)
[--] Leituras/Escritas: 22% / 78 %
[--] Total de buffers: 480,0M globais + 33,5M por thread (110 threads no máximo)
[!!] Uso máximo de memória possível: 4,1G (203% da RAM instalada)
[OK] Consultas lentas: 0% (0/ 2M)
[OK] Maior uso de conexões disponíveis: 7% (8/110)
[OK] Tamanho do buffer de chave/índices MyISAM totais: 150,0M/129,5M
[OK] Taxa de acerto do buffer de chave: 100,0% (15M em cache/7K leituras )
[OK] Eficiência do cache de consulta: 74,3% (762K em cache / 1 milhão de seleções)
[!!] Remoções de cache de consulta por dia: 4341
[OK] Classificações que exigem tabelas temporárias: 0% (3 classificações temporárias / 11K classificações)
[!!] Junções realizadas sem índices: 3901
[OK] Tabelas temporárias criadas no disco: 0% (2K no disco/547K no total)
[OK] Taxa de acerto do cache de thread: 99% (8 conexões criadas/25K)
[OK] Taxa de acerto do cache da tabela: 46% (688 abertos/1K abertos)
[OK] Limite de arquivo aberto usado: 17% (593/3K)
[OK] Bloqueios de tabela adquiridos imediatamente: 99% (1M imediatos/1M de bloqueios)
[OK] Tamanho de dados/buffer pool do InnoDB : 8,9M/256,0M-------- Recomendações ---------------------------------------- ------------
Recomendações gerais:
Execute OPTIMIZE TABLE para desfragmentar tabelas para melhor desempenho
MySQL iniciado nas últimas 24 horas - as recomendações podem ser imprecisas
Reduza o consumo geral de memória do MySQL para estabilidade do sistema
Ajuste suas consultas de junção para sempre utilizar
variáveis de índices para ajustar:
* O uso máximo de memória do MySQL é perigosamente alto
Adicione RAM antes de aumentar as variáveis de buffer do MySQL *
query_cache_size (> 32M)
join_buffer_size (> 32,0M, ou sempre use índices com junções)
Configurações atuais do mysqld em my.cnf:
[mysqld]
local-infile=0
datadir=/var/lib/mysql
user=mysql
simbólico-links=0
porta = 3306
soquete = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 150M
max_allowed_packet = 160M
max_connections = 110
wait_timeout = 60
query-cache-type = 1
query-cache-size = 32M
query_cache_limit = 2M
thread_cache_size = 16
tmp_table_size = 32M
max_heap_table_size = 32M
join_buffer_size = 32M
table_open_cache = 128
table_cache = 1600
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 2M
innodb_log_buffer_size = 8M
Responder1
Você tem um banco de dados bastante estranho aqui - ele faz muito mais gravações do que leituras.
É muito importante que você ajuste seu SGBD para funcionar bem com o Innodbouvocê o ajusta para funcionar bem com o MyISAM - mas parece ter uma mistura dos dois tipos de tabela. Você não pode ter um SGBD ideal para ambos. Você precisa começar a migrar seus dados para um único mecanismo. Dada a natureza pesada de gravação do banco de dados, eu recomendaria o Innodb.
Buffers totais: 480,0 milhões globais + 33,5 milhões por thread (máximo de 110 threads)
Atualmente, o risco de ocorrer swap é impulsionado principalmente pelo uso de memória por conexão. mas observe que este é apenas umriscoagora mesmo. Você também precisa estabelecer se precisa de 110 conexões simultâneas - e de preferência reduzir um pouco isso. Normalmente, o sort_buffer_size é o principal culpado pelo uso de memória por conexão - mas o seu é um quarto do padrão.
Se você estiver consolidando no innodb, provavelmente precisará aumentar o tamanho do buffer pool do innodb.
Você pode brincar com valores diferentesaqui.