Ejecución constante de trigger transaction

Todo lo relacionado con MQ en ambiente OS/390 o z/OS
Responder
CarlosLC

Ejecución constante de trigger transaction

Mensaje por CarlosLC » 26 Ago 2008, 05:18

Hola a todos.

No tengo muchos conocimientos de MQSeries, por lo que pido disculpas si la cuestión que planteo es muy simple de solucionar.

En la instalación donde estoy tenemos MQSeries para zOS corriendo bajo CICS TS. Una de las colas está conectada con un organismo externo. Dicha cola tiene asociada una transacción que se ejecuta cuando llega algún mensaje.

En un momento determinado, dicho organismo realizó un cambio en sus instalaciones y a partir de ese momento la ejecución de la transacción asociada al trigger, pasó de ejecutarse menos de 100.000 veces al día, a ejecutarse 4 ó 5 millones de veces al día. Evidentemente asociamos la situación al cambio realizado, pero nos aseguran que no han hecho nada que pueda suponer un incremento de tráfico de mensajes.

Monitorizando la cola en cuestión, vemos que en el campo use counts-output, siempre aparece un '1'.

¿Es posible que desde el MQ remoto se haya activado algún tipo de trace, estadísticas o similar que provoque el aumento de tráfico y el consiguiente disparo de la transacción?

¿Se os ocurre alguna causa para esta situacón?

Gracias anticipadas por vuestra atención.

kikebike
Usuario
Usuario
Mensajes: 2
Registrado: 18 Jul 2006, 05:02
País: España
Ciudad: alcorcon
Ocupación: Administrador de CICS
Ubicación: España

Mensaje por kikebike » 01 Sep 2008, 03:32

Hola a todos.

Es posible que el mensaje que hay en la cola, que se esta intentando procesar por el programa que realiza el GET, sea erroneo y el programa lo devuelva a la cola provocando que se vuelva a disparar el trigger en un bucle infinito.

Si este es el problema se puede controlar a traves del programa que hace el GET de la cola con el parametro BACKOUT_COUNT en las opciones del GET.

Espero que te sirva como ayuda.

Un saludo.
Un saludo.

Kike

ashram5885

Mensaje por ashram5885 » 17 Sep 2008, 07:02

Buenas,

tal y como dice kikebike, si se produce un abend de la transaccion y el mensaje vuelve a la cola, MQ volvera a lanzar el programa pudiendo provocar un bucle.
Pero no solo si abenda, en un principio, y si mal no recuerdo, solo por realizar el open de la cola para leer-la es suficiente para que mq vaya lanzando la tranasacción hasta que se vacia la cola, por ejemplo:
Imagina que el trigger arranca la transaccion porque ha llegado 1 (o n ) mensaje/s. El programa realiza un CONNECT al gestor, luego un OPEN (para leer) pero no llega a realizar el GET ( o realiza menos GETs que mensajes hay en la cola, luego el CLOSE y el DISCONNECT finalizando la ejecucion del programa correctamente (sin ABENDS) pero habiendo dejado mensajes en la cola . . . entonces MQ volvera a lanzar el Trigger por que no se ha vaciado la cola. Es decir si te dejan 10 mensajes y solo lees uno por ejecucion, MQ lanzara 10 veces sucesivas la transaccion para que se vacie la cola . . . . . y no parará hasta que se vacie.

Espero que te sirva de ayuda.

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 375
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: Otra

Trigger Monitor

Mensaje por LuisFer » 17 Sep 2008, 11:12

Que yo conozca hay 3 formas de trigger MQ:
1.- Por profundidad (DEPTH) de la cola:
Al llegar a un numero de mensajes se dispara el proceso MQ asociado
2.- Al ponerse el primer Mensaje (FIRST):
solo se disparará el cuando llegue el primer mensaje, si llega otro mensaje mientras el primero esta todavía en la cola NO se dispara el proceso MQ asociado
3.- Con cada mensaje (EVERY) que llegue se dispara el proceso:
Para un transaccional (nosotros lo tenemos para IMS) lo normal es EVERY.
De todas maneras te recomiendo que cambieis de Trigger a CICS Brigde, te evitarás este tipo de problemas y ganareis en rendimiento.
Mientras con el Trigger por cada Mensaje obligas a la tx a realizar la secuencia completa de las APIS (MQCONN , MQOPEN , MQGET, MQCLOSE, MQDISC ), con el Brigde una vez que se has puesto el mensaje en la cola MQ estas ejecutando la Tx (al menos es así en IMS).
Ten ademas en cuenta que la seguridad MQ básicamente es llamada en la MQCONN y especialmente en la MQOPEN.
Te adjunto un enlace al manual donde trata en detalle los disparadore.

Espero te ayude



http://publib.boulder.ibm.com/infocente ... 13830_.htm
Saludos
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

CarlosLC

Mensaje por CarlosLC » 19 Sep 2008, 03:53

Hola.

Gracias a todos por vuestras respuestas.

El trigger lo tenemos configurado en el modo FIRST y el aplicativo controla esta situación. Por otro lado, los mensajes en error también son controlados y sacados de la cola.

Seguimos creyendo que el problema está en el tráfico que se genera, que ha aumentado de forma considerable.

Por ahora lo que hemos hecho ha sido quitar el trigger y ejecutar la transacción de lectura cada minuto. Con eso nos ahorramos millones de ejecuciones diarias.

Un saludo a todos.

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 375
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: Otra

Mensaje por LuisFer » 19 Sep 2008, 05:06

CarlosLC escribió: ...
Seguimos creyendo que el problema está en el tráfico que se genera, que ha aumentado de forma considerable.
...
Podeis controlarlo por el número de Mensajes (CURSEQNO) que fluyen por vuestro canal receiver, si es una conexion tipo Servidor <==> Servidor, ( lo mismo si la conexión es a través de Cliente MQ ).

Saludos
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

Responder