Cache frio (logo após reiniciar) Cold buffer pool after restart
ID da causa db-cold-cache · Responsável principal Infraestrutura de banco de dados (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
Quando o BD reinicia, o cache em memória está vazio, e por um tempo todas as leituras vêm do disco.
Por quê O BD reinicia na manutenção → Efeito Os dados usados com frequência não estão na memória e são lidos do disco → Na tela Login e carregamento lentos por um tempo logo após a manutenção
Responsável principal Infraestrutura de banco de dados (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Abertura gradual (aumentar aos poucos o número de logins com a fila de login).
O que fazer (Equipe de infraestrutura)
Aquecer o cache depois do reinício (warm-up; verificar a configuração de salvar e restaurar o buffer pool), ler antecipadamente o disco de BDs restaurados a partir de snapshot.
No gráfico
Pico logo após abrir ou manutenção · Leituras de disco, taxa de acerto do buffer cache
Onde olhar
No MySQL, ver a proporção entre Innodb_buffer_pool_reads (leituras que foram ao disco porque a página não estava no buffer pool) e Innodb_buffer_pool_read_requests, e o progresso do aquecimento em Innodb_buffer_pool_load_status. No PostgreSQL, ver blks_read e blks_hit no pg_stat_database. Ver também o número de leituras de disco do servidor do BD
Confirma se
Logo após o reinício, as leituras de disco disparam e a taxa de acerto fica baixa, depois se recupera com o tempo, e nesse período login e carregamento ficam lentos
Descarta se
Taxa de acerto normal, mas lento logo após a manutenção: avalanche de logins e N+1 (db-login-storm) ou pool de conexões (db-pool)
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Saiba mais
O MySQL salva a lista de páginas do buffer pool ao desligar e as lê de volta em segundo plano ao ligar, mas leva tempo até encher tudo. Se o BD foi restaurado a partir de um snapshot (cópia do disco) na nuvem, o próprio disco é lento a cada bloco lido pela primeira vez, e o problema dura mais.
Saving and Restoring the Buffer Pool StateMySQL Para encurtar o aquecimento após o reinício, salva ao desligar a lista das páginas usadas recentemente (padrão de 25%) e a lê de volta ao ligar; as duas opções vêm ativadas por padrão
Initialize Amazon EBS volumesAWS Volumes criados a partir de snapshot têm latência maior e desempenho menor até todos os blocos serem buscados
Server Status VariablesMySQL Innodb_buffer_pool_reads (leituras lógicas que tiveram de ir direto ao disco porque a página não estava no buffer pool), Innodb_buffer_pool_read_requests, Innodb_buffer_pool_load_status (progresso do aquecimento)