For et par uger siden, kom en anden DBA ind på vores kontor med et spørgsmål. Han kunne ikke forstå hvorfor hans checkpoints ikke blev færdige, og hvorfor følgende optrådte i alert.log filen.

Thread <n> cannot allocate new log, sequence <nnn>; Checkpoint not complete” 

Den typiske anbefaling er at sætte størrelsen på logfilerne op, eller tilføje flere online redologs. Ved denne fremgangsmåde får du sikkert nedbragt frekvensen af disse beskeder i loggen, men du løser ikke problemmet.

Checkpoint not complete er resultatet af en database der skriver alle dirty buffers fra buffer cache og skifter mellem tilgængelige online redologs før checkpointet kan blive færdigt. Oracle skal altid kunne recover pga. instance failure fra sidste checkpoint og frem, pga. disse regler er Oracle forhindret at genbruge sine online redologs, der indeholder ændringer nyere end sidste checkpoint.

  1. Et checkpoint der ikke kan blive færdigt til tiden, er typisk langsom I/O til datafilerne.
  2. Ved at forøge log størrelserne, løser du ikke problemet. Du har stadig et I/O problem.

Først og fremmest bør du lige kortlægge, hvor ofte du ser problemet: månedligt, ugeligt, dagligt, pr. time osv.

  1. Hvis det nu ikke er hver dag, eller hver uge for den sags skyld, så kan det være højt DML fra en applikation i perioder. Man kunne undersøge hvilken applikation, og hvad den lavede og f.eks nedbringe redo genereringen ved f.eks at benytte nologging.
  2. Hvis det tilgengæld sker hele tiden er problemet lidt sværre. Det betyder at den gennemsnitlige DML aktivitet er så høj, at I/O subsystemet ikke kan følge med. Start med at kigge i v$system_event her vil normalt   time_waited, buffer busy wait og write complete wait være ret høje.

Med et langsomt I/O subsystem, kan man fristes til opgraderinger og tilogmed udskiftinger. Vær dog opmærksom på det er en ret komplex process, prøv f.eks følgende først.

  1. Tilføj flere database writer, det betyder der er flere til at skrive og dine checkpoints kan måske opretholde niveau med DML aktiviteten på systemet.
  2. Er det en applikations fejl. Find ud af hvilken, og hvor, og forlæg for udviklerne. I helt pæne termer er der sikkert tale om en design fejl.