viernes, 5 de junio de 2009

Colas de trabajos

Cuando hemos de controlar la ejecución de los trabajos batch en el sistema, normalmente usamos los subsistemas, las colas de trabajo y las prioridades en la cola de trabajo (parámetro JOBPTY del CHGJOB).
Este articulo es para entender mejor como un subsistema trabaja con las colas de trabajo que tiene asignadas y como podemos crear colas de trabajo especificas para ciertas tareas. Para ello explicare algunos conceptos relacionados con las colas de trabajo, en los ejemplos nos basaremos en el sistema QBATCH (DSPSBSD SBSD(QBATCH) y opción 6).
  • El subsistema tiene un numero de trabajos máximo que puede ejecutar, se cambia con el mandato CHGSBSD SBSD(QBATCH) MAXJOBS(*NOMAX), en este ejemplo estamos diciendo al sistema, que puede ejecutar un numero ilimitado de trabajos en el subsistema, bueno el limite es el rendimiento del sistema, ya podríamos llegar a colapsarlo.
  • El subsistema tiene colas de trabajo asignadas y estas tienen un numero de secuencia, o sea el sistema primero mira si hay trabajos en la cola de trabajos de la secuencia 10, después de la 20, ..., hasta la 9999.
  • Cada cola de trabajos, asignada a un subsistema, tiene también un numero máximo de trabajos que puede ejecutar. El numero máximo de trabajos de una cola de trabajos se puede cambiar con el mandato CHGJOBQE.
  • Para complicarlo un poco más, también pueden definirse en cada cola de trabajo el numero de trabajos máximo por prioridad del trabajo, aunque por lo que he podido ver se usa poco.
  • Si el sistema encuentra un trabajo en la cola de trabajos, y no hay ejecutándose el numero máximo de trabajos activos de esa cola y el subsistema tiene menos trabajos que el máximo que tiene definido para el subsistema, entonces entraran tantos trabajos de esa cola hasta que no queden trabajos en la cola o hasta que el subsistema tenga el numero máximo de trabajos.
  • Una cola de trabajos puede estar definida en dos subsistemas diferentes, pero solo se asigna al primer subsistema que arranca.
  • Una cola puede no estar asignada a algún subsistema (o el subsistema no esta activo), en ese caso nunca entran trabajos de esa cola.
Ejemplo1:
Ejemplo1
  • En este ejemplo supongamos que el subsistema QBATCH puede ejecutar un numero ilimitado de trabajos (*NOMAX).
  • En este caso podríamos tener el numero máximo de trabajos ejecutándose de todas las colas porque 10+1+4 = 15.
  • Si en la cola QBATCH hay 17 trabajos solo se ejecutaran como máximo 10, aunque el subsistema no este ejecutando ningún trabajo del resto de colas.
Ejemplo2:
Ejemplo2Igual que en el Ejemplo1 pero con dos colas más (con *NOMAX) y el subsistema QBATCH puede ejecutar 50 trabajos al mismo tiempo como máximo:
  • Supongamos que se están ejecutando 3 trabajos de la cola QBATCH y llegan de golpe 160 trabajos a la cola QSRCTXT, de estos entraran 47 trabajos, ya que 3+47=50 es el numero máximo de trabajos activos en el subsistema, quedando el resto en cola.
  • Si en ese momento llega un trabajo por la cola QBATCH1X1, esté no podrá entrar hasta que finalice algún trabajo.
  • Si finaliza un trabajo que ha entrado por la cola QSRCTXT, entonces entraría el trabajo de la QBATCH1X1, porque tiene una secuencia mas baja que la cola QSRCTXT, cuando termine otro, si no hay ninguno en las colas de las secuencias inferiores a la QSRCTXT, irán entrando más trabajos a medida que finalicen.
  • Si mientras llega algún trabajo a la cola QBATCH pasaría antes que los de la QBATCH1X1, ya que su numero de secuencia es menor.
Recomendaciones:
  • Si queremos asignar a una cola un numero de trabajos *NOMAX, mi recomendación es ponerla al final, y deberíamos solo enviar a esa cola trabajos de ejecución muy rápida, para no colapsar la cola ni el sistema.
  • Prefiero asignar al subsistema un numero máximo de trabajos ilimitado (*NOMAX), pero debemos vigilar que las colas *NOMAX no nos puedan colapsar el sistema, en ese caso no nos quedara más remedio que asignar un numero máximo de trabajos al subsistema que nos pueda soportar el sistema (CHGSBSD), habitualmente empezaríamos por asignar la suma del numero máximo de trabajos de cada cola más un numero n de trabajos, si vemos que es demasiado para el sistema, ir reduciendo el numero máximo de trabajos activos.
Publicar un comentario en la entrada