3 Replies Latest reply on Jun 18, 2018 10:01 PM by Byron Fonseca

    Thread 1 cannot allocate new log, sequence 188328 Checkpoint not complete

    Marco De la Fuente

      Hola amigos:

      Uso Oracle 11g SE y está en modo "No archive"

      He estado revisando el allert.log de una de mis bases de datos, y he encontrado este mensaje. El funcionamiento ha sido normal y no presenta ningún inconveniente, sin embargo, igual me preocupa. Quién me puede dar indicios de que se trata? y si es muy grave o no.

        • 1. Re: Thread 1 cannot allocate new log, sequence 188328 Checkpoint not complete
          Lisandro Fernigrini

          Significa que en algún momento, la base de datos necesito escribir en un archivo de REDO  LOG, pero el mismo no podía ser sobrescrito (supongo que conoces como funcionan los redo-log, en forma cíclica) ya que no se había terminado de hacer un checkpoint (es decir, de escribir en disco en los datafiles la información que había sido modificada en el buffer cache). Al ocurrir esto, la base de datos no puede realizar nuevas modificaciones hasta que termine el checkpoint y se pueda sobrescribir el archivo de redo-log, por lo que es probable que por unos instantes (segundos o minutos) la base de datos haya estado como "freezada".

           

           

          Aqui la expliación de Tom Kyte al respecto:

           

          https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:69012348056

          the infamous "checkpoint not complete, cannot allocate new log" message.

           

          this occurrs when Oracle attempts to reuse a log file but the checkpoint that would flush the blocks that may have redo in this log file has not yet completed -- we must wait until that checkpoint completes before we can reuse that file -- thats when this message is printed. during this time (when we cannot allocate a new log) processing is suspended in the database while the checkpoint is made to complete ASAP.

           

          The major way to relieve this is to have sufficient log to carry you through peak times. that way, we can complete the checkpoint while you are not busy.

           

          also make sure your checkpoints happen as fast as they can (eg: enable ASYNC IO or configure >1 DBWR if ansyc IO cannot be used, make sure disks are not contending with other apps and so on)

           

          Another way is to make the log files smaller, hence increasing the frequency with which we checkpoint (log checkpoint interval and other init.ora parameters achieve the same effect btw).

           

          I myself prefer to use a modest sized log file (around 25meg) and will add logfiles until these messages cease...

           

          El mensaje es una advertencia, la base de datos se encuentra en perfecto estado de integridad, pero en algunos momentos tuvo ese problema de performance. Una forma de solucionarlo es agregar mas grupos de Redo de tamaño moderado, con lo cual se puede tener mas "volumen" de datos sin hacer checkpoint por un lado, y por otro se aumenta la frecuencia de los check point, como explicó Tom Kyte

          2 people found this helpful
          • 2. Re: Thread 1 cannot allocate new log, sequence 188328 Checkpoint not complete
            Marco De la Fuente

            Muchas gracias Lisandro. Tu explicación me será de mucha ayuda.

             

            Afectuosos saludos y muchas gracias.

            • 3. Re: Thread 1 cannot allocate new log, sequence 188328 Checkpoint not complete
              Byron Fonseca

              Hola Marco, creo que la explicación fue correcta si bien la respuesta fue marcada como "HELPFUL" creo que debes marcarla como "ANSWERED" porque sino el "hilo" sigue abierto, o si no en qué más se puede ayudar para cerrar el inconveniente.

               

              Mi recomendación es que evalúes cuantos megabytes generas en una hora normal y una hora pico, y trates de cumplir la regla de Oracle de tener 4 redo log switch por hora, a mi manera de ver la respuesta más rápida es incrementa el tamaño de tus redos pero para no hacer prueba error mejor revisa cuanto generas, divides para 4 y listo tienes el tamaño optimo para tus redos.

               

              -- para ver de que tamaño son mis redos

              select group#, thread#, sequence#, bytes/1024/1024 mb, /*blocksize, */archived, status from v$log order by thread#, group#;

               

              -- para ver los redos generados (switches) agrupados por hora

              select  to_char(first_time,'DD HH24') DDHH, thread# nodo, count(*) NUM_ARCHS from v$log_history

              where first_time between sysdate-1 and sysdate

              group by to_char(first_time,'DD HH24'), thread# order by 1, 2

               

              Si en tu hora pico generaste 20 redos y tus redos son de 25mb=500mb por hora lo divides para 4 seria 125mb tu tamaño optimo.