Assumindo um sistema OLTP de produção com tabelas predominantemente InnoDB
- Quais são os sintomas comuns de um sistema desajustado/configurado?
- Quais parâmetros de configuração você mais altera de seus padrões?
- Como você identifica possíveis gargalos antes que haja um problema?
- Como você reconhece e soluciona problemas ativos?
Quaisquer anedotas detalhando status
variáveis e diagnósticos específicos seriam apreciadas.
Curiosamente, no MySQL 5.5, agora você pode ter vários pools de buffer innodb.
Os parâmetros com os quais você se importa são
Em cerca de um mês, estou programado para implementar 112 pools de buffer innodb para um cliente. Eu vou deixar você saber como foi.
ATUALIZAÇÃO 2011-02-27 21:57 EDT
Descobri que o valor máximo para innodb_buffer_pool_instances é 64 Decidi configurar 144 GB , então configurei innodb_buffer_pool_instances para 18 e innodb_buffer_pool_size para 8. Atualmente estou carregando o servidor com 450 GB
ATUALIZAÇÃO 2011-04-28 13:44 EDT
Eu experimentei vários pools de buffer InnoDB. Havia muito travamento e contenção de encadeamento. Mudei para um único Buffer Pool de 162 GB + configuração read_io_threads e write_io_threads para 64 (valor máximo). Isso funcionou muito melhor.
ATUALIZAÇÃO 2012-07-03 17:27 EDT
Eu aprendi algo incrível sobre o MySQL. Se você alocar um único InnoDB Buffer Pool monolítico maior que o Total Installed Divided By Number of Physical CPU , você incitará o sistema operacional a intervalos regulares de troca de memória devido a um InnoDB Buffer Pool completo. A opção do MySQL 5.5 conhecida como innodb_buffer_pool_instances pode ser usada para dividir o buffer pool. Ontem, implementei isso corretamente para o cliente que mencionei na minha resposta no ano passado. Ainda tenho 162 GB para o Buffer Pool do cliente. Eu configurei a opção innodb_buffer_pool_instances do servidor para 2 porque cada DB Server é dual hexacore. Eu estava pensando em configurá-lo para 12, mas um colega me mostrou um blog de Jeremy Cole sobre MySQL e Swappiness. Depois de lê-lo, coloquei-o em prática imediatamente para o meu cliente. eu rodei esse comando
Eu vi um mapeamento de 192 GB de RAM do servidor como 96 GB para cada núcleo físico. Portanto, configurei o innodb_buffer_pool_instances para 2. As coisas parecem boas agora. Atualizarei minha resposta para ver como isso afeta a troca de memória pelos próximos 2 meses.
Aqui está um bom artigo sobre o ajuste do InnoDB de Jenny Chen da Sun - ela escreve muito sobre MySQL, alguns deles são específicos do Solaris (por exemplo, usando DTrace ), mas o blog inteiro está cheio de petiscos interessantes.
Você pode explorar os seguintes recursos:
Em primeiro lugar, aumente o tamanho padrão do InnoDB Buffer Pool em my.cnf (acredito que o padrão seja 8 MB)
Você provavelmente deve definir isso para 75% do tamanho da sua RAM (em geral)
configuração de memória