viernes, 22 de marzo de 2013

Entradas de diario para tablas (y 4)

En la entrada anterior "Entradas de diario para tablas (3)" explicaba como analizar las cabeceras de las entradas de diario. Pero otra forma en que nos ayudan las entradas de diario es la de analizar las entradas de un trabajo en su conjunto, esto fácil de entender, pero más difícil de explicar por lo que intentare hacerlo con un ejemplo.

Podemos hacer una primer análisis usando DSPJRN por pantalla, pero puede ser complicado si hay muchas entradas, lo más recomendable seria someter el volcado de las entradas de diario generadas por el trabajo a fichero, esto se explicaba en la entrada "Entradas de diario para tablas (2)", y a continuación podemos bajar el fichero a una hoja de calculo; esto es relativamente sencillo usando el complemento de "Transfer Data from System i" incluido en el "IBM System i Access for Windows", acordaros de marcar la casilla "Convert CCSID 65535" de las "Properties" de la definición, aunque siempre suele dar un error en la columna 21 (JOJID), al contener caracteres no visualizables y que podemos ignorar. Adjunto una imagen de un archivo con entradas de diario bajadas a hoja de calculo:


En este caso podemos ver que existe una secuencia de códigos que nos explican que cambios realizaba el trabajo en las tablas registradas por diario, intentare explicarlas para que se entiendan, os recomiendo tener a mano la tabla con la explicación de los códigos de diario:
  C-SC El programa MYPGM3 abre un ciclo de commit.
  R-PT El programa MYPGM3 inserta un registro en la tabla MYFILE3.
  C-CM El programa MYPGM1 cierra el ciclo de commit.
  C-SC El programa MYPGM3 abre un ciclo de commit.
  R-UB Imagen anterior del registro de la tabla MYFILE1, y que va a ser actualizado por el programa MYPGM3.
  R-UP Imagen posterior del registro de la tabla MYFILE1, actualizado por el programa MYPGM3.
  R-DL Registro eliminado de la tabla MYFILE2 por el programa MYPGM3.
  R-PX Registro insertado en la tabla MYFILE2 por el programa MYPGM3.
  R-PT El programa MYPGM3 inserta un registro en la tabla MYFILE3.
  C-CM El programa MYPGM1 cierra el ciclo de commit.


De momento solo he comentado los 2 primeros ciclos de commit, uno que solo ha insertado un registro en una tabla y otro que ha realizado 1 update, 1 delete y 2 insert. La diferencia entre PX y PT, los dos insertan un registro en una tabla, es que el primero inserta el registro directamente al final de la tabla (usando RRN) y el segundo lo inserta en el primer registro vacío que encuentre, si la tabla tiene el parámetro REUSEDLT(*YES); el rendimiento es mucho mejor usando PX, pero también requiere compactar la tabla, periódicamente, si quedan muchos registros suprimidos sin utilizar.

Continuando el análisis, ya que estamos buscando algún problema en nuestros programas, nos fijamos estos ciclos de commit se van repitiendo, pero en la fila 32 de la hoja de calculo vemos que un programa denomina do QE9A0FF28B, si buscamos este objeto, en el sistema, vemos que esta en la biblioteca QRPLOBJ. En este caso podemos asegurar, que se ha compilado el programa MYPGM3, mientras lo estaba usando el trabajo y, como estaba ejecutándolo en ese instante, el sistema ha movido el objeto a la biblioteca QRPLOBJ.

Bueno en este ejemplo no me he fijado en el contenido de los datos (columna JOESD), pero creo que ya he dado una idea de la potencia de usar las entradas de diario para el análisis de problemas, sobretodo es útil para ayudarnos en sistemas/trabajos donde no podemos, o es difícil  ejecutar el depurador de código.

No hay comentarios: