explain.depesz.com

PostgreSQL's explain analyze made readable

Result: fnUX

Settings
# exclusive inclusive rows x rows loops node
1. 0.000 110,928.613 ↑ 109,251,299.8 23 1

CTE Scan on info_execucoes_tarefa (cost=23,999,283,332.36..26,512,063,228.36 rows=2,512,779,896 width=597) (actual time=110,928.554..110,928.613 rows=23 loops=1)

  • Output: info_execucoes_tarefa.status, info_execucoes_tarefa.detalhe_status, info_execucoes_tarefa.data_disparo, info_execucoes_tarefa.permite_encadeamento, info_execucoes_tarefa.progresso, info_execucoes_tarefa.execucao_id
2.          

CTE apenas_execucoes_validas_para_busca_status

3. 7.319 7.319 ↑ 491,314,163.0 1 1

Unique (cost=15,922,140,959.81..19,361,340,100.81 rows=491,314,163 width=1,130) (actual time=7.319..7.319 rows=1 loops=1)

4. 2.441 2.441 ↑ 991.0 1 1

Recursive Union (cost=86.00..12,106.91 rows=991 width=116) (actual time=2.388..2.441 rows=1 loops=1)

5. 110,928.593 110,928.593 ↑ 109,251,299.8 23 1

Merge Join (cost=789,119,973.64..4,637,818,591.22 rows=2,512,779,896 width=29) (actual time=110,928.550..110,928.593 rows=23 loops=1)

6. 0.000 7.269 ↑ 991.0 1 1

GroupAggregate (cost=104,109.92..112,533.42 rows=991 width=58) (actual time=7.268..7.269 rows=1 loops=1)

  • Output: string_agg((execucao.id)::text, ','::text), max(execucao.id), ((count(DISTINCT execucao.status) > 1) AND (count(DISTINCT execucao.execucao_de_fluxo_id) = 1)), ((count(DISTINCT execucao.id) > 1) AND (count(DISTINCT execucao.execucao_de_fluxo_id) = 1)), execucao_fluxo.executavel_id, execucao.executavel_id
  • Output: execucao_valida_para_busca_status.id, execucao_valida_para_busca_status.version, execucao_valida_para_busca_status.date_created, execucao_valida_para_busca_status.id_usuario, execucao_valida_para_busca_status.manual, execucao_valida_para_busca_status.execucao_de_fluxo_id, execucao_valida_para_busca_status.status, execucao_valida_para_busca_status.class, execucao_valida_para_busca_status.executavel_id, execucao_valida_para_busca_status.detalhe_status, execucao_valida_para_busca_status.concluida, execucao_valida_para_busca_status.agendamento_id, execucao_valida_para_busca_status.estrategia_contingencia_id
  • Output: evento_de_tarefa.status, evento_de_tarefa.detalhe_status, evento_de_tarefa.data_disparo, evento_de_tarefa.permite_encadeamento, evento_de_tarefa.progresso, evento_de_tarefa.execucao_id
  • Merge Cond: (evento_de_tarefa.execucao_id = execucao_1.id)
  • Group Key: execucao_fluxo.executavel_id, execucao.executavel_id
7. 7.383 7.383 ↑ 2,456,571.0 1 1

Sort (cost=789,119,860.64..790,348,146.14 rows=2,456,571 width=8) (actual time=7.379..7.383 rows=1 loops=1)

8. 7.318 7.318 ↑ 491,314,163.0 1 1

Sort (cost=15,922,140,959.81..16,167,798,041.31 rows=491,314,163 width=1,130) (actual time=7.318..7.318 rows=1 loops=1)

9. 7.220 7.220 ↑ 991.0 1 1

Sort (cost=104,109.92..104,605.42 rows=991 width=548) (actual time=7.219..7.220 rows=1 loops=1)

10. 0.051 0.051 ↓ 0.0 0 1

Nested Loop (cost=86.00..1,102.54 rows=99 width=116) (actual time=0.050..0.051 rows=0 loops=1)

11. 102,800.443 102,800.443 ↑ 1.0 50,901,040 1

Index Scan using idx_evento_execucao_id_idx on public.evento evento_de_tarefa (cost=113.00..54,025,905.08 rows=51,005,963 width=29) (actual time=0.789..102,800.443 rows=50,901,040 loops=1)

12. 0.000 2.379 ↑ 1.0 1 1

Index Scan using execucao_pkey on public.execucao execucao_raiz (cost=86.00..90.50 rows=1 width=116) (actual time=2.376..2.379 rows=1 loops=1)

  • Sort Method: quicksort Memory: 25kB
  • Sort Method: quicksort Memory: 25kB
  • Sort Method: quicksort Memory: 25kB
  • Sort Key: execucao_valida_para_busca_status.id, execucao_valida_para_busca_status.version, execucao_valida_para_busca_status.date_created, execucao_valida_para_busca_status.id_usuario, execucao_valida_para_busca_status.manual, execucao_valida_para_busca_status.execucao_de_fluxo_id, execucao_valida_para_busca_status.status, execucao_valida_para_busca_status.class, execucao_valida_para_busca_status.executavel_id, execucao_valida_para_busca_status.detalhe_status, execucao_valida_para_busca_status.concluida, execucao_valida_para_busca_status.agendamento_id, execucao_valida_para_busca_status.estrategia_contingencia_id
  • Sort Key: execucao_fluxo.executavel_id NULLS FIRST, execucao.executavel_id DESC
  • Sort Key: execucao_1.id
  • Output: execucao_valida_para_busca_status.id, execucao_valida_para_busca_status.version, execucao_valida_para_busca_status.date_created, execucao_valida_para_busca_status.id_usuario, execucao_valida_para_busca_status.manual, execucao_valida_para_busca_status.execucao_de_fluxo_id, execucao_valida_para_busca_status.status, execucao_valida_para_busca_status.class, execucao_valida_para_busca_status.executavel_id, execucao_valida_para_busca_status.detalhe_status, execucao_valida_para_busca_status.concluida, execucao_valida_para_busca_status.agendamento_id, execucao_valida_para_busca_status.estrategia_contingencia_id
  • Output: execucao_raiz.id, execucao_raiz.version, execucao_raiz.date_created, execucao_raiz.id_usuario, execucao_raiz.manual, execucao_raiz.execucao_de_fluxo_id, execucao_raiz.status, execucao_raiz.class, execucao_raiz.executavel_id, execucao_raiz.detalhe_status, execucao_raiz.concluida, execucao_raiz.agendamento_id, execucao_raiz.estrategia_contingencia_id
  • Output: execucao_fluxo.executavel_id, execucao.executavel_id, execucao.id, execucao.status, execucao.execucao_de_fluxo_id
  • Output: execucao_filha.id, execucao_filha.version, execucao_filha.date_created, execucao_filha.id_usuario, execucao_filha.manual, execucao_filha.execucao_de_fluxo_id, execucao_filha.status, execucao_filha.class, execucao_filha.executavel_id, execucao_filha.detalhe_status, execucao_filha.concluida, execucao_filha.agendamento_id, execucao_filha.estrategia_contingencia_id
  • Output: execucao_1.id
  • Output: evento_de_tarefa.id, evento_de_tarefa.version, evento_de_tarefa.conteudo, evento_de_tarefa.descricao, evento_de_tarefa.execucao_id, evento_de_tarefa.status, evento_de_tarefa.date_created, evento_de_tarefa.permite_encadeamento, evento_de_tarefa.data_disparo, evento_de_tarefa.detalhe_status, evento_de_tarefa.progresso, evento_de_tarefa.interromper_fluxo_pai, evento_de_tarefa.expor_para_usuario
  • Index Cond: (execucao_raiz.id = 55258568)
13. 0.003 0.003 ↑ 10.0 1 1

WorkTable Scan on execucoes_da_arvore_toda_com_tentativas execucao_pai (cost=0.00..10.00 rows=10 width=8) (actual time=0.003..0.003 rows=1 loops=1)

14. 0.044 0.044 ↓ 0.0 0 1

Index Scan using idx_execucao_execucao_de_fluxo_id_idx on public.execucao execucao_filha (cost=86.00..104.25 rows=10 width=116) (actual time=0.044..0.044 rows=0 loops=1)

15. 7.204 7.204 ↑ 991.0 1 1

Hash Join (cost=1,997.00..94,246.75 rows=991 width=548) (actual time=7.147..7.204 rows=1 loops=1)

16. 7.368 7.368 ↑ 2,456,571.0 1 1

CTE Scan on apenas_execucoes_validas_para_busca_status execucao_1 (cost=0.00..736,971,244.50 rows=2,456,571 width=8) (actual time=7.367..7.368 rows=1 loops=1)

17. 0.000 7.301 ↑ 491,314,163.0 1 1

Append (cost=86.00..1,319,458,641.27 rows=491,314,163 width=1,130) (actual time=7.284..7.301 rows=1 loops=1)

  • Output: execucao_pai.id, execucao_pai.version, execucao_pai.date_created, execucao_pai.id_usuario, execucao_pai.manual, execucao_pai.execucao_de_fluxo_id, execucao_pai.status, execucao_pai.class, execucao_pai.executavel_id, execucao_pai.detalhe_status, execucao_pai.concluida, execucao_pai.agendamento_id, execucao_pai.estrategia_contingencia_id
  • Output: execucao_fluxo.executavel_id, execucao.executavel_id, execucao.id, execucao.status, execucao.execucao_de_fluxo_id
  • Output: execucao_filha.id, execucao_filha.version, execucao_filha.date_created, execucao_filha.id_usuario, execucao_filha.manual, execucao_filha.execucao_de_fluxo_id, execucao_filha.status, execucao_filha.class, execucao_filha.executavel_id, execucao_filha.detalhe_status, execucao_filha.concluida, execucao_filha.agendamento_id, execucao_filha.estrategia_contingencia_id
  • Output: execucao_1.id
  • Index Cond: (execucao_filha.execucao_de_fluxo_id = execucao_pai.id)
  • Hash Cond: (execucao_fluxo.executavel_id = executavel_fluxo.id)
  • Filter: ((execucao_1.class)::text = 'br.com.zeroglosa.jobs.ExecucaoDeTarefa'::text)
18. 3.819 3.819 ↑ 991.0 1 1

Nested Loop (cost=86.00..91,097.00 rows=991 width=548) (actual time=3.762..3.819 rows=1 loops=1)

19. 7.285 7.285 ↑ 619.0 1 1

Nested Loop (cost=86.00..57,291.50 rows=619 width=116) (actual time=7.283..7.285 rows=1 loops=1)

20. 0.015 0.015 ↓ 0.0 0 1

Merge Join (cost=89,098,877.27..1,073,744,268.27 rows=491,313,544 width=116) (actual time=0.015..0.015 rows=0 loops=1)

21. 0.000 3.355 ↓ 1.0 1,250 1

Hash (cost=662.00..662.00 rows=1,249 width=8) (actual time=3.355..3.355 rows=1,250 loops=1)

  • Output: executavel_fluxo.id
  • Output: execucao_valida_para_busca_status_1.id, execucao_valida_para_busca_status_1.version, execucao_valida_para_busca_status_1.date_created, execucao_valida_para_busca_status_1.id_usuario, execucao_valida_para_busca_status_1.manual, execucao_valida_para_busca_status_1.execucao_de_fluxo_id, execucao_valida_para_busca_status_1.status, execucao_valida_para_busca_status_1.class, execucao_valida_para_busca_status_1.executavel_id, execucao_valida_para_busca_status_1.detalhe_status, execucao_valida_para_busca_status_1.concluida, execucao_valida_para_busca_status_1.agendamento_id, execucao_valida_para_busca_status_1.estrategia_contingencia_id
  • Output: execucao_valida_para_busca_status.id, execucao_valida_para_busca_status.version, execucao_valida_para_busca_status.date_created, execucao_valida_para_busca_status.id_usuario, execucao_valida_para_busca_status.manual, execucao_valida_para_busca_status.execucao_de_fluxo_id, execucao_valida_para_busca_status.status, execucao_valida_para_busca_status.class, execucao_valida_para_busca_status.executavel_id, execucao_valida_para_busca_status.detalhe_status, execucao_valida_para_busca_status.concluida, execucao_valida_para_busca_status.agendamento_id, execucao_valida_para_busca_status.estrategia_contingencia_id
  • Output: execucao.id, execucao.status, execucao.execucao_de_fluxo_id, execucao.executavel_id, execucao_fluxo.executavel_id
  • Merge Cond: (((unnest(string_to_array(execucoes_da_arvore_toda_1.execucoes_id, ','::text)))::numeric) = ((execucao_valida_para_busca_status_1.id)::numeric))
  • Buckets: 2048 Batches: 1 Memory Usage: 65kB
22. 0.013 0.013 ↓ 0.0 0 1

Sort (cost=382,056.70..394,456.70 rows=24,800 width=32) (actual time=0.013..0.013 rows=0 loops=1)

23. 3.067 3.067 ↓ 1.0 1,250 1

Seq Scan on public.executavel executavel_fluxo (cost=0.00..662.00 rows=1,249 width=8) (actual time=0.832..3.067 rows=1,250 loops=1)

24. 0.000 0.000 ↓ 0.0 0

Materialize (cost=88,716,820.57..92,679,026.57 rows=3,962,206 width=116) (never executed)

25. 0.009 0.009 ↑ 1.0 1 1

Index Scan using execucao_pkey on public.execucao execucao_valida_para_busca_status (cost=86.00..90.45 rows=1 width=116) (actual time=0.008..0.009 rows=1 loops=1)

26. 1.369 1.369 ↑ 1.0 1 1

Index Scan using execucao_pkey on public.execucao execucao_fluxo (cost=86.00..90.42 rows=1 width=16) (actual time=1.367..1.369 rows=1 loops=1)

27. 2.445 2.445 ↑ 991.0 1 1

CTE Scan on execucoes_da_arvore_toda_com_tentativas execucao (cost=0.00..991.00 rows=991 width=540) (actual time=2.389..2.445 rows=1 loops=1)

28. 7.271 7.272 ↑ 619.0 1 1

CTE Scan on execucoes_da_arvore_toda (cost=0.00..991.00 rows=619 width=8) (actual time=7.271..7.272 rows=1 loops=1)

  • Sort Method: quicksort Memory: 25kB
  • Sort Key: ((unnest(string_to_array(execucoes_da_arvore_toda_1.execucoes_id, ','::text)))::numeric)
  • Output: executavel_fluxo.id
  • Output: execucoes_da_arvore_toda.execucoes_id, execucoes_da_arvore_toda.ultima_execucao_id, execucoes_da_arvore_toda.tem_status_diferentes, execucoes_da_arvore_toda.multi_execucao
  • Output: execucao_valida_para_busca_status_1.id, execucao_valida_para_busca_status_1.version, execucao_valida_para_busca_status_1.date_created, execucao_valida_para_busca_status_1.id_usuario, execucao_valida_para_busca_status_1.manual, execucao_valida_para_busca_status_1.execucao_de_fluxo_id, execucao_valida_para_busca_status_1.status, execucao_valida_para_busca_status_1.class, execucao_valida_para_busca_status_1.executavel_id, execucao_valida_para_busca_status_1.detalhe_status, execucao_valida_para_busca_status_1.concluida, execucao_valida_para_busca_status_1.agendamento_id, execucao_valida_para_busca_status_1.estrategia_contingencia_id, ((execucao_valida_para_busca_status_1.id)::numeric)
  • Output: execucao_valida_para_busca_status.id, execucao_valida_para_busca_status.version, execucao_valida_para_busca_status.date_created, execucao_valida_para_busca_status.id_usuario, execucao_valida_para_busca_status.manual, execucao_valida_para_busca_status.execucao_de_fluxo_id, execucao_valida_para_busca_status.status, execucao_valida_para_busca_status.class, execucao_valida_para_busca_status.executavel_id, execucao_valida_para_busca_status.detalhe_status, execucao_valida_para_busca_status.concluida, execucao_valida_para_busca_status.agendamento_id, execucao_valida_para_busca_status.estrategia_contingencia_id
  • Output: execucao_fluxo.id, execucao_fluxo.version, execucao_fluxo.date_created, execucao_fluxo.id_usuario, execucao_fluxo.manual, execucao_fluxo.execucao_de_fluxo_id, execucao_fluxo.status, execucao_fluxo.class, execucao_fluxo.executavel_id, execucao_fluxo.detalhe_status, execucao_fluxo.concluida, execucao_fluxo.agendamento_id, execucao_fluxo.estrategia_contingencia_id
  • Output: execucao.id, execucao.version, execucao.date_created, execucao.id_usuario, execucao.manual, execucao.execucao_de_fluxo_id, execucao.status, execucao.class, execucao.executavel_id, execucao.detalhe_status, execucao.concluida, execucao.agendamento_id, execucao.estrategia_contingencia_id
  • Output: ((unnest(string_to_array(execucoes_da_arvore_toda_1.execucoes_id, ','::text)))::numeric)
  • Index Cond: (execucao_valida_para_busca_status.id = execucoes_da_arvore_toda.ultima_execucao_id)
  • Index Cond: (execucao_fluxo.id = execucao.execucao_de_fluxo_id)
  • Filter: ((execucoes_da_arvore_toda.multi_execucao IS FALSE) OR ((execucoes_da_arvore_toda.multi_execucao IS TRUE) AND (execucoes_da_arvore_toda.tem_status_diferentes IS FALSE)))
29. 0.000 0.000 ↓ 0.0 0

Sort (cost=88,716,820.57..90,697,923.57 rows=3,962,206 width=116) (never executed)

30. 0.001 0.001 ↓ 0.0 0 1

CTE Scan on execucoes_da_arvore_toda execucoes_da_arvore_toda_1 (cost=0.00..7,625.00 rows=24,800 width=32) (actual time=0.001..0.001 rows=0 loops=1)

  • Sort Key: ((execucao_valida_para_busca_status_1.id)::numeric)
  • Rows Removed by Filter: 1
  • Output: execucao_valida_para_busca_status_1.id, execucao_valida_para_busca_status_1.version, execucao_valida_para_busca_status_1.date_created, execucao_valida_para_busca_status_1.id_usuario, execucao_valida_para_busca_status_1.manual, execucao_valida_para_busca_status_1.execucao_de_fluxo_id, execucao_valida_para_busca_status_1.status, execucao_valida_para_busca_status_1.class, execucao_valida_para_busca_status_1.executavel_id, execucao_valida_para_busca_status_1.detalhe_status, execucao_valida_para_busca_status_1.concluida, execucao_valida_para_busca_status_1.agendamento_id, execucao_valida_para_busca_status_1.estrategia_contingencia_id, ((execucao_valida_para_busca_status_1.id)::numeric)
  • Output: (unnest(string_to_array(execucoes_da_arvore_toda_1.execucoes_id, ','::text)))::numeric
  • Filter: ((execucoes_da_arvore_toda_1.multi_execucao IS TRUE) AND (execucoes_da_arvore_toda_1.tem_status_diferentes IS TRUE))
31. 0.000 0.000 ↓ 0.0 0

Gather (cost=1,000.00..1,664,747.81 rows=3,962,206 width=116) (never executed)

  • Workers Planned: 1
  • Workers Launched: 0
  • Output: execucao_valida_para_busca_status_1.id, execucao_valida_para_busca_status_1.version, execucao_valida_para_busca_status_1.date_created, execucao_valida_para_busca_status_1.id_usuario, execucao_valida_para_busca_status_1.manual, execucao_valida_para_busca_status_1.execucao_de_fluxo_id, execucao_valida_para_busca_status_1.status, execucao_valida_para_busca_status_1.class, execucao_valida_para_busca_status_1.executavel_id, execucao_valida_para_busca_status_1.detalhe_status, execucao_valida_para_busca_status_1.concluida, execucao_valida_para_busca_status_1.agendamento_id, execucao_valida_para_busca_status_1.estrategia_contingencia_id, execucao_valida_para_busca_status_1.id
32. 0.000 0.000 ↓ 0.0 0

Parallel Seq Scan on public.execucao execucao_valida_para_busca_status_1 (cost=0.00..1,267,527.21 rows=2,330,709 width=116) (never executed)

  • Output: execucao_valida_para_busca_status_1.id, execucao_valida_para_busca_status_1.version, execucao_valida_para_busca_status_1.date_created, execucao_valida_para_busca_status_1.id_usuario, execucao_valida_para_busca_status_1.manual, execucao_valida_para_busca_status_1.execucao_de_fluxo_id, execucao_valida_para_busca_status_1.status, execucao_valida_para_busca_status_1.class, execucao_valida_para_busca_status_1.executavel_id, execucao_valida_para_busca_status_1.detalhe_status, execucao_valida_para_busca_status_1.concluida, execucao_valida_para_busca_status_1.agendamento_id, execucao_valida_para_busca_status_1.estrategia_contingencia_id