Como depurar tempos limite de bloqueio com o MySQL / Amazon RDS?

4

Temos um aplicativo da Web hospedado nos serviços da Amazon Web. Nosso banco de dados é um servidor RDS MySQL de vários servidores rodando em 5.1.57 e 3-4 servidores de aplicativos conversam com ele.

Hoje, começamos a ver muitos erros ao longo das linhas de "Tempo limite de espera do bloqueio excedido; tente reiniciar a transação" - quase 1% das solicitações POST estão vendo isso.

Não houve modificações no código em execução no site. Não houve alterações no esquema. Nós não tivemos um grande aumento no tráfego. Eu estive olhando para os processos em execução e nenhum parece fora de controle.

Eu tentei escalar nossa instância do RDS de pequena para grande, sem efeito.

Dois dias atrás, a Amazon teve algumas interrupções. Como parte da recuperação disso, nosso servidor RDS e nossos servidores de aplicativos acabaram em diferentes zonas de disponibilidade, mas todos dentro da mesma região. Mas ontem estava tudo bem, então não estou convencido de que isso esteja relacionado.

Os tempos limite de bloqueio estão em diferentes tipos de solicitações e ocorrem em diferentes tabelas InnoDB.

Eu notei que o número de conexões abertas saltou quando começamos a ver problemas, mas elas podem ser um sintoma e não uma causa.

Quais são meus próximos passos para depurar isso?

    
por Marc Hughes 26.10.2012 / 00:20

1 resposta

3

O que provavelmente aconteceu foi uma perda de IO em um ou mais dos volumes do EBS que suportam a instância do RDS. A quantidade de IO reduzido devido a um remorro do EBS é bastante significativo em seus efeitos nos bancos de dados.

Se você pagar pelo Suporte Premium, a equipe poderá analisar os detalhes desse tipo para você ou poderá perguntar nos fóruns da AWS. Os engenheiros do RDS provavelmente poderiam confirmar os problemas subjacentes do EBS ou qual era a causa.

    
por 26.11.2012 / 12:57