Obviamente, há muita coisa que você pode tentar. Sua melhor aposta é perseguir seus logs para consultas que não usam índices (habilitar logs para esses) e outras consultas não otimizadas. Eu compilei uma lista enorme de opções relacionadas ao desempenho ao longo dos anos, então eu incluí um pequeno subconjunto aqui para sua informação - espero que ajude. Aqui estão algumas notas gerais para coisas que você pode experimentar (se você ainda não o fez):
MySQL
- query_cache_type = 1 - o cache de consultas SQL está ativado. Se definido como 2, as consultas serão armazenadas somente em cache se a dica SQL_CACHE for passada para elas. Da mesma forma com o tipo 1, você pode desativar o cache para uma consulta específica com a dica SQL_NO_CACHE
- key_buffer_size = 128M (padrão: 8M) - buffer de memória para índices de tabela MyISAM. Em servidores dedicados, tente definir o key_buffer_size para pelo menos um quarto, mas não mais que a metade, da quantidade total de memória no servidor
- query_cache_size = 64M (padrão: 0) - tamanho do cache de consulta
- back_log = 100 (padrão: 50, max: 65535) - A fila de solicitações de conexão pendentes. Só importa quando há muitas conexões em pouco tempo
- join_buffer_size = 1M (padrão: 131072) - um buffer usado quando há varreduras de tabela completas (sem índices)
- table_cache = 2048 (padrão: 256) - deve ser max_user_connections multiplicado pelo número máximo de JOINs que sua consulta SQL mais pesada contém. Use a variável "open_tables" nos horários de pico como um guia. Veja também a variável "open_tables" - ela deve estar perto de "open_tables"
- query_prealloc_size = 32K (padrão: 8K) - memória persistente para análise e execução de instruções. Aumente se tiver consultas complexas
- sort_buffer_size = 16M (padrão: 2M) - ajuda na classificação (operações ORDER BY e GROUP BY)
- read_buffer_size = 2M (padrão: 128K) - Ajuda com varreduras sequenciais. Aumente se houver muitas varreduras sequenciais.
- read_rnd_buffer_size = 4M - ajuda a mesa MyISAM a acelerar a leitura após a ordenação
- max_length_for_sort_data - tamanho da linha a ser armazenada em vez do ponteiro da linha no arquivo de classificação. Pode evitar leituras aleatórias de tabelas
- key_cache_age_threshold = 3000 (padrão: 300) - hora de manter o cache de chaves na zona quente (antes de ser rebaixado para quente)
- key_cache_division_limit = 50 (padrão: 100) - ativa um mecanismo de remoção de cache mais sofisticado (dois níveis). Indica a porcentagem a ser mantida no nível inferior. delay_key_write = ALL - o buffer de chaves não é liberado para a tabela em todas as atualizações de índice, mas somente quando a tabela é fechada. Isso acelera muito as gravações nas teclas, mas se você usar esse recurso, você deve adicionar verificação automática de todas as tabelas MyISAM iniciando o servidor com a opção --myisam-recover = BACKUP, FORCE
- memlock = 1 - bloqueia o processo na memória (para reduzir a troca / saída)
Apache
- altera o método de desova (para mpm por exemplo)
- desativar registros, se possível
- AllowOverride Nenhum - sempre que possível desative o .htaccess. Ele pára o apache para procurar por arquivos .htaccess se eles não forem usados, então salva uma solicitação de pesquisa de arquivo
- SendBufferSize - Defina como padrão do sistema operacional. Em redes congestionadas, você deve definir esse parâmetro próximo ao tamanho do maior arquivo normalmente baixado
- Manter ativo desativado (padrão ativado) - e instalar permanentemente para fechar adequadamente as conexões de rede e é mais rápido
- DirectoryIndex index.php - Mantenha a lista de arquivos o mais curta e absoluta possível.
- Opções FollowSymLinks - para simplificar o processo de acesso a arquivos no Apache
- Evite usar mod_rewrite ou pelo menos regexs complexos
- ServerToken = prod
PHP
- variables_order="GPCS" (Se você não precisa de variáveis de ambiente)
- register_globals = Off - além de ser um risco de segurança, também tem um impacto no desempenho
- Mantenha o include_path o mais minimalista possível (evita consultas extras ao sistema de arquivos)
- display_errors = Off - Desativa a exibição de erros. strongmente recomendado para todos os servidores de produção (não exibe mensagens de erro feias em caso de problemas).
- magic_quotes_gpc = Desligado
- magic_quotes _ * = desativado
- output_buffering = Ativado
- Desativar o registro, se possível
- expose_php = desativado
- register_argc_argv = desativado
- always_populate_raw_post_data = desativado
- coloque o arquivo php.ini onde o php o procuraria primeiro.
- session.gc_divisor = 1000 ou 10000
- session.save_path="N; / path" - Para sites grandes, considere usá-lo. Divide arquivos de sessão em subdiretórios
OS Tweaks
- Monte discos rígidos usados com a opção -o noatime (sem tempo de acesso). Adicione também esta opção ao arquivo / etc / fstab.
- Ajuste o / proc / sys / vm / swappiness (de 0 a 100) para ver o que tem melhores resultados
- Use Discos RAM - mount --bind -ttmpfs / tmp / tmp