Diferencia entre Reg. escritos y Nº de WRITE's

Todo lo relacionado a discos, tapes, robots, etc.
Avatar de Usuario
omvp33
Usuario
Usuario
Mensajes: 23
Registrado: 17 Ene 2008, 13:45
País: España
Ciudad: Getafe
Ocupación: Técnico en Sistemas
Ubicación: Madrid, España

Diferencia entre Reg. escritos y Nº de WRITE's

Mensajepor omvp33 » 13 Feb 2009, 08:22

Hola a tod@s.

Perdón si la respuesta a esta consulta es obvia, pero no soy muy experto en estos temas.

Cuando ejecuto un programa que realiza escrituras en un fichero secuencial en el que he puesto un contador de veces que se realiza el WRITE y el fichero destino no es lo suficientemente grande, aparte de obtener un error SD37 (como era de esperar), compruebo que el número de registros realmente escritos en el fichero no se corresponde con el número de ejecuciones de la sentencia WRITE (como cabe esperar en un procesamiento secuencial). Es más, se cumple lo siguiente:

Nº de WRITE's ejecutados = Nº registros en secuencial + nº de registros de 5 bloques de datos.

He realizado pruebas modificando la DCB del fichero: poniendo RECFM=F, RECFM=FB y lo anterior se cumple siempre. También he realizado el programa en Assembler, COBOL y NATURAL y el resultado siempre es el mismo.

Seguro que tiene una explicación sencilla y una solución inmediata. Tal y como está ahora mismo sería peligroso en caso de que alguien asumiese el rearranque de un proceso a partir de la cuenta de registros escritos en un secuencial (no es una manera lógica de hacerlo, de acuerdo, pero hay usuarios para todos los gustos.... :wink: ).

Muchas gracias a tod@s los forer@s por adelantado.
ADABAS is not death, is the solution

NJB
Su anfitrion
Su anfitrion
Mensajes: 1108
Registrado: 12 Oct 2003, 16:27
País: Argentina
Ciudad: Capilla del Señor
Ocupación: System Programmer
Contactar:

Re: Diferencia entre Reg. escritos y Nº de WRITE's

Mensajepor NJB » 13 Feb 2009, 12:53

Hola

Seguro que alguien te lo va a explicar mejor, pero no me parece descabellado lo que te ocurre.

En lecturas /escrituras el metodo de acceso aloca un buffer en la memoria del AS que esta utilizando el READ/WRITE de 5 veces el tamaño del bloque real a grabar.

En este caso tus write no van al disco sino al buffer intermedio que es que luego se graba.
En otras palabras cada 5 write de tu programa hay uno real de 5 records, el abend te lo da al querer grabar ese buffer, pero eso ocurre cuando el buffer esta lleno (o al close del archivo) por eso tenes tus registros grabados hasta 5 antes del abend. Al querer grabar da el abend pero los últimos 5 estan en el buffer que no se graba pero tu programa cree que si.

Espero que esto aclare en algo el tema.

Te mando un cordial saludo
Norberto Bocalandro

Avatar de Usuario
omvp33
Usuario
Usuario
Mensajes: 23
Registrado: 17 Ene 2008, 13:45
País: España
Ciudad: Getafe
Ocupación: Técnico en Sistemas
Ubicación: Madrid, España

Re: Diferencia entre Reg. escritos y Nº de WRITE's

Mensajepor omvp33 » 16 Feb 2009, 08:44

Hola.

Muchas gracias por tu rápida contestación. Por lo que deduzco de ella, hay write's "lógicos" (los que hace mi programa) y "físicos" (los que vuelcan de ese buffer intermedio al disco como tal).

Entiendo que este método de emplear bufferes intermedios favorece notablemente el rendimiento de las operaciones y que, en la mayoría de las ocasiones, aporta beneficios. Pero también creo que es una limitación muy grave, ya que puede dar lugar a inconsistencias derivadas de una mala interpretación del número de escrituras ("lógicas") realizadas. Esto es impropio de un sistema tan robusto y fiable como el z/OS.

¿Alguien ha previsto esto en alguna instalación y ha encontrado una solución óptima? Evidentemente, el no emplear esta estructura de bufferes intermedios no es una solución adecuada, ya que los tiempos se dispararían.

Un saludo.
ADABAS is not death, is the solution

NJB
Su anfitrion
Su anfitrion
Mensajes: 1108
Registrado: 12 Oct 2003, 16:27
País: Argentina
Ciudad: Capilla del Señor
Ocupación: System Programmer
Contactar:

Re: Diferencia entre Reg. escritos y Nº de WRITE's

Mensajepor NJB » 16 Feb 2009, 09:12

Hola

En realidad siempre se ha sabido que un job con archivos MOD no es restarteable. Por eso se deben usar otros metodos (de ser posible) o bien un paso posterior para eliminar duplicados.

Te soy franco, es la primera vez que se de alguien que cuenta los registros para saber donde hay que reenganchar un job, cosa que no creo que sea muy sencilla para la gente de operaciones, ya que ellos solo manejan el JCL.

Yo en tu caso lo que haría es proveer dentro de mi JCL puntos específicos de reenganche sin tener en cuenta cuanto de un step corrio. Lo que se reengancha son steps completos, entonces una opción es un backup previo de tu archivo (por ejemplo).

Ten en cuenta que esto se maneja desde hace mas de 40 años y nunca el tema del bufereo (que no es opcional) ha tenido impacto en los sistemas productivos.

Te mando un cordial saludo
Norberto Bocalandro

riloama
Colaborador
Colaborador
Mensajes: 186
Registrado: 02 Sep 2008, 18:39
Ubicación: Caracas - Veenzuela

Re: Diferencia entre Reg. escritos y Nº de WRITE's

Mensajepor riloama » 16 Feb 2009, 18:41

Hola omvp33

No puedo saber exactamente lo que deseas hacer, pero si hay un metodo sencillo para que la cantidad de writes 'logicos' coincida con los fisicos, y es el de definir al archivo sobre el cual estas realizando writes como no bloqueado; si tiene longitud fija RECFM=F si tiene longitud variable RECFM=V sin adicionarle la B.

Por supuesto que esto tiene un costo alto en espacio en disco y acceso a los datos.

Saludos
Saludos

riloama

Avatar de Usuario
omvp33
Usuario
Usuario
Mensajes: 23
Registrado: 17 Ene 2008, 13:45
País: España
Ciudad: Getafe
Ocupación: Técnico en Sistemas
Ubicación: Madrid, España

Re: Diferencia entre Reg. escritos y Nº de WRITE's

Mensajepor omvp33 » 17 Feb 2009, 11:20

Buenos días.

En primer lugar daros las gracias por la ayuda y las respuestas.

En segundo lugar indicaros que realmente esto no es una incidencia que haya detectado, sino que es algo que advertí por "azar" realizando otro tipo de pruebas y me despertó la curiosidad. Por supuesto que hay muchas maneras de garantizar un rearranque de un proceso más fiables que contar los registros de un secuencial previo, pero si alguien lo malinterpreta podría dar lugar a problemas posteriores en cualquier instalación.

En tercer lugar indicaros que, a través de un compañero que ha investigado el caso, ya hay una explicación lógica a lo que sucede: "La macro DCB tiene el subparámetro BUFNO y solo para QSAM, ese parámetro tiene un valor por defecto de 5". Por tanto, si no se hace override de dicho valor mediante BUFNO en el JCL esto determina el desfase.

Como BUFNO=0 no existe, el efecto detectado no desaparece. Sólo se puede minimizar a un registro si se emplea DCB=(RECFM=F,LRECL=xxx,BLKSIZE=xxx,BUFNO=1). Además, tal y como se ha dicho en alguna respuesta anterior, esto penaliza notablemente el rendimiento, por lo que no tiene mucho sentido, que digamos.
ADABAS is not death, is the solution

Jorge Mendivelzua

Re: Diferencia entre Reg. escritos y Nº de WRITE's

Mensajepor Jorge Mendivelzua » 19 Feb 2009, 09:15

Estimado omvp33

Lamentablemente no tengo suficiente tiempo para ayudar en temas urgentes y muchas veces cuando leo el mail de los sábados algunas de las consultas ya han sido respondidas. Esta es mi oportunidad: un tema lindo y sin apuro.

Cuando lo leí por primera vez el tema me llamó mucho la atención y, coincido contigo, suena como algo que no debería pasar. Lo primero que se me ocurrió fue reproducir el error en una LPAR de capacitación a la que tengo acceso pero parece que el tiempo de los fines de semana ya tampoco es suficiente para los más viejitos. Si me pudieras mandar un archivo con JCL y el programa por mail, me ayudarías a probarlo.

Lo primero que hubiera intentado era mirar el BUFNO y eso ya lo has hecho. En este parámetro tienes que poder poner el número de buffers que haga que tu programa tenga la performace que necesitas. Esto siempre es a costa de otros y si bien a más buffers mejor, para la performace de los demás usuarios no es bueno que cada uno ponga lo que le guste. O sea, BUFNO=1 no es solución.

Como prueba del tipo de demonios que has desatado pongo aquí una frase para que sea discutida por quién tenga las ganas mientras yo también compruebo si es correcta con más lectura y/o corro tu prueba en mi máquina.

“En teoría, el cierre del archivo y la grabación de buffers, llenos o no, de los archivos de un programa que cancela deben ser realizados por una rutina ESTAE que es llamada por el Recovery Terminador Manager (RTM) que, a su vez, fue llamado como consecuencia de la interrupción SVC 13 (ABEND)”

Tenemos que averiguar por que eso no pasó.
Jorge Mendivelzua

nlacabe

Re: Diferencia entre Reg. escritos y Nº de WRITE's

Mensajepor nlacabe » 27 Feb 2009, 12:21

Hola, me parece que ha quedado un tema sin aclarar respecto de la grabación logica y fisica.

Es como vos decis, las grabaciones logicas no se reflejan fisicamente en forma sincronizada por cuestiones de performance. El tema es que esa mecanica no es la unica que se puede utilizar para grabar información, hay macros con parametros que no siguen adelante hasta verificar que el registro fue efectivamente grabado, por lo tanto es una elección tuya la forma de grabación balanceando performance-integridad.
En este momento no tengo presente si este tipo de grabación (READ/CHECK) se puede hacer desde Cobol, supongo que se debería investigar el "I-O CONTROL" para esto.

Saludos. Nestor.


Volver a “Storage”