/* ====================================== ATUALIZAÇÃO DO SCRIPT DIABO VERDE V1.1.2 - Destinado à remoção de dados das tabelas do JBPM que possuem elevado índice de crescimento no volume de dados, sobre tudo a tabela public.jbpm_byteblock (contém registros sobre os fluxos implantados e dados binários para as variáveis de processo). Adaptado por: GEDES/DITEC/TJPB EM 05/04/2016 Arquivo no formato ISO-8859-1 - Script original disponível em: http://www.pje.jus.br/wiki//index.php/Guia_de_atendimento_para_Suporte_PJe#.22Tabela_public.jbpm_byteblock_com_tamanho_muito_grande.22 ====================================== */ DO $$ -- Um timestamp referente a 'X' dias anteriores à data atual (Pode-se considerar um período menor) DECLARE PERIODO_TERMINO CONSTANT TIMESTAMP := current_timestamp - interval '30' day; -- Mapeia apenas classe do tipo 'B' (Binário) da jbpm_variableinstance DECLARE VARIABLE_INSTANCE_BINARIO CONSTANT CHAR := 'B'; BEGIN RAISE NOTICE 'APLICANDO SCRIPT DIABO VERDE V1.1 - GEDES/TJPB EM: %', current_timestamp; RAISE NOTICE 'PASSO 1 - Iniciando remoção na public.jbpm_byteblock cujos process_instance encerraram antes de [%] e cuja classe do variable_instance seja [B] - Binário', PERIODO_TERMINO; DELETE FROM jbpm_byteblock bb WHERE EXISTS ( SELECT 1 FROM jbpm_variableinstance vi WHERE bb.processfile_ = vi.bytearrayvalue_ AND EXISTS( SELECT 1 FROM jbpm_processinstance pi WHERE pi.id_ = vi.processinstance_ AND pi.end_ <= (PERIODO_TERMINO) AND vi.class_ = (VARIABLE_INSTANCE_BINARIO) ) ); RAISE NOTICE 'PASSO 2 - Iniciando remoção na public.jbpm_byteblock cujos task_instance encerraram antes de [%] e cuja classe do variable_instance seja [B] - Binário', PERIODO_TERMINO; DELETE FROM jbpm_byteblock bb WHERE EXISTS( SELECT 1 FROM jbpm_variableinstance vi WHERE bb.processfile_ = vi.bytearrayvalue_ AND EXISTS( SELECT 1 FROM jbpm_taskinstance ti WHERE ti.id_ = vi.taskinstance_ AND ti.end_ <= (PERIODO_TERMINO) AND vi.class_ = (VARIABLE_INSTANCE_BINARIO) ) ); RAISE NOTICE 'PASSO 3 - Iniciando remoção na public.jbpm_byteblock cujos variableinstance possuem processinstance_ e taskinstance_ nulos, classe binária '; DELETE FROM jbpm_byteblock bb WHERE EXISTS( SELECT 1 FROM jbpm_variableinstance vi WHERE bb.processfile_ = vi.bytearrayvalue_ AND vi.class_ = (VARIABLE_INSTANCE_BINARIO) AND COALESCE(processinstance_,0) = 0 AND COALESCE(taskinstance_,0) = 0 ); RAISE NOTICE 'PASSO 4 - Iniciando remoção na public.jbpm_variableinstance cujos campos processinstance_ e taskinstance_ estão nulos '; DELETE FROM jbpm_variableinstance WHERE COALESCE(processinstance_,0) = 0 AND COALESCE(taskinstance_,0) = 0; RAISE NOTICE 'PASSO 5 - Iniciando remoção na public.jbpm_variableinstance cujos process_instance encerraram antes de [%] e cuja classe seja [B] - Binário', PERIODO_TERMINO; DELETE FROM jbpm_variableinstance va1 WHERE id_ in( SELECT va.id_ FROM jbpm_variableinstance va INNER JOIN jbpm_processinstance pi on pi.id_ = va.processinstance_ WHERE pi.end_ <= (PERIODO_TERMINO) AND va.class_ = (VARIABLE_INSTANCE_BINARIO) ); RAISE NOTICE 'PASSO 6 - Iniciando remoção na public.jbpm_taskinstance cujos process_instance encerraram antes de [%] e cuja classe seja [B] - Binário', PERIODO_TERMINO; DELETE FROM jbpm_variableinstance va1 WHERE id_ in( SELECT va.id_ FROM jbpm_variableinstance va INNER JOIN jbpm_taskinstance pi on pi.id_ = va.taskinstance_ WHERE pi.end_ <= (PERIODO_TERMINO) AND va.class_ = (VARIABLE_INSTANCE_BINARIO) ); RAISE NOTICE 'PASSO 7 - Iniciando remoção na core.tb_proc_localizacao_ibpm para as process_instance que não seja a atual existente na client.vs_situacao_processo_new'; DELETE FROM core.tb_proc_localizacao_ibpm p WHERE NOT EXISTS ( SELECT 1 FROM client.vs_situacao_processo_new vs WHERE vs.id_processo_trf = p.id_processo AND vs.id_process_instance = p.id_processinstance_jbpm AND vs.id_task = p.id_task_jbpm ); RAISE NOTICE 'PASSO 8 - Iniciando remoção na public.jbpm_bytearray cujos processfile_ da byteblock inexistem'; DELETE FROM jbpm_bytearray ba WHERE coalesce(filedefinition_,0) = 0 AND (NOT EXISTS (SELECT 1 FROM jbpm_byteblock bb WHERE bb.processfile_ = ba.id_) AND NOT EXISTS (SELECT 1 FROM jbpm_variableinstance va WHERE va.bytearrayvalue_ = ba.id_) AND NOT EXISTS (SELECT 1 FROM jbpm_log l WHERE l.newbytearray_ = ba.id_ AND l.oldbytearray_ = ba.id_)); RAISE NOTICE 'SCRIPT DIABO VERDE V1.1 APLICADO!'; END $$; /* ------------------------------------ [PROCEDIMENTO DE VACUUM E REINDEX] Após a aplicação do script, executar os procedimentos de VACUUM e REINDEX das tabelas jbpm_bytearray, jbpm_byteblock, jbpm_variableinstance core.tb_proc_localizacao_ibpm ------------------------------------ 1. VACUUM ( FULL ) jbpm_bytearray; 2. REINDEX INDEX jbpm_bytearray_filedefinition_idx; 3. VACUUM ( FULL ) jbpm_byteblock; 4. REINDEX INDEX jbpm_byteblock_processfile_idx; 5. VACUUM ( FULL ) jbpm_variableinstance; 6. REINDEX TABLE jbpm_variableinstance; 7. VACUUM ( FULL ) core.tb_proc_localizacao_ibpm; 8. REINDEX TABLE core.tb_proc_localizacao_ibpm */ ------------------------------------