Show Menu
TEMAS×

Flujo de trabajo de limpieza de bases de datos

Introducción

El flujo de trabajo Database cleanup accesible a través del Administration > Production > Technical workflows nodo le permite eliminar datos obsoletos para evitar un crecimiento exponencial de la base de datos. El flujo de trabajo se activa automáticamente sin intervención del usuario.

Configuración

La limpieza de la base de datos está configurada en dos niveles: en el programador de flujo de trabajo y en el asistente de implementación.

El programador

For more on the scheduler, refer to this section .
De forma predeterminada, el flujo de trabajo se configura para que se inicie diariamente a las 4 de la madrugada. Database cleanup El programador le permite cambiar la frecuencia de activación del flujo de trabajo. Están disponibles las siguientes frecuencias:
  • Several times a day
  • Daily
  • Weekly
  • Once
Para que el flujo de trabajo Database cleanup se inicie en la fecha y hora definidas en el programador, se debe iniciar el motor de flujo de trabajo (wfserver). Si este no es el caso, la limpieza de la base de datos no tendrá lugar hasta la próxima vez que se inicie el motor de flujo de trabajo.

Asistente de implementación

El Deployment wizard , al que se accede a través del Tools > Advanced menú, le permite configurar durante cuánto tiempo se guardan los datos. Los valores se expresan en días. Si estos valores no se modifican, el flujo de trabajo utilizará los valores predeterminados.
Los campos de la Purge of data ventana coinciden con las siguientes opciones. Algunas de las tareas ejecutadas por el Database cleanup flujo de trabajo las utilizan:
Todas las tareas ejecutadas por el Database cleanup flujo de trabajo se describen en la siguiente sección.

Tareas realizadas por el flujo de trabajo de limpieza de la base de datos

En la fecha y hora definidas en el programador de flujo de trabajo (consulte El programador ), el motor de flujo de trabajo inicia el proceso de limpieza de la base de datos. La limpieza de base de datos se conecta a la base de datos y ejecuta las tareas en la secuencia que se muestra a continuación.
Si se produce un error en una de estas tareas, no se ejecutarán las siguientes. Las consultas SQL con un atributo LIMIT se ejecutarán repetidamente hasta que se procese toda la información.
Las secciones siguientes, que describen las tareas realizadas por el flujo de trabajo de limpieza de bases de datos, están reservadas para administradores de bases de datos o usuarios familiarizados con el lenguaje SQL.

Listas para eliminar la limpieza

La primera tarea ejecutada por el Database cleanup flujo de trabajo elimina todos los grupos con deleteStatus.= 0 atributo de NmsGroup . También se eliminan los registros vinculados a estos grupos y que existen en otras tablas.
  1. Las listas que se van a eliminar se recuperan mediante la siguiente consulta SQL:
    SELECT iGroupId, sLabel, iType FROM NmsGroup WHERE iDeleteStatus <> 0 OR tsExpirationDate <= GetDate() 
    
    
  2. Cada lista tiene varios vínculos a otras tablas. Todos estos vínculos se eliminan de forma masiva mediante la siguiente consulta:
    DELETE FROM $(relatedTable) WHERE iGroupId=$(l) IN (SELECT iGroupId FROM $(relatedTable) WHERE iGroupId=$(l) LIMIT 5000) 
    
    
    donde $(relatedTable) es una tabla relacionada con NmsGroup y $(l) es el identificador de lista.
  3. Cuando la lista es una lista de tipos 'Lista', la tabla asociada se elimina mediante la siguiente consulta:
    DROP TABLE grp$(l)
    
    
  4. Cada lista Seleccionar tipo recuperada por la operación se elimina mediante la siguiente consulta:
    DELETE FROM NmsGroup WHERE iGroupId=$(l) 
    
    
    donde $(l) es el identificador de lista

Limpieza de las entregas que deben eliminarse o reciclarse

Esta tarea purga todos los envíos que se van a eliminar o reciclar.
  1. El flujo de trabajo Database cleanup selecciona todos los envíos para los que el campo deleteStatus tiene el valor Yes o Recycled y cuya fecha de eliminación es anterior al período definido en el campo Deleted deliveries ( NmsCleanup_RecycledDeliveryPurgeDelay ) del asistente de implementación. For more on this, refer to Deployment wizard . Este período se calcula en relación con la fecha del servidor actual.
  2. Para cada servidor de fuentes intermedias, la tarea selecciona la lista de entregas que se van a eliminar.
  3. El flujo de trabajo elimina los registros de entrega, los archivos adjuntos, la información de la página de reflejo y todos los demás datos relacionados. Database cleanup
  4. Antes de eliminar definitivamente la entrega, el flujo de trabajo purga la información vinculada de las siguientes tablas:
    • En la tabla de exclusión de entrega ( NmsDlvExclusion ), se utiliza la siguiente consulta:
      DELETE FROM NmsDlvExclusion WHERE iDeliveryId=$(l)
      
      
      donde $(l) es el identificador de la entrega.
    • En la tabla de cupones ( NmsCouponValue ), se utiliza la siguiente consulta (con eliminaciones masivas):
      DELETE FROM NmsCouponValue WHERE iMessageId IN (SELECT iMessageId FROM NmsCouponValue WHERE EXISTS (SELECT B.iBroadLogId FROM $(BroadLogTableName) B WHERE B.iDeliveryId = $(l) AND B.iBroadLogId = iMessageId ) LIMIT 5000)
      
      
      donde $(l) es el identificador de la entrega.
    • En las tablas del registro de entregas ( NmsBroadlogXxx ), las eliminaciones masivas se ejecutan en lotes de 20.000 registros.
    • En las tablas de propuesta de oferta ( NmsPropositionXxx ), las eliminaciones masivas se ejecutan en lotes de 20.000 registros.
    • En las tablas de registro de seguimiento ( NmsTrackinglogXxx ), las eliminaciones masivas se ejecutan en lotes de 20.000 registros.
    • En la tabla de fragmentos de entrega ( NmsDeliveryPart ), las eliminaciones masivas se ejecutan en lotes de 500.000 registros. Esta tabla contiene información de personalización sobre los mensajes restantes que se van a entregar.
    • En la tabla de fragmentos de datos de la página reflejada ( NmsMirrorPageInfo ), las eliminaciones masivas se ejecutan en lotes de 20.000 registros para las piezas de entrega caducadas y para las finalizadas o canceladas. Esta tabla contiene información de personalización de todos los mensajes utilizados para generar páginas de reflejo.
    • En la tabla de búsqueda de página reflejada ( NmsMirrorPageSearch ), las eliminaciones masivas se ejecutan en lotes de 20.000 registros. Esta tabla es un índice de búsqueda que proporciona acceso a la información de personalización almacenada en la tabla NmsMirrorPageInfo .
    • En la tabla de registro de procesos por lotes ( XtkJobLog ), las eliminaciones masivas se ejecutan en lotes de 20.000 registros. Esta tabla contiene el registro de entregas que se van a eliminar.
    • En la tabla de seguimiento de URL de entrega ( NmsTrackingUrl ), se utiliza la siguiente consulta:
      DELETE FROM NmsTrackingUrl WHERE iDeliveryId=$(l)
      
      
      donde $(l) es el identificador de la entrega.
      Esta tabla contiene las direcciones URL encontradas en los envíos que se van a eliminar para habilitar su seguimiento.
  5. El envío se elimina de la tabla de envío ( NmsDelivery ):
    DELETE FROM NmsDelivery WHERE iDeliveryId = $(l)
    
    
    donde $(l) es el identificador de la entrega.

Entregas que utilizan fuentes intermedias

El flujo de trabajo también elimina los envíos en los servidores de abastecimiento medio. Database cleanup
  1. Para ello, el flujo de trabajo comprueba que cada entrega está inactiva (según su estado). Si un envío está activo, se detendrá antes de eliminarse. La comprobación se realiza mediante la ejecución de la siguiente consulta:
    SELECT iState FROM NmsDelivery WHERE iDeliveryId = $(l) AND iState <> 100;
    
    
    donde $(l) es el identificador de la entrega.
  2. Si el valor del estado es Start pending , In progress , Recovery pending , Recovery in progress , Pause requested , Pause in progress o Paused (valores 51, 55, 61, 62, 71, 72, 75), la entrega se detiene y la tarea purga la información vinculada.

Limpieza de entregas vencidas

Esta tarea detiene las entregas cuyo período de validez ha caducado.
  1. El flujo de trabajo crea la lista de entregas que han caducado. Database cleanup Esta lista incluye todos los envíos caducados con un estado distinto a Finished , así como los envíos detenidos recientemente con más de 10.000 mensajes no procesados. Se utiliza la siguiente consulta:
    SELECT iDeliveryId, iState FROM NmsDelivery WHERE iDeleteStatus=0 AND iIsModel=0 AND iDeliveryMode=1 AND ( (iState >= 51 AND iState < 85 AND tsValidity IS NOT NULL AND tsValidity < $(currentDate) ) OR (iState = 85 AND DateMinusDays(15) < tsLastModified AND iToDeliver - iProcessed >= 10000 ))
    
    
    donde el modo de entrega 1 coincide con el Mass delivery modo, el estado 51 coincide con el Start pending estado, el estado 85 coincide con el Stopped estado y el mayor número de registros de entrega actualizados masivamente en el servidor de entrega es igual a 10.000.
  2. A continuación, el flujo de trabajo incluye la lista de entregas caducadas recientemente que utilizan el abastecimiento intermedio. Se excluyen las entregas para las que aún no se han recuperado registros de entrega a través del servidor de abastecimiento intermedio.
    Se utiliza la siguiente consulta:
    SELECT iDeliveryId, tsValidity, iMidRemoteId, mData FROM NmsDelivery WHERE (iDeliveryMode = 4 AND (iState = 85 OR iState = 95) AND tsValidity IS NOT NULL AND (tsValidity < SubDays(GetDate() , 15) OR tsValidity < $(DateOfLastLogPullUp)) AND tsLastModified > SubDays(GetDate() , 15))
    
    
  3. La siguiente consulta se utiliza para detectar si la cuenta externa sigue activa o no, para filtrar los envíos por fecha:
    SELECT iExtAccountId FROM NmsExtAccount WHERE iActive<>0 AND sName=$(providerName)
    
    
  4. En la lista de entregas caducadas, los registros de entrega cuyo estado es Pending , cambie a Delivery cancelled y todas las entregas de esta lista cambiarán a Finished .
    Se utilizan las siguientes consultas:
    UPDATE $(BroadLogTableName) SET tsLastModified=$(curdate), iStatus=7, iMsgId=$(bl) WHERE iDeliveryId=$(dl) AND iStatus=6
    
    
    donde $(curdate) es la fecha actual del servidor de bases de datos, $(bl) es el identificador del mensaje de registros de entrega, $(dl) es el identificador de entrega, el estado de entrega 6 coincide con el estado Pending y el estado de Delivery cancelled entrega 7 coincide con el estado de la solicitud.
    UPDATE NmsDelivery SET iState = 95, tsLastModified = $(curdate), tsBroadEnd = tsValidity WHERE iDeliveryId = $(dl)
    
    
    donde el estado de entrega 95 coincide con el Finished estado y $(dl) es el identificador de la entrega.
  5. Todos los fragmentos ( deliveryParts ) de entregas obsoletas se eliminan y todos los fragmentos obsoletos de entregas de notificaciones en curso se eliminan. La eliminación masiva se utiliza para ambas tareas.
    Se utilizan las siguientes consultas:
    DELETE FROM NmsDeliveryPart WHERE iDeliveryPartId IN (SELECT iDeliveryPartId FROM NmsDeliveryPart WHERE iDeliveryId IN (SELECT iDeliveryId FROM NmsDelivery WHERE iState=95 OR iState=85) LIMIT 5000)
    
    
    DELETE FROM NmsDeliveryPart WHERE iDeliveryPartId IN (SELECT iDeliveryPartId FROM NmsDeliveryPart WHERE tsValidity < $(curDate) LIMIT 500000)
    
    
    donde el estado de entrega 95 coincide con el Finished estado, el estado de entrega 85 coincide con el Stopped estado y $(curDate) con la fecha del servidor actual.

Limpieza de las páginas reflejadas

Esta tarea elimina los recursos web (páginas de reflejo) que utilizan los envíos.
  1. En primer lugar, la lista de entregas que se van a purgar se recupera mediante la siguiente consulta:
    SELECT iDeliveryId, iNeedMirrorPage FROM NmsDelivery WHERE iWebResPurged = 0 AND tsWebValidity IS NOT NULL AND tsWebValidity < $(curdate)"
    
    
    donde $(curDate) es la fecha del servidor actual.
  2. A continuación, se purga la tabla NmsMirrorPageInfo , si es necesario mediante el identificador de la entrega recuperada anteriormente. La eliminación masiva se utiliza para generar las siguientes consultas:
    DELETE FROM NmsMirrorPageInfo WHERE iMirrorPageInfoId IN (SELECT iMirrorPageInfoId FROM NmsMirrorPageInfo WHERE iDeliveryId = $(dl)) LIMIT 5000)
    
    
    DELETE FROM NmsMirrorPageSearch WHERE iMessageId IN (SELECT iMessageId FROM NmsMirrorPageSearch WHERE iDeliveryId = $(dl)) LIMIT 5000)
    
    
    donde $(dl) es el identificador de la entrega.
  3. A continuación, se agrega una entrada al registro de envíos.
  4. Luego se identifican las entregas purgadas para evitar tener que volver a procesarlas más tarde. Se ejecuta la siguiente consulta:
    UPDATE NmsDelivery SET iWebResPurged = 1 WHERE iDeliveryId IN ($(strIn))
    
    
    donde $(strIn) es la lista de identificadores de entrega.

Limpieza de los cuadros de trabajo

Esta tarea elimina de la base de datos todas las tablas de trabajo que coinciden con entregas cuyo estado es Being edited , Stopped o Deleted .
  1. La lista de tablas con nombres que comienzan por wkDlv_ se recupera primero con la siguiente consulta (postgresql):
    SELECT relname FROM pg_class WHERE relname LIKE Lower('wkDlv_') ESCAPE E'\\' AND relkind IN ('r','v') AND pg_get_userbyid(relowner)<>'postgres'
    
    
  2. A continuación, se excluyen las tablas utilizadas por los flujos de trabajo en curso. Para ello, la lista de entregas en curso se recupera mediante la siguiente consulta:
    SELECT iDeliveryId FROM NmsDelivery WHERE iDeliveryId<>0 AND iDeleteStatus=0 AND iState NOT IN (0,85,100);
    
    
    donde 0 es el valor que coincide con el estado de entrega, 85 coincide con el Being edited estado y 100 con el Stopped Deleted estado.
  3. Las tablas que ya no se utilizan se eliminarán mediante la siguiente consulta:
    DROP TABLE wkDlv_15487_1;
    
    

Limpieza de los rechazos generados por las importaciones

Este paso permite eliminar registros para los que no se procesaron todos los datos durante la importación.
  1. La eliminación masiva se realiza en la tabla XtkReject con la siguiente consulta:
    DELETE FROM XtkReject WHERE iRejectId IN (SELECT iRejectId FROM XtkReject WHERE tsLog < $(curDate)) LIMIT $(l))
    
    
    donde $(curDate) es la fecha del servidor actual desde la cual restamos el período definido para la opción NmsCleanup_RejeesPurgeDelay (consulte el Asistente Asistente de implementación de implementación) y $(l) es el número máximo de registros que se eliminarán masivamente.
  2. Todos los rechazos huérfanos se eliminan mediante la siguiente consulta:
    DELETE FROM XtkReject WHERE iJobId NOT IN (SELECT iJobId FROM XtkJob)
    
    

Limpieza de instancias de flujo de trabajo

Esta tarea purga cada instancia de flujo de trabajo mediante su identificador ( lWorkflowId ) y su historial ( lHistory ). Elimina las tablas inactivas ejecutando de nuevo la tarea de limpieza de la tabla de trabajo.
La frecuencia de depuración del historial se especifica para cada flujo de trabajo en el campo Historial en días (valor predeterminado: 30 días). Este campo se encuentra en la ficha Ejecución de las propiedades del flujo de trabajo. Para obtener más información, consulte esta sección .
  1. Para recuperar la lista de flujos de trabajo que se van a eliminar, se utiliza la siguiente consulta:
    SELECT iWorkflowId, iHistory FROM XtkWorkflow WHERE iWorkflowId<>0
    
    
  2. Esta consulta genera la lista de flujos de trabajo que se utilizarán para eliminar todos los registros vinculados, las tareas finalizadas y los eventos finalizados, mediante las siguientes consultas:
    DELETE FROM XtkWorkflowLog WHERE iWorkflowId=$(lworkflow) AND tsLog < DateMinusDays($(lhistory))
    
    
    DELETE FROM XtkWorkflowTask WHERE iWorkflowId=$(lworkflow) AND iStatus<>0 AND tsCompletion < DateMinusDays($(lhistory)) 
    
    
    DELETE FROM XtkWorkflowEvent WHERE iWorkflowId=$(l) AND iStatus>2 AND tsProcessing < DateMinusDays($(lHistory))
    
    
    donde $(lworkflow) es el identificador del flujo de trabajo y $(lhistory) es el identificador del historial.
  3. Se eliminan todas las tablas no utilizadas. Con este fin, todas las tablas se recopilan gracias a una máscara de tipo wkf% mediante la siguiente consulta (postgresql):
    SELECT relname FROM pg_class WHERE relname LIKE Lower('wkf%') ESCAPE E'\\' AND relkind IN ('r','v') AND pg_get_userbyid(relowner)<>'postgres'
    
    
  4. A continuación, se excluyen todas las tablas utilizadas por una instancia de flujo de trabajo pendiente. La lista de flujos de trabajo activos se recupera mediante la siguiente consulta:
    SELECT iWorkflowId FROM XtkWorkflow WHERE iWorkflowId<>0 AND iState<>20
    
    
  5. A continuación, se recupera cada identificador de flujo de trabajo para encontrar el nombre de las tablas utilizadas por los flujos de trabajo en curso. Estos nombres se excluyen de la lista de tablas recuperadas anteriormente.
  6. Las tablas del historial de actividades de tipo "consulta incremental" se excluyen mediante las siguientes consultas:
    SELECT relname FROM pg_class WHERE relname LIKE Lower('wkfhisto%') ESCAPE E'\\' AND relkind IN ('r','v') AND pg_get_userbyid(relowner)<>'postgres'
    
    
    SELECT iWorkflowId FROM XtkWorkflow WHERE iWorkflowId IN ($(strCondition))
    
    
    donde $(strcondition) es la lista de tablas que coinciden con la máscara wkfhisto% .
  7. Las tablas restantes se eliminan mediante la siguiente consulta:
    DROP TABLE wkf15487_12;
    
    

Limpieza de inicios de sesión de flujo de trabajo

Esta tarea elimina los inicios de sesión del flujo de trabajo mediante la siguiente consulta:
DELETE FROM XtkWorkflowLogin WHERE iWorkflowId NOT IN (SELECT iWorkflowId FROM XtkWorkflow)

Limpieza de las tablas de trabajo huérfanas

Esta tarea elimina las tablas de trabajo huérfanas vinculadas a los grupos. La tabla NmsGroup almacena los grupos que se van a limpiar (con un tipo distinto de 0). El prefijo de los nombres de tabla es grp . Para identificar los grupos que se van a limpiar, se utiliza la siguiente consulta:
SELECT iGroupId FROM NmsGroup WHERE iType>0"

Limpieza de visitantes

Esta tarea elimina los registros obsoletos de la tabla de visitantes mediante eliminación masiva. Los registros obsoletos son aquellos para los que la última modificación es anterior al período de conservación definido en el asistente de implementación (consulte el Asistente de implementación ). Se utiliza la siguiente consulta:
DELETE FROM NmsVisitor WHERE iVisitorId IN (SELECT iVisitorId FROM NmsVisitor WHERE iRecipientId = 0 AND tsLastModified < $(tsDate) LIMIT 5000)

donde $(tsDate) es la fecha del servidor actual, desde la cual restamos el período definido para la opción NmsCleanup_VisitorPurgeDelay .

Limpieza de la NPAI

Esta tarea permite eliminar registros que coincidan con direcciones válidas de la tabla NmsAddress . La siguiente consulta se utiliza para realizar la eliminación masiva:
DELETE FROM NmsAddress WHERE iAddressId IN (SELECT iAddressId FROM NmsAddress WHERE iStatus=2 AND tsLastModified < $(tsDate1) AND tsLastModified >= $(tsDate2) LIMIT 5000)

donde status 2 coincide con el Valid estado, $(tsDate1) es la fecha del servidor actual y $(tsDate2) coincide con la opción NmsCleanup_LastCleanup .

Limpieza de suscripciones

Esta tarea purga todas las suscripciones eliminadas por el usuario de la tabla NmsSubscription mediante eliminación masiva. Se utiliza la siguiente consulta:
DELETE FROM NmsSubscription WHERE iDeleteStatus <>0

Limpieza de registros de seguimiento

Esta tarea elimina los registros obsoletos de las tablas de seguimiento y registro de seguimiento web. Los registros obsoletos son aquellos que son anteriores al período de conservación definido en el asistente de implementación (consulte el Asistente para implementación ).
  1. En primer lugar, la lista de tablas de registro de seguimiento se recupera mediante la siguiente consulta:
    SELECT distinct(sTrackingLogSchema) FROM NmsDeliveryMapping WHERE sTrackingLogSchema IS NOT NULL;
    
    
  2. La eliminación masiva se utiliza para purgar todas las tablas de la lista de tablas previamente recuperadas. Se utiliza la siguiente consulta:
    DELETE FROM XtkTrackingLogRcp WHERE iTrackingLogId IN (SELECT iTrackingLogId FROM XtkTrackingLogRcp WHERE tsLog < $(tsDate) LIMIT 5000) 
    
    
    donde $(tsDate) es la fecha del servidor actual desde la cual restamos el período definido para la opción NmsCleanup_TrackingLogPurgeDelay .
  3. La tabla de estadísticas de seguimiento se elimina mediante eliminación masiva. Se utiliza la siguiente consulta:
    DELETE FROM NmsTrackingStats WHERE iTrackingStatsId IN (SELECT iTrackingStatsId FROM NmsTrackingStats WHERE tsStart < $(tsDate) LIMIT 5000) 
    
    
    donde $(tsDate) es la fecha del servidor actual desde la cual restamos el período definido para la opción NmsCleanup_TrackingStatPurgeDelay .

Limpieza de los registros de entrega

Esta tarea le permite purgar los registros de entrega almacenados en varias tablas.
  1. Para ello, la lista de esquemas de registro de entrega se recupera mediante la siguiente consulta:
    SELECT distinct(sBroadLogSchema) FROM NmsDeliveryMapping WHERE sBroadLogSchema IS NOT NULL UNION SELECT distinct(sBroadLogExclSchema) FROM NmsDeliveryMapping WHERE sBroadLogExclSchema IS NOT NULL
    
    
  2. Al utilizar el abastecimiento intermedio, no se hace referencia a la tabla NmsBroadLogMid en las asignaciones de entrega. El esquema nms:wideLogMid se agrega a la lista recuperada por la consulta anterior.
  3. A continuación, el flujo de trabajo de limpieza de bases de datos purga datos obsoletos de tablas recuperadas anteriormente. Se utiliza la siguiente consulta:
    DELETE FROM $(tableName) WHERE iBroadLogId IN (SELECT iBroadLogId FROM $(tableName) WHERE tsLastModified < $(option) LIMIT 5000) 
    
    
    donde $(tableName) es el nombre de cada tabla de la lista de esquemas, y $(option) es la fecha definida para la opción NmsCleanup_BroadLogPurgeDelay (consulte el Asistente Asistente de implementación de implementación).
  4. Finalmente, el flujo de trabajo comprueba si existe la tabla NmsProviderMsgId . Si es así, todos los datos obsoletos se eliminan mediante la siguiente consulta:
    DELETE FROM NmsProviderMsgId WHERE iBroadLogId IN (SELECT iBroadLogId FROM NmsProviderMsgId WHERE tsCreated < $(option) LIMIT 5000)
    
    
    donde $(option) coincide con la fecha definida para la opción NmsCleanup_BroadLogPurgeDelay (consulte el asistente Asistente de implementación de implementación).

Limpieza de la tabla NmsEmailErrorStat

Esta tarea limpia la tabla NmsEmailErrorStat . El programa principal ( coalesceErrors ) define dos fechas:
  • Fecha inicial: fecha del siguiente proceso que coincide con la opción NmsLastErrorStatCoalesce o con la fecha más reciente de la tabla.
  • Fecha final: fecha actual del servidor.
Si la fecha de inicio es mayor o igual que la fecha de finalización, no se realizará ningún proceso. En este caso, aparece el mensaje coalesceUpToDate .
Si la fecha de inicio es anterior a la fecha de finalización, se limpia la tabla NmsEmailErrorStat .
El número total de errores en la tabla NmsEmailErrorStat , entre las fechas de inicio y finalización, se recupera mediante la siguiente consulta:
"SELECT COUNT(*) FROM NmsEmailErrorStat WHERE tsDate>= $(start) AND tsDate< $(end)"

donde $end y $start son las fechas de inicio y finalización definidas previamente.
Si el total es mayor que 0:
  1. La siguiente consulta se ejecuta para mantener sólo los errores más allá de un determinado umbral (que es igual a 20):
    "SELECT iMXIP, iPublicId, SUM(iTotalConnections), SUM(iTotalErrors), SUM(iMessageErrors), SUM(iAbortedConnections), SUM(iFailedConnections), SUM(iRefusedConnections), SUM(iTimeoutConnections) FROM NmsEmailErrorStat WHERE tsDate>=$(start ) AND tsDate<$(end ) GROUP BY iMXIP, iPublicId HAVING SUM(iTotalErrors) >= 20"
    
    
  2. Se muestra el mensaje de error de unión.
  3. Se crea una nueva conexión para eliminar todos los errores que se produjeron entre las fechas de inicio y finalización. Se utiliza la siguiente consulta:
    "DELETE FROM NmsEmailErrorStat WHERE tsDate>=$(start) AND tsDate<$(end)"
    
    
  4. Cada error se guarda en la tabla NmsEmailErrorStat mediante la siguiente consulta:
    "INSERT INTO NmsEmailErrorStat(iMXIP, iPublicId, tsDate, iTotalConnections, iTotalErrors, iTimeoutConnections, iRefusedConnections, iAbortedConnections, iFailedConnections, iMessageErrors) VALUES($(lmxip ), $(lpublicId ), $(tsstart ), $(lconnections ), $(lconnectionErrors ),$(ltimeoutConnections ), $(lrefusedConnections ), $(labortedConnections ), $(lfailedConnections ), $(lmessageErrors))"
    
    
    donde cada variable coincide con un valor recuperado por la consulta anterior.
  5. La variable start se actualiza con los valores del proceso anterior para finalizar el bucle.
El bucle y la parada de la tarea.
Las depuraciones se ejecutan en las tablas NmsEmailError y clearNmsMxDomain .

Limpieza de la tabla NmsEmailError

Se utiliza la siguiente consulta:
DELETE FROM NmsEmailError WHERE iMXIP NOT IN (SELECT DISTINCT iMXIP FROM NmsEmailErrorStat)

Esta consulta elimina todas las líneas sin registros vinculados de la tabla NmsEmailErrorStat de NmsEmailError .

Limpieza de la tabla NmsMxDomain

Se utiliza la siguiente consulta:
DELETE FROM NmsMxDomain WHERE iMXIP NOT IN (SELECT DISTINCT iMXIP FROM NmsEmailErrorStat)

Esta consulta elimina todas las líneas sin un registro vinculado en la tabla NmsEmailErrorStat de la tabla NmsMxDomain .

Limpieza de propuestas

Si el módulo Interacción está instalado, esta tarea se ejecuta para purgar las tablas NmsPropositionXxx .
La lista de tablas de proposiciones se recupera y la eliminación masiva se lleva a cabo en cada una de ellas, utilizando la siguiente consulta:
DELETE FROM NmsPropositionXxx WHERE iPropositionId IN (SELECT iPropositionId FROM NmsPropositionXxx WHERE tsLastModified < $(option) LIMIT 5000) 

donde $(option) es la fecha definida para la opción NmsCleanup_PropositionPurgeDelay (consulte el asistente Asistente de implementación de implementación).

Limpieza de tablas de simulación

Esta tarea limpia las tablas de simulación huérfanas (que ya no están vinculadas a una simulación de oferta o a una simulación de entrega).
  1. Para recuperar la lista de simulaciones que requieren limpieza, se utiliza la siguiente consulta:
    SELECT iSimulationId FROM NmsSimulation WHERE iSimulationId<>0
    
    
  2. El nombre de las tablas que se van a eliminar se compone del prefijo wkSimu_ seguido del identificador de la simulación (por ejemplo: wkSimu_456831_aggr ):
    DROP TABLE wkSimu_456831_aggr
    
    

Limpieza de pista de auditoría

Se utiliza la siguiente consulta:
DELETE FROM XtkAudit WHERE tsChanged < $(tsDate)

donde $(tsDate) es la fecha del servidor actual desde la que se sustrae el período definido para la opción XtkCleanup_AuditTrailPurgeDelay .

Limpieza de Nmsaddress

Se utiliza la siguiente consulta:
DELETE FROM NmsAddress WHERE iAddressId IN (SELECT iAddressId FROM NmsAddress WHERE iStatus=STATUS_QUARANTINE AND tsLastModified < $(NmsCleanup_AppSubscriptionRcpPurgeDelay + 5d) AND iType IN (MESSAGETYPE_IOS, MESSAGETYPE_ANDROID ) LIMIT 5000)

Esta consulta elimina todas las entradas relacionadas con iOS y Android.

Actualización de estadísticas y optimización del almacenamiento

La opción XtkCleanup_NoStats le permite controlar el comportamiento del paso de optimización del almacenamiento del flujo de trabajo de limpieza.
Si la opción XtkCleanup_NoStats no existe o si su valor es 0, se ejecutará la optimización del almacenamiento en modo detallado (VACUUM VERBOSE ANALYZE) en PostgreSQL y se actualizarán las estadísticas en todas las demás bases de datos. Para asegurarse de que este comando se ejecuta, compruebe los registros PostgreSQL. VACUUM generará líneas en formato: INFO: vacuuming "public.nmsactivecontact" y ANALYZE generará líneas en formato: INFO: analyzing "public.nmsactivecontact" .
Si el valor de la opción es 1, la actualización de estadísticas no se ejecuta en ninguna base de datos. La siguiente línea de registro aparecerá en los registros del flujo de trabajo: Option 'XtkCleanup_NoStats' is set to '1' .
Si el valor de la opción es 2, se ejecutará el análisis de almacenamiento en modo detallado (ANALYZE VERBOSE) en PostgreSQL y se actualizarán las estadísticas de todas las demás bases de datos. Para asegurarse de que este comando se ejecuta, compruebe los registros PostgreSQL. ANALYZE generará líneas en el formato: INFO: analyzing "public.nmsactivecontact" .

Limpieza de suscripciones (NMAC)

Esta tarea elimina las suscripciones relacionadas con servicios o aplicaciones móviles eliminados.
Para recuperar la lista de esquemas de registro extenso, se utiliza la siguiente consulta:
SELECT distinct(sBroadLogSchema) FROM NmsDeliveryMapping WHERE sBroadLogSchema IS NOT NULL

A continuación, la tarea recupera los nombres de las tablas vinculadas al vínculo appSubscription y elimina estas tablas.
Este flujo de trabajo de limpieza también elimina todas las entradas donde inhabilitado = 1 que no se hayan actualizado desde la hora establecida en la opción NmsCleanup_AppSubscriptionRcpPurgeDelay .

Información de sesión de limpieza

Esta tarea limpia la información de la tabla sessionInfo , se utiliza la siguiente consulta:
 DELETE FROM XtkSessionInfo WHERE tsexpiration < $(curdate) 

Limpieza de eventos caducados

Esta tarea limpia los eventos recibidos y almacenados en las instancias de ejecución y los eventos archivados en una instancia de control.

Reacciones de limpieza

Esta tarea elimina las reacciones (tabla NmsRemaMatchRcp ) en las que se han eliminado las hipótesis.