Eu quero começar a agrupar meus servidores de aplicativos PHP, mas não quero ir para uma configuração de balanceamento de carga de sticky-sessions neste momento. No entanto, quero sessões que persistam no disco e implementem o bloqueio adequado. Eu já tenho um servidor dedicado ao banco de dados com uma quantidade confortável de RAM livre, então gostaria de considerar o uso de uma instância adicional do MySQL apenas para armazenamento de sessão na mesma máquina. Atualmente, minha pasta de sessões no sistema de arquivos é de ~ 131 MB e possui ~ 23k de arquivos. Estou planejando usar InnoDb com SELECT ... FOR UPDATE para implementar o bloqueio de sessão.
A execução de duas instâncias do MySQL otimizadas para finalidades diferentes no mesmo servidor é uma má ideia? (Se sim, por quê?)
Para a instância somente de sessões, quais são algumas dicas de otimização? Quero que seja persistente, mas não me importo de perder um pouco de dados em caso de desastre, enquanto com o banco de dados principal do aplicativo, não quero arriscar nenhuma perda de dados.
Se eu puder poupar, digamos, 256 MB de RAM para esta instância do MySQL (a instância principal tem ~ 6 GB), como devo alocá-la?
Desativar o cache de consulta ou não?
Quais configurações posso usar para reduzir as gravações de disco (já que não me preocupo muito com a durabilidade desta instância)? Por exemplo, innodb_locks_unsafe_for_binlog, innodb_flush_method, etc.
Você poderia experimentar
innodb_flush_log_at_trx_commit
De acordo com a documentação do MySQL em innodb_flush_log_at_trx_commit
Com base nisso, valores diferentes de 1 colocam o InnoDB em risco de perder 1 segundo de transações ou dados de confirmação de uma transação.
Tanto quanto innodb_flush_method , o padrão é o melhor. Escrevi um post anterior para descrever os efeitos de ajustá-lo .
Quanto à execução de várias instâncias do MySQL , tudo bem, desde que você tenha memória suficiente para o sistema operacional e memória suficiente de conexões de banco de dados para as várias instâncias.