Fluxo de trabalho de limpeza do banco de dados database-cleanup-workflow
Introdução introduction
O fluxo de trabalho Database cleanup acessível por meio do nó Administration > Production > Technical workflows, permite excluir dados obsoletos para evitar o crescimento exponencial do banco de dados. O fluxo de trabalho é acionado automaticamente sem a intervenção do usuário.
Configuração configuration
A limpeza do banco de dados é configurada em dois níveis: no agendador de workflow e no assistente de implantação.
Programador de workflow the-scheduler
Por padrão, o fluxo de trabalho Database cleanup é configurado para iniciar diariamente às 4h. O scheduler permite alterar a frequência de acionamento do workflow. As seguintes frequências estão disponíveis:
- Several times a day
- Daily
- Weekly
- Once
assistente de implantação deployment-assistant
O deployment wizard, acessado por meio do menu Tools > Advanced, permite configurar por quanto tempo os dados são salvos. Os valores são expressos em dias. Se esses valores não forem alterados, o workflow usará os valores padrão.
Os campos da janela Purge of data coincidem com as opções a seguir. Estes são usados por algumas das tarefas executadas pelo fluxo de trabalho Database cleanup:
-
Rastreamento consolidado: NmsCleanup_TrackingStatPurgeDelay (consulte Limpeza de logs de rastreamento)
-
Logs de entrega: NmsCleanup_BroadLogPurgeDelay (consulte Limpeza de logs de entrega)
-
Logs de rastreamento: NmsCleanup_TrackingLogPurgeDelay (consulte Limpeza de logs de rastreamento)
-
Deliveries excluídos: NmsCleanup_RecycledDeliveryPurgeDelay (consulte Limpeza de deliveries a serem excluídos ou reciclados)
-
Importação de rejeições: NmsCleanup_RejectsPurgeDelay (consulte Limpeza de rejeições geradas por importações)
-
Perfis do visitante: NmsCleanup_VisitorPurgeDelay (consulte Limpeza de visitantes)
-
Apresentações da oferta: NmsCleanup_PropositionPurgeDelay (consulte Limpeza de apresentações)
note note NOTE O campo Offer propositions só está disponível quando o módulo Interaction está instalado. -
Eventos: NmsCleanup_EventPurgeDelay (consulte Eventos expirados de limpeza)
-
Eventos arquivados: NmsCleanup_EventHistoPurgeDelay (consulte Eventos expirados de limpeza)
note note NOTE Os campos Events e Archived events só estarão disponíveis se o módulo Centro de Mensagens estiver instalado. -
Trilha de auditoria: XtkCleanup_AuditTrailPurgeDelay (consulte Limpeza da Trilha de auditoria)
Todas as tarefas executadas pelo fluxo de trabalho Database cleanup estão descritas na seção a seguir.
Tarefas realizadas pelo workflow de limpeza do banco de dados tasks-carried-out-by-the-database-cleanup-workflow
Na data e hora definidas no agendador do fluxo de trabalho (consulte O agendador), o mecanismo de fluxo de trabalho inicia o processo de limpeza do banco de dados. A Limpeza do banco de dados se conecta ao banco de dados e executa as tarefas na sequência mostrada abaixo.
Listas para excluir a limpeza lists-to-delete-cleanup
A primeira tarefa executada pelo fluxo de trabalho Database cleanup exclui todos os grupos com deleteStatus != 0 atributo de NmsGroup. Os registros vinculados a esses grupos e que existem em outras tabelas também são excluídos.
-
As listas a serem excluídas são recuperadas usando a seguinte consulta SQL:
code language-sql SELECT iGroupId, sLabel, iType FROM NmsGroup WHERE iDeleteStatus <> 0 OR tsExpirationDate <= GetDate()
-
Cada lista tem vários links para outras tabelas. Todos esses links são excluídos em massa usando a seguinte query:
code language-sql DELETE FROM $(relatedTable) WHERE iGroupId=$(l) IN (SELECT iGroupId FROM $(relatedTable) WHERE iGroupId=$(l) LIMIT 5000)
onde
$(relatedTable)
é uma tabela relacionada a NmsGroup e$(l)
é o identificador da lista. -
Quando a lista é do tipo "Lista", a tabela associada é excluída usando a seguinte query:
code language-sql DROP TABLE grp$(l)
-
A cada lista de tipos Select recuperada pela operação é excluída usando a seguinte consulta:
code language-sql DELETE FROM NmsGroup WHERE iGroupId=$(l)
onde
$(l)
é o identificador da lista
Limpeza de entregas a serem excluídas ou recicladas cleanup-of-deliveries-to-be-deleted-or-recycled
Esta tarefa limpa todos os deliveries a serem excluídos ou reciclados.
-
O fluxo de trabalho Database cleanup seleciona todas as entregas para as quais o campo deleteStatus tem o valor Yes ou Recycled e cuja data de exclusão é anterior ao período definido no campo Deleted deliveries (NmsCleanup_RecycledDeliveryPurgeDelay) do assistente de implantação. Para obter mais informações, consulte assistente de implantação. Este período é calculado em relação à data atual do servidor.
-
Para cada servidor mid-sourcing, a tarefa seleciona a lista de deliveries a serem excluídos.
-
O fluxo de trabalho Database cleanup exclui logs de entrega, anexos, informações de mirror page e todos os outros dados relacionados.
-
Antes de excluir o delivery definitivamente, o workflow limpa as informações vinculadas das seguintes tabelas:
-
Na tabela de exclusão de entrega (NmsDlvExclusion), a seguinte consulta é usada:
code language-sql DELETE FROM NmsDlvExclusion WHERE iDeliveryId=$(l)
onde $(l) é o identificador da entrega.
-
Na tabela de cupons (NmsCouponValue), a seguinte consulta é usada (com exclusões em massa):
code language-sql 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)
onde
$(l)
é o identificador da entrega. -
Nas tabelas de log de entrega (NmsBroadlogXxx), exclusões em massa são executadas em lotes de 20.000 registros.
-
Nas tabelas de apresentação de ofertas (NmsPropositionXxx), exclusões em massa são executadas em lotes de 20.000 registros.
-
Nas tabelas de log de rastreamento (NmsTrackinglogXxx), exclusões em massa são executadas em lotes de 20.000 registros.
-
Na tabela de fragmentos de entrega (NmsDeliveryPart), exclusões em massa são executadas em lotes de 500.000 registros. Esta tabela contém informações de personalização sobre as mensagens restantes a serem entregues.
-
Na tabela de fragmento de dados da mirror page (NmsMirrorPageInfo), as exclusões em massa são executadas em lotes de 20.000 registros para partes de entrega expiradas e para partes concluídas ou canceladas. Esta tabela contém informações de personalização de todas as mensagens usadas para gerar mirror pages.
-
Na tabela de pesquisa da mirror page (NmsMirrorPageSearch), exclusões em massa são executadas em lotes de 20.000 registros. Esta tabela é um índice de pesquisa que fornece acesso às informações de personalização armazenadas na tabela NmsMirrorPageInfo.
-
Na tabela de log do processo em lote (XtkJobLog), exclusões em massa são executadas em lotes de 20.000 registros. Esta tabela contém o log de deliveries a serem excluídos.
-
Na tabela de rastreamento de URL de entrega (NmsTrackingUrl), a seguinte consulta é usada:
code language-sql DELETE FROM NmsTrackingUrl WHERE iDeliveryId=$(l)
onde
$(l)
é o identificador da entrega.Esta tabela contém os URLs encontrados nos deliveries a serem excluídos para ativar o rastreamento.
-
-
A entrega foi excluída da tabela de entrega (NmsDelivery):
code language-sql DELETE FROM NmsDelivery WHERE iDeliveryId = $(l)
onde
$(l)
é o identificador da entrega.
Entregas usando mid-sourcing deliveries-using-mid-sourcing
O fluxo de trabalho Database cleanup também exclui entregas no(s) servidor(es) mid-sourcing.
-
Para fazer isso, o workflow verifica se cada delivery está inativo (com base em seu status ). Se um delivery estiver ativo, ele será interrompido antes de ser excluído. A verificação é realizada executando a seguinte query:
code language-sql SELECT iState FROM NmsDelivery WHERE iDeliveryId = $(l) AND iState <> 100;
onde $(l) é o identificador da entrega.
-
Se o valor do status for Start pending , In progress , Recovery pending , Recovery in progress , Pause requested , Pause in progress ou Paused (valores 51, 55, 61, 62, 71, 72, 75), a entrega será interrompida e a tarefa limpará as informações vinculadas.
Limpeza de entregas expiradas cleanup-of-expired-deliveries
Esta tarefa interrompe os deliveries cujo período de validade expirou.
-
O fluxo de trabalho Database cleanup cria a lista de entregas que expiraram. Esta lista inclui todas as entregas expiradas com status diferente de Finished, bem como entregas interrompidas recentemente com mais de 10.000 mensagens não processadas. A seguinte query é usada:
code language-sql 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 ))
onde
delivery mode 1
corresponde ao modo Mass delivery,state 51
corresponde ao estado Start pending,state 85
corresponde ao estado Stopped e o número mais alto de logs de entrega atualizados em massa no servidor de entrega é igual a 10.000. -
O workflow inclui a lista de deliveries expirados recentemente que usam mid-sourcing. Os deliveries para os quais nenhum log de delivery ainda foi recuperado por meio do servidor mid-sourcing são excluídos.
A seguinte query é usada:
code language-sql 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))
-
A consulta a seguir é usada para detectar se a conta externa ainda está ativa ou não, para filtrar deliveries por data:
code language-sql SELECT iExtAccountId FROM NmsExtAccount WHERE iActive<>0 AND sName=$(providerName)
-
Na lista de entregas expiradas, os logs de entrega cujo status é Pending , alternam para Delivery cancelled e todas as entregas nessa lista alternam para Finished .
As seguintes queries são usadas:
code language-sql UPDATE $(BroadLogTableName) SET tsLastModified=$(curdate), iStatus=7, iMsgId=$(bl) WHERE iDeliveryId=$(dl) AND iStatus=6
onde
$(curdate)
é a data atual do servidor de banco de dados,$(bl)
é o identificador da mensagem dos logs de entrega,$(dl)
é o identificador de entrega,delivery status 6
corresponde ao status Pending edelivery status 7
corresponde ao status Delivery cancelled.code language-sql UPDATE NmsDelivery SET iState = 95, tsLastModified = $(curdate), tsBroadEnd = tsValidity WHERE iDeliveryId = $(dl)
onde
delivery state 95
corresponde ao status Finished e$(dl)
é o identificador da entrega. -
Todos os fragmentos (deliveryParts) de entregas obsoletas são excluídos e todos os fragmentos obsoletos de entregas de notificação em andamento são excluídos. A exclusão em massa é usada para essas tarefas.
As seguintes queries são usadas:
code language-sql 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)
code language-sql DELETE FROM NmsDeliveryPart WHERE iDeliveryPartId IN (SELECT iDeliveryPartId FROM NmsDeliveryPart WHERE tsValidity < $(curDate) LIMIT 500000)
onde
delivery state 95
corresponde ao status Finished,delivery state 85
corresponde ao status Stopped e$(curDate)
é a data atual do servidor.
Limpeza de mirror pages cleanup-of-mirror-pages
Essa tarefa exclui os recursos da Web (mirror pages) usados pelos deliveries.
-
Primeiro, a lista de deliveries a serem removidos é recuperada usando a seguinte query:
code language-sql SELECT iDeliveryId, iNeedMirrorPage FROM NmsDelivery WHERE iWebResPurged = 0 AND tsWebValidity IS NOT NULL AND tsWebValidity < $(curdate)
onde
$(curDate)
é a data atual do servidor. -
A tabela NmsMirrorPageInfo é então removida, se necessário, usando o identificador da entrega recuperada anteriormente. A exclusão em massa é usada para gerar as seguintes consultas:
code language-sql DELETE FROM NmsMirrorPageInfo WHERE iMirrorPageInfoId IN (SELECT iMirrorPageInfoId FROM NmsMirrorPageInfo WHERE iDeliveryId = $(dl)) LIMIT 5000
code language-sql DELETE FROM NmsMirrorPageSearch WHERE iMessageId IN (SELECT iMessageId FROM NmsMirrorPageSearch WHERE iDeliveryId = $(dl)) LIMIT 5000
onde
$(dl)
é o identificador da entrega. -
Uma entrada é adicionada ao log de delivery.
-
Os deliveries removidos são identificados para evitar a necessidade de reprocessá-los posteriormente. A seguinte consulta é executada:
code language-sql UPDATE NmsDelivery SET iWebResPurged = 1 WHERE iDeliveryId IN ($(strIn))
onde
$(strIn)
é a lista de identificadores de entrega.
Limpeza de tabelas de trabalho cleanup-of-work-tables
Esta tarefa exclui do banco de dados todas as tabelas de trabalho que correspondem a entregas cujo status é Being edited , Stopped ou Deleted.
-
A lista de tabelas com nomes começando com wkDlv_ é recuperada primeiro com a seguinte consulta (postgresql):
code language-sql SELECT relname FROM pg_class WHERE relname LIKE Lower('wkDlv_%') ESCAPE E'\\' AND relkind IN ('r','v') AND pg_get_userbyid(relowner)<>'postgres'
-
As tabelas usadas por workflows em andamento são excluídas. Para fazer isso, a lista de deliveries em andamento é recuperada usando a seguinte query:
code language-sql SELECT iDeliveryId FROM NmsDelivery WHERE iDeliveryId<>0 AND iDeleteStatus=0 AND iState NOT IN (0,85,100);
onde
0
é o valor que corresponde ao status de entrega Being edited,85
corresponde ao status Stopped e100
corresponde ao status Deleted. -
As tabelas que não são mais usadas serão excluídas usando a seguinte query:
code language-sql DROP TABLE wkDlv_15487_1;
Limpeza de rejeições geradas por importações cleanup-of-rejects-generated-by-imports-
Essa etapa permite excluir registros cujos dados não foram processados durante a importação.
-
A exclusão em massa é realizada na tabela XtkReject com a seguinte consulta:
code language-sql DELETE FROM XtkReject WHERE iRejectId IN (SELECT iRejectId FROM XtkReject WHERE tsLog < $(curDate)) LIMIT $(l)
onde
$(curDate)
é a data atual do servidor da qual subtraímos o período definido para a opção NmsCleanup_RejectsPurgeDelay (consulte assistente de implantação) e$(l)
é o número máximo de registros a serem excluídos em massa. -
Todas as rejeições órfãs são excluídas usando a seguinte query:
code language-sql DELETE FROM XtkReject WHERE iJobId NOT IN (SELECT iJobId FROM XtkJob)
Limpeza de instâncias de fluxo de trabalho cleanup-of-workflow-instances
Esta tarefa limpa cada instância de fluxo de trabalho usando seu identificador (lWorkflowId) e histórico (lHistory). Ele exclui tabelas inativas executando a tarefa de limpeza da tabela de trabalho novamente. A limpeza também exclui todas as tabelas de trabalho órfãs (wkf% e wkfhisto%) dos fluxos de trabalho excluídos.
-
Para recuperar a lista de workflows a serem excluídos, a seguinte query é usada:
code language-sql SELECT iWorkflowId, iHistory FROM XtkWorkflow WHERE iWorkflowId<>0
-
Essa consulta gera a lista de workflows que será usada para excluir todos os logs vinculados, tarefas concluídas e eventos concluídos, usando as seguintes consultas:
code language-sql DELETE FROM XtkWorkflowLog WHERE iWorkflowId=$(lworkflow) AND tsLog < DateMinusDays($(lhistory))
code language-sql DELETE FROM XtkWorkflowTask WHERE iWorkflowId=$(lworkflow) AND iStatus<>0 AND tsCompletion < DateMinusDays($(lhistory))
code language-sql DELETE FROM XtkWorkflowEvent WHERE iWorkflowId=$(l) AND iStatus>2 AND tsProcessing < DateMinusDays($(lHistory))
onde
$(lworkflow)
é o identificador do fluxo de trabalho e$(lhistory)
é o identificador do histórico. -
Todas as tabelas não utilizadas são excluídas. Para esta finalidade, todas as tabelas são coletadas graças a uma máscara do tipo wkf% usando a seguinte query (postgresql):
code language-sql SELECT relname FROM pg_class WHERE relname LIKE Lower('wkf%') ESCAPE E'\\' AND relkind IN ('r','v') AND pg_get_userbyid(relowner)<>'postgres'
-
Em seguida, todas as tabelas usadas por uma instância de workflow pendente são excluídas. A lista de workflows ativos é recuperada usando a seguinte query:
code language-sql SELECT iWorkflowId FROM XtkWorkflow WHERE iWorkflowId<>0 AND iState<>20
-
Cada identificador de workflow é então recuperado para encontrar o nome das tabelas usadas pelos workflows em andamento. Esses nomes são excluídos da lista de tabelas recuperadas anteriormente.
-
as tabelas de histórico de atividades do tipo "consulta incremental" são excluídas usando as seguintes consultas:
code language-sql SELECT relname FROM pg_class WHERE relname LIKE Lower('wkfhisto%') ESCAPE E'\\' AND relkind IN ('r','v') AND pg_get_userbyid(relowner)<>'postgres'
code language-sql SELECT iWorkflowId FROM XtkWorkflow WHERE iWorkflowId IN ($(strCondition))
onde
$(strcondition)
é a lista de tabelas que correspondem à máscara wkfhisto%. -
As tabelas restantes são excluídas usando a seguinte query:
code language-sql DROP TABLE wkf15487_12;
Limpeza de logons do fluxo de trabalho cleanup-of-workflow-logins
Essa tarefa exclui logons de fluxo de trabalho usando a seguinte query:
DELETE FROM XtkWorkflowLogin WHERE iWorkflowId NOT IN (SELECT iWorkflowId FROM XtkWorkflow)
Limpeza de tabelas de trabalho órfãs cleanup-of-orphan-work-tables
Esta tarefa exclui tabelas de trabalho órfãs vinculadas a grupos. A tabela NmsGroup armazena os grupos a serem limpos (com um tipo diferente de 0). O prefixo dos nomes de tabela é grp. Para identificar os grupos a serem limpos, a seguinte consulta é usada:
SELECT iGroupId FROM NmsGroup WHERE iType>0"
Limpeza de visitantes cleanup-of-visitors
Essa tarefa exclui registros obsoletos da tabela de visitantes usando a exclusão em massa. Registros obsoletos são aqueles para os quais a última modificação é anterior ao período de conservação definido no assistente de implantação (consulte assistente de implantação). A seguinte query é usada:
DELETE FROM NmsVisitor WHERE iVisitorId IN (SELECT iVisitorId FROM NmsVisitor WHERE iRecipientId = 0 AND tsLastModified < AddDays(GetDate(), -30) AND iOrigin = 0 LIMIT 20000)
onde $(tsDate)
é a data atual do servidor, da qual subtraímos o período definido para a opção NmsCleanup_VisitorPurgeDelay.
Limpeza da NPAI cleanup-of-npai
Esta tarefa permite excluir registros que correspondem a endereços válidos da tabela NmsAddress. A consulta a seguir é usada para executar a exclusão em massa:
DELETE FROM NmsAddress WHERE iAddressId IN (SELECT iAddressId FROM NmsAddress WHERE iStatus=2 AND tsLastModified < $(tsDate1) AND tsLastModified >= $(tsDate2) LIMIT 5000)
onde status 2
corresponde ao status Valid, $(tsDate1)
é a data atual do servidor e $(tsDate2)
corresponde à opção NmsCleanup_LastCleanup.
Limpeza de assinaturas cleanup-of-subscriptions-
Esta tarefa limpa todas as assinaturas excluídas pelo usuário da tabela NmsSubscription, usando a exclusão em massa. A seguinte query é usada:
DELETE FROM NmsSubscription WHERE iDeleteStatus <>0
Limpeza de logs de rastreamento cleanup-of-tracking-logs
Essa tarefa exclui registros obsoletos das tabelas de log de rastreamento e de rastreamento Web. Os registros obsoletos são aqueles que são anteriores ao período de conservação definido no assistente de implantação (consulte assistente de implantação).
-
Primeiro, a lista de tabelas de log de rastreamento é recuperada usando a seguinte query:
code language-sql SELECT distinct(sTrackingLogSchema) FROM NmsDeliveryMapping WHERE sTrackingLogSchema IS NOT NULL;
-
A exclusão em massa é usada para limpar todas as tabelas na lista de tabelas recuperadas anteriormente. A seguinte query é usada:
code language-sql DELETE FROM NmsTrackingLogRcp WHERE iTrackingLogId IN (SELECT iTrackingLogId FROM NmsTrackingLogRcp WHERE tsLog < $(tsDate) LIMIT 5000)
onde
$(tsDate)
é a data atual do servidor da qual subtraímos o período definido para a opção NmsCleanup_TrackingLogPurgeDelay. -
A tabela de estatísticas de rastreamento é removida usando a exclusão em massa. A seguinte query é usada:
code language-sql DELETE FROM NmsTrackingStats WHERE iTrackingStatsId IN (SELECT iTrackingStatsId FROM NmsTrackingStats WHERE tsStart < $(tsDate) LIMIT 5000)
onde
$(tsDate)
é a data atual do servidor da qual subtraímos o período definido para a opção NmsCleanup_TrackingStatPurgeDelay.
Limpeza de logs de entrega cleanup-of-delivery-logs
Essa tarefa permite limpar os logs de delivery armazenados em várias tabelas.
-
Para essa finalidade, a lista de schemas de log de delivery é recuperada usando a seguinte query:
code language-sql SELECT distinct(sBroadLogSchema) FROM NmsDeliveryMapping WHERE sBroadLogSchema IS NOT NULL UNION SELECT distinct(sBroadLogExclSchema) FROM NmsDeliveryMapping WHERE sBroadLogExclSchema IS NOT NULL
-
Ao usar mid-sourcing, a tabela NmsBroadLogMid não é referenciada nos mapeamentos de entrega. O esquema nms:broadLogMid foi adicionado à lista recuperada pela consulta anterior.
-
O fluxo de trabalho Limpeza do banco de dados limpa dados obsoletos de tabelas recuperadas anteriormente. A seguinte query é usada:
code language-sql DELETE FROM $(tableName) WHERE iBroadLogId IN (SELECT iBroadLogId FROM $(tableName) WHERE tsLastModified < $(option) LIMIT 5000)
onde
$(tableName)
é o nome de cada tabela na lista de esquemas e$(option)
é a data definida para a opção NmsCleanup_BroadLogPurgeDelay (consulte o assistente de implantação). -
Finalmente, o fluxo de trabalho verifica se a tabela NmsProviderMsgId existe. Em caso afirmativo, todos os dados obsoletos são excluídos usando a seguinte query:
code language-sql DELETE FROM NmsProviderMsgId WHERE iBroadLogId IN (SELECT iBroadLogId FROM NmsProviderMsgId WHERE tsCreated < $(option) LIMIT 5000)
onde
$(option)
corresponde à data definida para a opção NmsCleanup_BroadLogPurgeDelay (consulte assistente de implantação).
Limpeza da tabela NmsEmailErrorStat cleanup-of-the-nmsemailerrorstat-table-
Esta tarefa limpa a tabela NmsEmailErrorStat. O programa principal (coalesceErrors) define duas datas:
- Data de início: data do próximo processo que corresponde à opção NmsLastErrorStatCoalesce ou à data mais recente na tabela.
- Data final: data atual do servidor.
Se a data de início for posterior ou igual à data de término, nenhum processo será executado. Nesse caso, a mensagem coalesceUpToDate é exibida.
Se a data de início for anterior à data de término, a tabela NmsEmailErrorStat será limpa.
O número total de erros na tabela NmsEmailErrorStat, entre as datas de início e término, é recuperado com a seguinte consulta:
SELECT COUNT(*) FROM NmsEmailErrorStat WHERE tsDate>= $(start) AND tsDate< $(end)
onde $end
e $start
são as datas de início e término definidas anteriormente.
Se o total for maior que 0:
-
A seguinte consulta é executada para manter somente os erros além de um determinado limite (que é igual a 20):
code language-sql 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
-
A mensagem coalescingErrors é exibida.
-
Uma nova conexão é criada para excluir todos os erros que ocorreram entre as datas de início e término. A seguinte query é usada:
code language-sql DELETE FROM NmsEmailErrorStat WHERE tsDate>=$(start) AND tsDate<$(end)
-
Cada erro é salvo na tabela NmsEmailErrorStat usando esta consulta:
code language-sql INSERT INTO NmsEmailErrorStat(iMXIP, iPublicId, tsDate, iTotalConnections, iTotalErrors, iTimeoutConnections, iRefusedConnections, iAbortedConnections, iFailedConnections, iMessageErrors) VALUES($(lmxip ), $(lpublicId ), $(tsstart ), $(lconnections ), $(lconnectionErrors ),$(ltimeoutConnections ), $(lrefusedConnections ), $(labortedConnections ), $(lfailedConnections ), $(lmessageErrors))
onde cada variável corresponde a um valor recuperado pela consulta anterior.
-
A variável start foi atualizada com os valores do processo anterior para concluir o loop.
O loop e a interrupção da tarefa.
As limpezas são executadas nas tabelas NmsEmailError e cleanupNmsMxDomain.
Limpeza da tabela NmsEmailError cleanup-of-the-nmsemailerror-table-
A seguinte query é usada:
DELETE FROM NmsEmailError WHERE iMXIP NOT IN (SELECT DISTINCT iMXIP FROM NmsEmailErrorStat)
Esta consulta exclui todas as linhas sem registros vinculados em NmsEmailErrorStat da tabela NmsEmailError.
Limpeza da tabela NmsMxDomain cleanup-of-the-nmsmxdomain-table-
A seguinte query é usada:
DELETE FROM NmsMxDomain WHERE iMXIP NOT IN (SELECT DISTINCT iMXIP FROM NmsEmailErrorStat)
Esta consulta exclui todas as linhas sem um registro vinculado na tabela NmsEmailErrorStat da tabela NmsMxDomain.
Limpeza de apresentações cleanup-of-propositions
Se o módulo Interaction estiver instalado, esta tarefa será executada para limpar as tabelas NmsPropositionXxx.
A lista de tabelas de apresentações é recuperada e a exclusão em massa é realizada em cada uma, usando a seguinte query:
DELETE FROM NmsPropositionXxx WHERE iPropositionId IN (SELECT iPropositionId FROM NmsPropositionXxx WHERE tsLastModified < $(option) LIMIT 5000)
onde $(option)
é a data definida para a opção NmsCleanup_PropositionPurgeDelay (consulte assistente de implantação).
Limpeza de tabelas de simulação cleanup-of-simulation-tables
Essa tarefa limpa as tabelas de simulação órfãs (que não estão mais vinculadas a uma simulação de oferta ou de delivery).
-
Para recuperar a lista de simulações que exigem limpeza, a seguinte consulta é usada:
code language-sql SELECT iSimulationId FROM NmsSimulation WHERE iSimulationId<>0
-
O nome das tabelas a serem excluídas é composto do prefixo wkSimu_ seguido pelo identificador da simulação (por exemplo: wkSimu_456831_aggr):
code language-sql DROP TABLE wkSimu_456831_aggr
Limpeza da Trilha de auditoria cleanup-of-audit-trail
A seguinte query é usada:
DELETE FROM XtkAudit WHERE tsChanged < $(tsDate)
onde $(tsDate) é a data atual do servidor a partir da qual o período definido para a opção XtkCleanup_AuditTrailPurgeDelay é subtraído.
Limpeza de Nmsaddress cleanup-of-nmsaddress
A seguinte query é usada:
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)
Essa consulta exclui todas as entradas relacionadas ao iOS e Android.
Atualização de estatísticas e otimização de armazenamento statistics-update
A opção XtkCleanup_NoStats permite controlar o comportamento da etapa de otimização de armazenamento do fluxo de trabalho de limpeza.
Se a opção XtkCleanup_NoStats não existir ou se seu valor for 0, ela executará a otimização de armazenamento no modo detalhado (VACUUM VERBOSE ANALYZE) no PostgreSQL e atualizará as estatísticas em todos os outros bancos de dados. Para garantir que esse comando seja executado, verifique os logs do PostgreSQL. O VACUUM gerará linhas no formato: INFO: vacuuming "public.nmsactivecontact"
e o ANALYZE gerará linhas no formato: INFO: analyzing "public.nmsactivecontact"
.
Se o valor da opção for 1, a atualização de estatísticas não será executada em nenhum banco de dados. A seguinte linha de log aparecerá nos logs de fluxo de trabalho: Option 'XtkCleanup_NoStats' is set to '1'
.
Se o valor da opção for 2, isso executará a análise de armazenamento no modo detalhado (ANALYZE VERBOSE) no PostgreSQL e atualizará as estatísticas em todos os outros bancos de dados. Para garantir que esse comando seja executado, verifique os logs do PostgreSQL. ANALYZE gerará linhas no formato: INFO: analyzing "public.nmsactivecontact"
.
Limpeza de assinatura (NMAC) subscription-cleanup--nmac-
Esta tarefa exclui todas as assinaturas relacionadas a serviços ou aplicativos móveis excluídos.
Para recuperar a lista de schemas de broadlog, a seguinte consulta é usada:
SELECT distinct(sBroadLogSchema) FROM NmsDeliveryMapping WHERE sBroadLogSchema IS NOT NULL
A tarefa recupera os nomes das tabelas vinculadas ao link appSubscription e exclui essas tabelas.
Esse fluxo de trabalho de limpeza também exclui todas as entradas em que está desabilitado = 1 que não foram atualizadas desde a hora definida na opção NmsCleanup_AppSubscriptionRcpPurgeDelay.
Informações da sessão de limpeza cleansing-session-information
Esta tarefa limpa informações da tabela sessionInfo. A seguinte consulta é usada:
DELETE FROM XtkSessionInfo WHERE tsexpiration < $(curdate)
Limpeza de eventos expirados cleansing-expired-events
Essa tarefa limpa os eventos recebidos e armazenados nas instâncias de execução e os eventos arquivados em uma instância de controle.
Reações de limpeza cleansing-reactions
Esta tarefa limpa as reações (tabela NmsRemaMatchRcp) nas quais a própria hipótese foi excluída.