Ver Mensaje Individual
  #1  
Antiguo 02-06-2023
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Reputación: 20
afxe Va por buen camino
Lanzar un Store Procedure cuando se detecta inactividad

Saludos a todos. (En el título: Stock -> Store) Cuando se inserta o modifica datos en una tabla de movimientos de artículos (ventas, compras, traspasos...) lanzo en un trigger una Procedure que se encarga de mantener el stock y datos estadísticos.
En una instalación, a primera hora, se procesan todos los pedidos recibidos el día anterior (desde tres puestos diferentes) y se crean las líneas de ventas correspondientes. Unas 6000 líneas de ventas diarias... lo cual hace que se lance el Store Procedure 6.000 veces. Realmente se han movido 200 artículos, sólo habría que lanzarlo 200 veces cuando se termine la generación masiva en todos los puestos. Durante el resto del día, se hace sólo 20 o 30 documentos por hora, desde más de 10 puestos. Se me ha ocurrido crear una tabla donde el trigger, en vez de lanzar el procedure, meta el código del artículo y el almacén, siempre que no exista ya, y cuando se detecte inactividad lanzar el store procedure para la lista de artículos incluidos y vaciar la tabla...

El tema es... ¿Cómo detecto inactividad en Firebird? o por lo menos... ¿Cómo detecto que en un determinado tiempo no se han añadido artículos a esta tabla? Estoy hablando de ejecución en el propio firebird... sería muy fácil tener un programa con un Timer comprobando la tabla y las última inserciones en la misma, y lanzar el store procedure cuando detecte que se han pasado más de 20 o 30 segundos sin incluir artículos...eso indicaría que han terminado de generar documentación... y seguiría funcionando para el resto de creación de documentos durante el día de la misma manera, evitando que se ralentice la grabación del documento haciendo cálculos de stocks y estadísticas.

Pero por experiencia, tener una aplicación desatendida en el servidor suele dar problemas... un error, un deadlock, una desconexión de red o un reinicio del servidor.... y todos los stocks estarían mal hasta que alguien se de cuenta de que el programa se ha parado. Pero no encuentro cómo crear un timer en Firebird o, lo que sería la caña, detectar que el servidor está inactivo, y ponerme a procesar la tabla en tiempos de inactividad, y parar de procesarla cuando entre en actividad... eso sería ideal.
__________________
Amar al mundo apasionadamente.

Última edición por Casimiro Notevi fecha: 03-06-2023 a las 11:55:02. Razón: palabra incorrecta en el título
Responder Con Cita