Migrei de um Oracle XE local para o Amazon RDS. Ele está sendo executado em um servidor T3.medium com armazenamento gp3 (200 GB/12000 IOPS).
Quase a cada cinco minutos o alert.log diz assim:
"Thread 1 cannot allocate new log, sequence 10209
Checkpoint not complete"
3-4 segundos depois, ele registra outra mensagem:
"Thread 1 advanced to log sequence 10209 (LGWR switch), current SCN: 472780758"
E imediatamente depois disso:
"ARC1 (PID:6427): Archived Log entry 10205 added for B-1189761742.T-1.S-10208 ID 0x7efecf3c1c4d LAD:1 [krse.c:4934]"
Assim:
Lendo sobre a primeira mensagem ("não é possível alocar novo log") parece uma mensagem "ruim". O conselho típico é aumentar o tamanho do arquivo de log de redo. Então adicionei 4 arquivos de log, cada um com 512 Mb. O conselho era remover os arquivos de log antigos (128 Mb cada), mas eles estão quase sempre "ATIVOS", então consegui remover apenas 1. Este é o status atual:
... e ainda recebo a mensagem de erro em alert.log.
O parâmetro archive_lag_target está definido como 300 (5 minutos), então acho que é por isso que ele alterna o arquivo de log a cada cinco minutos. (Não acho que posso alterar essa configuração no RDS.)
Observar as operações de disco na AWS não significa que o disco esteja sob carga muito pesada:
Devo me preocupar com a mensagem "Thread 1 cannot allocate new log..."?
Se sim: qual pode ser o motivo e o que posso fazer a respeito?
Atualização:
Quando emiti um ponto de verificação manual usando:
EXEC rdsadmin.rdsadmin_util.checkpoint;
... ele fez um checkpoint em menos de um segundo e todos os arquivos de log, exceto um, ficaram INATIVOS.
Parece que ele não faz checkpoints automáticos.
É bem comum ver a mensagem "Checkpoint not complete" em bancos de dados que têm
archive_lag_target
set. Isso acontece particularmente quando há transações abertas de sessões cujo Redo ("Private Strands" no jargão Oracle) tem que ser transportado ("flushed") para o próximo Redo Log, antes que uma troca de log possa acontecer.Não é o caso. O Oracle sempre dispara checkpoints quando uma troca de log acontece. E as trocas de log em si são causadas por
archive_lag_target
(ou quando o redo log enche antes desse intervalo de tempo).A propósito, o RDS Oracle define
archive_lag_target
5 minutos para garantir a recuperabilidade do banco de dados por pelo menos 5 minutos antes de uma perda de dados.Mas agora, para sua principal preocupação:
Desculpas pela resposta no estilo consultor, mas: Depende. ;-) As mensagens "Checkpoint not complete" no Alert Log podem ser uma dica de que os aplicativos podem travar enquanto aguardam a conclusão de um checkpoint. Esse é o caso quando os checkpoints acontecem com muita frequência, mas se você observar esse intervalo regular de 5 minutos, provavelmente não é o caso.
Você pode verificar o CloudWatch, o Statspack ou o dicionário de dados para tempos de espera significativos em eventos "log file switch%" para ter certeza.
Não sei os detalhes internos do
rdsadmin.rdsadmin_util.checkpoint
, mas suponho que seja equivalente aoALTER SYSTEM CHECKPOINT
, que aciona um Checkpoint completo , diferente do Checkpoint de troca de log "mais suave".Se você tiver acesso ao My Oracle Support, confira o Doc ID 435887.1 e o Doc ID 2673217.1 para leitura adicional.
HTH, Uwe