Thread: SQL Query never ending...
Hi all,
can someone help me?
I don't know if this is the correct list for this matter. If I'm wrong, please bear with me and point me in right direction.
I have a large query which, largely after more than 24 hours running, doesn't come to an end;
However I can see, using system tools, that the postgres process keeps, although slowly, reading and writing bytes and the "afinity" dedicated cores are at 6.25% .
I tried https://www.depesz.com/ but the query was rejected.
-- Scenario:
-- OS: Windows 12 R2 Standard
-- RAM: 128GB
-- CPU: Intel Xeon E5-2640 v4 @2.40GH (2 processors) (16 cores)
-- PostgreSQL 9.6
-- Database category: OLAP (Tables used in the query are not dynamic and the statistics for all of them are up to date)
-- *******************************************************************************************************
-- The query you'll see later bellow uses the following tables:
--
-- This facts table has around 1500000 rows.
CREATE TEMPORARY TABLE analise_transac_mes
( ctrl_cod_valida integer NOT NULL,
cod_controlo integer NOT NULL,
causa character varying(300),
Fornecedor text,
ordem integer,
num_serie text,
titulo text,
tipo_produto text,
data_dia_hora text,
cod_viatura text,
cod_licenca text,
val_inval_excl character varying(12),
mes character varying(25),
tipo_licenca character varying(25),
data_controlo timestamp without time zone NOT NULL DEFAULT now(),
utilizador character varying(30) DEFAULT "current_user"(),
senha_entrega character varying(12),
senha_fornecedor_entrega character varying(12),
proc_extra character(3),
quando date DEFAULT now(),
cod_cliente character varying(15),
tem_venda character varying(6),
CONSTRAINT pk_analise_transac_mes PRIMARY KEY (ctrl_cod_valida);
--
SELECT pg_prewarm('TT_Analise_Transac_Oper_Mes');
--
-- With following indexes:
CREATE INDEX IF NOT EXISTS TT_Analise_Transac_Oper_Mes_Fornecedor ON TT_Analise_Transac_Oper_Mes(Fornecedor);
CREATE INDEX IF NOT EXISTS TT_Analise_Transac_Oper_Mes_encomenda ON TT_Analise_Transac_Oper_Mes(encomenda);
CREATE INDEX IF NOT EXISTS TT_Analise_Transac_Oper_Mes_val_inval_excl ON TT_Analise_Transac_Oper_Mes(val_inval_excl);
CREATE INDEX IF NOT EXISTS TT_Analise_Transac_Oper_Mes_proc_extra ON TT_Analise_Transac_Oper_Mes(proc_extra);
CREATE INDEX IF NOT EXISTS TT_Analise_Transac_Oper_Mes_senha_entrega ON TT_Analise_Transac_Oper_Mes(senha_entrega);
CREATE INDEX IF NOT EXISTS TT_Analise_Transac_Oper_Mes_senha_fornecedor_entrega ON TT_Analise_Transac_Oper_Mes(senha_fornecedor_entrega);
--
-- ********************************************************************************
-- Following table has 1800 rows
--
CREATE TABLE bilhetica_base_2017_01.lst_km_por_etapa_2017
(
cod_encomenda text NOT NULL,
encomenda character varying(150),
encomenda_amtl character varying(150),
Fornecedor character varying(60) NOT NULL,
etapa_km numeric(13,9),
mes_ref character varying(15) NOT NULL,
utilizador character varying(30) DEFAULT "current_user"(),
data timestamp without time zone DEFAULT now(),
notas character varying,
caracter character(1),
senha_entrega character varying(12),
senha_fornecedor_entrega character varying(12),
CONSTRAINT pk_lst_km_por_etapa_2017 PRIMARY KEY (cod_encomenda, Fornecedor, mes_ref),
CONSTRAINT dv_lst_km_por_etapa_caracter CHECK (caracter = ANY (ARRAY[NULL::bpchar, 'P'::bpchar, 'D'::bpchar]))
);
SELECT pg_prewarm('TT_Km_por_Etapa_2017');
--
--With following indexes:
CREATE INDEX i_Km_por_Etapa_Fornecedor ON TT_Km_por_Etapa_2017 (Fornecedor);
CREATE INDEX i_Km_por_Etapa_Mes_Ref ON TT_Km_por_Etapa_2017 (Mes_Ref);
CREATE INDEX i_Km_por_Etapa_Cod_encomenda ON TT_Km_por_Etapa_2017 (Cod_encomenda);
CREATE INDEX i_Km_por_Etapa_encomenda ON TT_Km_por_Etapa_2017 (encomenda);
--
-- ********************************************************************************
-- This table has 90 rows
CREATE TABLE bilhetica_base_2017_01.encomendas_n2v_2017
(
senha_fornecedor_entrega text,
senha_entrega text,
cod_encomenda character varying(12) NOT NULL,
desig_encomenda_aml text,
desig_encomenda_polis_antigo text,
desig_encomenda_polis_novo text,
encomenda_base text,
modalidade text,
tipo_aml text,
tipo_polis text,
tarifa text,
ultima_actualizacao text,
ano_corrente text,
pvp_ano_corrente numeric(7,3),
desconto_ano_corrente numeric(6,2),
mes_pvp_ano_corrente character varying(13),
pvp_ref_ano_corrente numeric(7,3),
mes_pvp_ref_ano_corrente character varying(13),
siit_4_18_e_sub23 character varying(25),
entra_nas_contas character(1),
etapa_km_julho numeric(6,3),
mes_ref character varying(13) NOT NULL,
versao text,
notas_aml text,
notas_polis text,
notas text,
CONSTRAINT pk_encomendas_n2v_2017 PRIMARY KEY (cod_encomenda, mes_ref));
--
SELECT pg_prewarm('TT_encomendas_N2V_2017');
--
-- With following indexes;
CREATE INDEX i_encomendas_n2v_2017_senha_entrega ON TT_encomendas_N2v_2017 (senha_entrega);
CREATE INDEX i_encomendas_n2v_2017_senha_fornecedor_entrega ON TT_encomendas_N2v_2017 (senha_fornecedor_entrega);
CREATE INDEX i_encomendas_n2v_2017_encomenda_base ON TT_encomendas_N2v_2017 (encomenda_base);
-- ********************************************************************************
-- This table has 7 rows
CREATE TEMPORARY TABLE TT_EOTB1 AS
SELECT Fornecedor, encomenda_Base, COUNT(*) as EOTB_Etapas
FROM TT_Analise_Transac_Oper_Mes AS AT
JOIN TT_encomendas_N2V_2017 AS N2V
ON N2V.senha_entrega = AT.senha_entrega AND N2V.senha_fornecedor_entrega = AT.senha_fornecedor_entrega
GROUP BY Fornecedor, encomenda_Base;
--
-- With following indexes;
CREATE INDEX I_Fornecedor ON TT_EOTB1 (Fornecedor);
CREATE INDEX I_encomenda_Base ON TT_EOTB1 (encomenda_Base);
--
SELECT pg_prewarm('TT_Analise_Transac_Oper_Mes');
--
--
-- ********************************************************************************
--
-- And then I have this query I've been fighting with for months:
-- With a shorter number of rows in facts table analise_transac_mes it does what is expected quickly but, with 1500000 rows I never saw it finishing.
-- The insert part may be ignored for now.
-- INSERT INTO blt_comp_e_rep_2017_03.Calc_Rec_Com_h_Ago_2017(
-- Fornecedor, num_serie, encomenda, encomenda_base, etapas, etapa_km, distancia_percorrida,
-- distancia_percorrida_otb, xpto, variancia, desvio_padrao, escalao_quilometrico,
-- tarifa_ocasional_ref, tarifa_passe_ref, registos, receita_comercial, senha_entrega, senha_fornecedor_entrega)
--
select Final.Fornecedor, Final.Num_Serie, Final.encomenda, Final.encomenda_Base, Final.Etapas, Final.Etapa_Km, Final.Distancia_Percorrida,
Final.Distancia_Percorrida_OTB, Final.XPTO,
Final.Variancia, Final.Desvio_Padrao, Final.Escalao_Quilometrico, Tarifa_Ocasional_Ref, Tarifa_Passe_Ref, NULL::INTEGER as Registos,
CASE
WHEN Final.Tarifa_Ocasional_Ref * Final.Etapas <= Tarifa_Passe_Ref THEN Final.Tarifa_Ocasional_Ref * Final.Etapas
ELSE Final.Tarifa_Passe_Ref
END AS Receita_Comercial,
Final.senha_entrega, Final.senha_fornecedor_entrega
from
(Select NS.Fornecedor, NS.Num_Serie, NS.encomenda, NS.encomenda_Base, NS.Etapas, NS.Etapa_Km, NS.Distancia_Percorrida,
Distancia_Percorrida_OTB, TB.XPTO, TB.Variancia, TB.Desvio_Padrao, TB.Escalao_Quilometrico,
CASE
WHEN (TB.Escalao_Quilometrico > 0 AND TB.EScalao_Quilometrico <= 5) THEN 1.110
WHEN (TB.Escalao_Quilometrico > 5 AND TB.EScalao_Quilometrico <= 9) THEN 1.425
WHEN (TB.Escalao_Quilometrico > 9 AND TB.EScalao_Quilometrico <= 17) THEN 1.730
WHEN (TB.Escalao_Quilometrico > 17 AND TB.EScalao_Quilometrico <= 24) THEN 2.225
END AS Tarifa_Ocasional_Ref,
--
CASE
WHEN (TB.EScalao_Quilometrico > 0 AND TB.EScalao_Quilometrico <= 5) THEN 27.10
WHEN (TB.EScalao_Quilometrico > 5 AND TB.EScalao_Quilometrico <= 9) THEN 38.65
WHEN (TB.EScalao_Quilometrico > 9 AND TB.EScalao_Quilometrico <= 13) THEN 48.80
WHEN (TB.EScalao_Quilometrico > 13 AND TB.EScalao_Quilometrico <= 17) THEN 60.30
WHEN (TB.EScalao_Quilometrico > 17 AND TB.EScalao_Quilometrico <= 21) THEN 70.20
END AS Tarifa_Passe_Ref,
senha_entrega, senha_fornecedor_entrega
--
FROM
(SELECT AT.Fornecedor, AT.Num_Serie, AT.encomenda, AT.senha_entrega, AT.senha_fornecedor_entrega, AT.encomenda_Base, AT.Etapas, E.Etapa_Km, AT.Etapas*E.Etapa_Km as Distancia_Percorrida,
DOTB.DOTB_Distancias / EOTB.EOTB_Etapas as Distancia_Percorrida_OTB
FROM (SELECT Fornecedor, AT.num_serie, encomenda, Cod_encomenda, AT.senha_entrega, AT.senha_fornecedor_entrega, encomenda_Base, COUNT(*) as Etapas -- Etapas por Num_Serie, por Título e por Fornecedor
FROM TT_Analise_Transac_Oper_Mes AS AT
JOIN TT_encomendas_N2V_2017 AS N2V
ON N2V.senha_entrega = AT.senha_entrega AND N2V.senha_fornecedor_entrega = AT.senha_fornecedor_entrega
GROUP BY Fornecedor, Num_Serie, encomenda_Base, encomenda, Cod_encomenda, AT.senha_entrega, AT.senha_fornecedor_entrega) as AT
--
INNER JOIN (SELECT Fornecedor, encomenda, Cod_encomenda, Etapa_Km
FROM TT_Km_por_Etapa_2017
WHERE Mes_Ref = 'maio') AS E
--
ON AT.Fornecedor = E.Fornecedor AND AT.Cod_encomenda = E.Cod_encomenda
--
-- aqui já
INNER JOIN (SELECT Fornecedor, encomenda_Base, EOTB_Etapas
FROM TT_EOTB1) AS EOTB
--
ON EOTB.Fornecedor = AT.Fornecedor AND EOTB.encomenda_Base = AT.encomenda_Base
--
INNER JOIN
--
(SELECT Fornecedor, encomenda_Base, sum(Etapas*Etapa_Km) as DOTB_Distancias
FROM (SELECT Fornecedor, encomenda_Base, Etapas, Etapa_KM, Etapas*Etapa_Km as DOTB_Distancias
FROM (SELECT EOTTB.Fornecedor, encomenda_Base, EOTTB.encomenda, EOTTB.Cod_encomenda, Etapas, Etapa_Km
FROM (SELECT Fornecedor, encomenda, N2V.Cod_encomenda, encomenda_Base, COUNT(*) as Etapas
FROM TT_Analise_Transac_Oper_Mes AS AT
JOIN TT_encomendas_N2V_2017 AS N2V
ON N2V.senha_entrega = AT.senha_entrega AND N2V.senha_fornecedor_entrega = AT.senha_fornecedor_entrega
GROUP BY Fornecedor, encomenda_Base, encomenda, Cod_encomenda) as EOTTB
JOIN (SELECT Fornecedor, encomenda, Cod_encomenda, Etapa_Km
FROM TT_Km_por_Etapa_2017 AS K
WHERE K.Mes_Ref = 'maio' ) AS OTEK
ON EOTTB.Fornecedor = OTEK.Fornecedor AND EOTTB.Cod_encomenda = OTEK.Cod_encomenda) as DOT) as DOTB
--
GROUP BY DOTB.Fornecedor, DOTB.encomenda_Base) AS DOTB
--
ON DOTB.Fornecedor = EOTB.Fornecedor AND DOTB.encomenda_Base = EOTB.encomenda_Base) AS NS
--
INNER JOIN
--
(SELECT Base.Fornecedor, Base.encomenda_Base, trunc(Base.XPTO,3) AS XPTO, EOTB.Etapas,
TRUNC(Base.XPTO / EOTB.Etapas,3) AS Variancia, TRUNC(SQRT(Base.XPTO / EOTB.Etapas),3) AS Desvio_Padrao,
DOTB1.DOTB_Distancias/EOTB1.EOTB_Etapas + SQRT(Base.XPTO / EOTB.Etapas) AS Escalao_Quilometrico
FROM
(SELECT AT.Fornecedor, AT.encomenda_Base, SUM(AT.Etapas * (E.Etapa_Km - (DOTB_Distancias/EOTB.EOTB_Etapas))^2) AS XPTO
--
FROM (SELECT Fornecedor, AT.num_serie, encomenda, Cod_encomenda, encomenda_Base, COUNT(*) as Etapas
FROM TT_Analise_Transac_Oper_Mes AS AT
JOIN TT_encomendas_N2V_2017 AS N2V
ON N2V.senha_entrega = AT.senha_entrega AND N2V.senha_fornecedor_entrega = AT.senha_fornecedor_entrega
GROUP BY Fornecedor, Num_Serie, encomenda_Base, encomenda, Cod_encomenda) as AT
--
INNER JOIN (SELECT Fornecedor, encomenda, Cod_encomenda, Etapa_Km
FROM TT_Km_por_Etapa_2017 AS K
WHERE K.Mes_Ref = 'maio' ) AS E
--
ON AT.Fornecedor = E.Fornecedor AND AT.Cod_encomenda = E.Cod_encomenda
--
-- aqui já
INNER JOIN (SELECT Fornecedor, encomenda_Base, EOTB_Etapas
FROM TT_EOTB1) AS EOTB
--
ON EOTB.Fornecedor = AT.Fornecedor AND EOTB.encomenda_Base = AT.encomenda_Base
--
INNER JOIN
--
(SELECT Fornecedor, encomenda_Base, sum(Etapas*Etapa_Km) as DOTB_Distancias
FROM (SELECT Fornecedor, encomenda_Base, Etapas, Etapa_KM, Etapas*Etapa_Km as DOTB_Distancias
FROM (SELECT EOTTB.Fornecedor, encomenda_Base, EOTTB.encomenda, Etapas, Etapa_Km
FROM (SELECT Fornecedor, encomenda, Cod_encomenda, encomenda_Base, COUNT(*) as Etapas
FROM TT_Analise_Transac_Oper_Mes AS AT
JOIN TT_encomendas_N2V_2017 AS N2V
ON N2V.senha_entrega = AT.senha_entrega AND N2V.senha_fornecedor_entrega = AT.senha_fornecedor_entrega
GROUP BY Fornecedor, encomenda_Base, encomenda, Cod_encomenda) as EOTTB
JOIN (SELECT Fornecedor, encomenda, Cod_encomenda, Etapa_Km
FROM TT_Km_por_Etapa_2017 AS K
WHERE K.Mes_Ref = 'maio' ) AS OTEK
ON EOTTB.Fornecedor = OTEK.Fornecedor AND EOTTB.Cod_encomenda = OTEK.Cod_encomenda) as DOT) as DOTB
--
GROUP BY DOTB.Fornecedor, DOTB.encomenda_Base) AS DOTB
--
ON DOTB.Fornecedor = EOTB.Fornecedor AND DOTB.encomenda_Base = EOTB.encomenda_Base
GROUP BY AT.Fornecedor, AT.encomenda_Base) AS Base
--
INNER JOIN
--
(SELECT Fornecedor, encomenda_Base, EOTB_Etapas AS Etapas
FROM TT_EOTB1) AS EOTB
--
ON EOTB.Fornecedor = Base.Fornecedor AND EOTB.encomenda_Base = Base.encomenda_Base
--
INNER JOIN
--
(SELECT Fornecedor, encomenda_Base, sum(Etapas*Etapa_Km) as DOTB_Distancias
FROM (SELECT Fornecedor, encomenda_Base, Etapas, Etapa_KM, Etapas*Etapa_Km as DOTB_Distancias
FROM (SELECT EOTTB.Fornecedor, encomenda_Base, EOTTB.encomenda, EOTTB.Cod_encomenda, Etapas, Etapa_Km
FROM (SELECT Fornecedor, encomenda, Cod_encomenda, encomenda_Base, COUNT(*) as Etapas
FROM TT_Analise_Transac_Oper_Mes AS AT
JOIN TT_encomendas_N2V_2017 AS N2V
ON N2V.senha_entrega = AT.senha_entrega AND N2V.senha_fornecedor_entrega = AT.senha_fornecedor_entrega
GROUP BY Fornecedor, encomenda_Base, encomenda, Cod_encomenda) as EOTTB
JOIN (SELECT Fornecedor, encomenda, T.Cod_encomenda, Etapa_Km
FROM TT_Km_por_Etapa_2017 AS K
JOIN TT_encomendas_N2V_2017 AS T
ON K.Cod_encomenda = T.Cod_encomenda
WHERE K.Mes_Ref = 'maio' ) AS OTEK
ON EOTTB.Fornecedor = OTEK.Fornecedor AND EOTTB.Cod_encomenda = OTEK.Cod_encomenda) as DOT) as DOTB
--
GROUP BY DOTB.Fornecedor, DOTB.encomenda_Base) AS DOTB1
--
ON DOTB1.Fornecedor = Base.Fornecedor AND DOTB1.encomenda_Base = Base.encomenda_Base
--
INNER JOIN
--
(SELECT Fornecedor, encomenda_Base, EOTB_Etapas
FROM TT_EOTB1 AS AT) AS EOTB1
--
ON EOTB1.Fornecedor = Base.Fornecedor AND EOTB1.encomenda_Base = Base.encomenda_Base) AS TB
--
ON NS.Fornecedor = TB.Fornecedor AND NS.encomenda_Base = TB.encomenda_Base ) AS Final
--
-- ***********************************************************************************************
-- This set of SQL instructions is the main part of a function.
Thanks in advance
Dias Costa
-- J. M. Dias Costa Telef. 214026948 Telem. 939307421 Se divulgar esta mensagem por terceiros, por favor: 1. Apague o meu endereço de correio electrónico e o meu nome. 2. Apague também os endereços dos seus amigos antes de distribuir. 3. Enderece como cópia oculta (Cc ou Bcc) para os SEUS destinatários. Agindo deste modo, dificultará a disseminação de "vírus", "spams" e "banners" e contribuirá para manter a privacidade de todos e cada um. Obrigado. Nota: Não se deverá ao acaso a ocorrência de palavras na minha escrita que não respeitem o malfadado acordo ortográfico.
>
> Hi all,
> can someone help me?
>
> I don't know if this is the correct list for this matter. If I'm wrong, please bear with me and point me in right direction.
>
> I have a large query which, largely after more than 24 hours running, doesn't come to an end;
> However I can see, using system tools, that the postgres process keeps, although slowly, reading and writing bytes and the "afinity" dedicated cores are at 6.25% .
>
> I tried https://www.depesz.com/ but the query was rejected.
>
Regards,
--
Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/
PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
And use some external service like pastebin.com to send long SQL statements.
The names of the tables and indexes differ from the original script. Only the names.
This is the query plan for only 19684 rows.
I have another query running for around 30000 rows, but it takes an eternity to finish.
If it finishes in acceptable time I'll make it available to you.
As in previous times when trying to optimize, I submitted this execution plan to https://explain.depesz.com but now, as it happened then, I am not able to extract information to decide me on what to do or to decide on a path leading to optimization.
The environment conditions are exactly the same as described in my previous message.
Thank you in advance for your attention and help.
They will be greatly appreciated.
Dias Costa
-- *******************************************************************************
"QUERY PLAN"
"Nested Loop (cost=3336.02..3353.51 rows=1 width=528) (actual time=867.213..6452673.494 rows=19684 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.titulo_base, (count(*)), tt_km_por_etapa_2017.etapa_km, (((count(*)))::numeric * tt_km_por_etapa_2017.etapa_km), ((sum((((count(*)))::numeric * k.etapa_km))) / (tt_eotb1.eotb_etapas)::numeric), tr (...)"
" Join Filter: ((at_2.operador = at_5.operador) AND (tt_eotb1.titulo_base = n2v_4.titulo_base))"
" Rows Removed by Join Filter: 157472"
" Buffers: local hit=418076253"
" -> Nested Loop (cost=2658.99..2673.26 rows=1 width=782) (actual time=744.047..6272023.716 rows=19684 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.titulo_base, (count(*)), at_2.ticket_code, at_2.ticket_operator_code, tt_km_por_etapa_2017.etapa_km, tt_km_por_etapa_2017.operador, tt_eotb1.eotb_etapas, tt_eotb1.operador, tt_eotb1.titulo_b (...)"
" Join Filter: ((at_2.operador = at_4.operador) AND (tt_eotb1.titulo_base = n2v_3.titulo_base))"
" Rows Removed by Join Filter: 157472"
" Buffers: local hit=418064955"
" -> Nested Loop (cost=1329.63..1337.01 rows=1 width=686) (actual time=369.637..1236.464 rows=19684 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.titulo_base, (count(*)), at_2.ticket_code, at_2.ticket_operator_code, tt_km_por_etapa_2017.etapa_km, tt_km_por_etapa_2017.operador, tt_eotb1.eotb_etapas, tt_eotb1.operador, tt_eotb1.ti (...)"
" Buffers: local hit=558900"
" -> Nested Loop (cost=1329.49..1336.74 rows=1 width=614) (actual time=369.631..1126.109 rows=19684 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.titulo_base, (count(*)), at_2.ticket_code, at_2.ticket_operator_code, tt_km_por_etapa_2017.etapa_km, tt_km_por_etapa_2017.operador, (sum((((count(*)))::numeric * k.etapa_km))), a (...)"
" Buffers: local hit=519532"
" -> Nested Loop (cost=1329.36..1336.47 rows=1 width=542) (actual time=369.625..1015.389 rows=19684 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.titulo_base, (count(*)), at_2.ticket_code, at_2.ticket_operator_code, tt_km_por_etapa_2017.etapa_km, tt_km_por_etapa_2017.operador, (sum((((count(*)))::numeric * k.etapa_km (...)"
" Buffers: local hit=480164"
" -> Nested Loop (cost=1329.22..1336.20 rows=1 width=470) (actual time=369.614..895.215 rows=19684 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.titulo_base, (count(*)), at_2.ticket_code, at_2.ticket_operator_code, tt_km_por_etapa_2017.etapa_km, tt_km_por_etapa_2017.operador, (sum((((count(*)))::numeric * k.et (...)"
" Buffers: local hit=440796"
" -> Merge Join (cost=1328.95..1333.92 rows=1 width=358) (actual time=369.586..503.283 rows=19684 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.titulo_base, (count(*)), at_2.ticket_code, at_2.ticket_operator_code, n2v_1.cod_titulo, (sum((((count(*)))::numeric * k.etapa_km))), at_1.operador, n2v.titulo_b (...)"
" Merge Cond: (at_1.operador = at_2.operador)"
" Join Filter: (n2v_1.titulo_base = n2v.titulo_base)"
" Rows Removed by Join Filter: 157472"
" Buffers: local hit=22563"
" -> GroupAggregate (cost=672.74..674.98 rows=1 width=96) (actual time=119.552..128.686 rows=9 loops=1)"
" Output: at_1.operador, n2v.titulo_base, sum((((count(*)))::numeric * k.etapa_km))"
" Group Key: at_1.operador, n2v.titulo_base"
" Buffers: local hit=11295"
" -> Merge Join (cost=672.74..674.96 rows=1 width=88) (actual time=119.517..128.610 rows=41 loops=1)"
" Output: at_1.operador, n2v.titulo_base, (count(*)), k.etapa_km"
" Merge Cond: (at_1.operador = (k.operador)::text)"
" Join Filter: ((n2v.cod_titulo)::text = k.cod_titulo)"
" Rows Removed by Join Filter: 3649"
" Buffers: local hit=11295"
" -> GroupAggregate (cost=656.21..657.63 rows=57 width=188) (actual time=118.675..126.741 rows=41 loops=1)"
" Output: at_1.operador, at_1.titulo, n2v.cod_titulo, n2v.titulo_base, count(*), n2v.cod_titulo"
" Group Key: at_1.operador, n2v.titulo_base, at_1.titulo, n2v.cod_titulo"
" Buffers: local hit=11268"
" -> Sort (cost=656.21..656.35 rows=57 width=138) (actual time=118.668..120.741 rows=25270 loops=1)"
" Output: at_1.operador, at_1.titulo, n2v.titulo_base, n2v.cod_titulo"
" Sort Key: at_1.operador, n2v.titulo_base, at_1.titulo, n2v.cod_titulo"
" Sort Method: quicksort Memory: 3783kB"
" Buffers: local hit=11268"
" -> Nested Loop (cost=5.20..654.54 rows=57 width=138) (actual time=0.918..81.299 rows=25270 loops=1)"
" Output: at_1.operador, at_1.titulo, n2v.titulo_base, n2v.cod_titulo"
" Buffers: local hit=11268"
" -> Seq Scan on pg_temp_6.tt_titulos_n2v_2017 n2v (cost=0.00..3.90 rows=90 width=138) (actual time=0.013..0.032 rows=90 loops=1)"
" Output: n2v.ticket_operator_code, n2v.ticket_code, n2v.cod_titulo, n2v.desig_titulo_aml, n2v.desig_titulo_otlis_antigo, n2v.desig_titulo_otlis_novo, n2v.titulo_base, n2v.modalidade, (...)"
" Buffers: local hit=3"
" -> Bitmap Heap Scan on pg_temp_6.tt_analise_transac_oper_mes at_1 (cost=5.20..7.22 rows=1 width=148) (actual time=0.756..0.840 rows=281 loops=90)"
" Output: at_1.ctrl_cod_valida, at_1.cod_controlo, at_1.causa, at_1.operador, at_1.ordem, at_1.num_serie, at_1.titulo, at_1.tipo_valida, at_1.data_dia_hora, at_1.cod_carreira, at_1.cod (...)"
" Recheck Cond: (((at_1.ticket_operator_code)::text = n2v.ticket_operator_code) AND ((at_1.ticket_code)::text = n2v.ticket_code))"
" Heap Blocks: exact=8900"
" Buffers: local hit=11265"
" -> BitmapAnd (cost=5.20..5.20 rows=1 width=0) (actual time=0.743..0.743 rows=0 loops=90)"
" Buffers: local hit=2365"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_operator_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.649..0.649 rows=8149 loops=90)"
" Index Cond: ((at_1.ticket_operator_code)::text = n2v.ticket_operator_code)"
" Buffers: local hit=2156"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.041..0.041 rows=361 loops=70)"
" Index Cond: ((at_1.ticket_code)::text = n2v.ticket_code)"
" Buffers: local hit=209"
" -> Sort (cost=16.53..16.55 rows=9 width=186) (actual time=0.832..1.143 rows=3691 loops=1)"
" Output: k.etapa_km, k.operador, k.cod_titulo"
" Sort Key: k.operador"
" Sort Method: quicksort Memory: 93kB"
" Buffers: local hit=27"
" -> Bitmap Heap Scan on pg_temp_6.tt_km_por_etapa_2017 k (cost=2.35..16.39 rows=9 width=186) (actual time=0.084..0.258 rows=900 loops=1)"
" Output: k.etapa_km, k.operador, k.cod_titulo"
" Recheck Cond: ((k.mes_ref)::text = 'maio'::text)"
" Heap Blocks: exact=23"
" Buffers: local hit=27"
" -> Bitmap Index Scan on i_km_por_etapa_mes_ref (cost=0.00..2.34 rows=9 width=0) (actual time=0.076..0.076 rows=900 loops=1)"
" Index Cond: ((k.mes_ref)::text = 'maio'::text)"
" Buffers: local hit=4"
" -> Materialize (cost=656.21..658.77 rows=57 width=262) (actual time=242.933..280.558 rows=177148 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.cod_titulo, at_2.ticket_code, at_2.ticket_operator_code, n2v_1.titulo_base, (count(*)), at_2.num_serie"
" Buffers: local hit=11268"
" -> GroupAggregate (cost=656.21..658.06 rows=57 width=294) (actual time=242.927..256.743 rows=19684 loops=1)"
" Output: at_2.operador, at_2.num_serie, at_2.titulo, n2v_1.cod_titulo, at_2.ticket_code, at_2.ticket_operator_code, n2v_1.titulo_base, count(*), at_2.num_serie"
" Group Key: at_2.operador, at_2.num_serie, n2v_1.titulo_base, at_2.titulo, n2v_1.cod_titulo, at_2.ticket_code, at_2.ticket_operator_code"
" Buffers: local hit=11268"
" -> Sort (cost=656.21..656.35 rows=57 width=254) (actual time=242.917..245.409 rows=25270 loops=1)"
" Output: at_2.operador, at_2.titulo, n2v_1.cod_titulo, at_2.ticket_code, at_2.ticket_operator_code, n2v_1.titulo_base, at_2.num_serie"
" Sort Key: at_2.operador, at_2.num_serie, n2v_1.titulo_base, at_2.titulo, n2v_1.cod_titulo, at_2.ticket_code, at_2.ticket_operator_code"
" Sort Method: quicksort Memory: 4322kB"
" Buffers: local hit=11268"
" -> Nested Loop (cost=5.20..654.54 rows=57 width=254) (actual time=0.923..84.952 rows=25270 loops=1)"
" Output: at_2.operador, at_2.titulo, n2v_1.cod_titulo, at_2.ticket_code, at_2.ticket_operator_code, n2v_1.titulo_base, at_2.num_serie"
" Buffers: local hit=11268"
" -> Seq Scan on pg_temp_6.tt_titulos_n2v_2017 n2v_1 (cost=0.00..3.90 rows=90 width=138) (actual time=0.009..0.028 rows=90 loops=1)"
" Output: n2v_1.ticket_operator_code, n2v_1.ticket_code, n2v_1.cod_titulo, n2v_1.desig_titulo_aml, n2v_1.desig_titulo_otlis_antigo, n2v_1.desig_titulo_otlis_novo, n2v_1.titulo_base, n2v_1.mo (...)"
" Buffers: local hit=3"
" -> Bitmap Heap Scan on pg_temp_6.tt_analise_transac_oper_mes at_2 (cost=5.20..7.22 rows=1 width=180) (actual time=0.756..0.844 rows=281 loops=90)"
" Output: at_2.ctrl_cod_valida, at_2.cod_controlo, at_2.causa, at_2.operador, at_2.ordem, at_2.num_serie, at_2.titulo, at_2.tipo_valida, at_2.data_dia_hora, at_2.cod_carreira, at_2.cod_parag (...)"
" Recheck Cond: (((at_2.ticket_operator_code)::text = n2v_1.ticket_operator_code) AND ((at_2.ticket_code)::text = n2v_1.ticket_code))"
" Heap Blocks: exact=8900"
" Buffers: local hit=11265"
" -> BitmapAnd (cost=5.20..5.20 rows=1 width=0) (actual time=0.742..0.742 rows=0 loops=90)"
" Buffers: local hit=2365"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_operator_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.649..0.649 rows=8149 loops=90)"
" Index Cond: ((at_2.ticket_operator_code)::text = n2v_1.ticket_operator_code)"
" Buffers: local hit=2156"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.041..0.041 rows=361 loops=70)"
" Index Cond: ((at_2.ticket_code)::text = n2v_1.ticket_code)"
" Buffers: local hit=209"
" -> Index Scan using i_km_por_etapa_cod_titulo on pg_temp_6.tt_km_por_etapa_2017 (cost=0.28..2.27 rows=1 width=186) (actual time=0.006..0.017 rows=1 loops=19684)"
" Output: tt_km_por_etapa_2017.cod_titulo, tt_km_por_etapa_2017.titulo, tt_km_por_etapa_2017.titulo_amtl, tt_km_por_etapa_2017.operador, tt_km_por_etapa_2017.etapa_km, tt_km_por_etapa_2017.mes_ref, tt_km_por_etapa_2017.u (...)"
" Index Cond: (tt_km_por_etapa_2017.cod_titulo = (n2v_1.cod_titulo)::text)"
" Filter: (((tt_km_por_etapa_2017.mes_ref)::text = 'maio'::text) AND (at_2.operador = (tt_km_por_etapa_2017.operador)::text))"
" Rows Removed by Filter: 19"
" Buffers: local hit=418233"
" -> Index Scan using i_titulo_base on pg_temp_6.tt_eotb1 tt_eotb1_1 (cost=0.14..0.26 rows=1 width=72) (actual time=0.003..0.004 rows=1 loops=19684)"
" Output: tt_eotb1_1.operador, tt_eotb1_1.titulo_base, tt_eotb1_1.eotb_etapas"
" Index Cond: (tt_eotb1_1.titulo_base = n2v_1.titulo_base)"
" Filter: (at_2.operador = tt_eotb1_1.operador)"
" Buffers: local hit=39368"
" -> Index Scan using i_titulo_base on pg_temp_6.tt_eotb1 at (cost=0.14..0.26 rows=1 width=72) (actual time=0.002..0.003 rows=1 loops=19684)"
" Output: at.operador, at.titulo_base, at.eotb_etapas"
" Index Cond: (at.titulo_base = n2v_1.titulo_base)"
" Filter: (at_2.operador = at.operador)"
" Buffers: local hit=39368"
" -> Index Scan using i_titulo_base on pg_temp_6.tt_eotb1 (cost=0.14..0.26 rows=1 width=72) (actual time=0.002..0.003 rows=1 loops=19684)"
" Output: tt_eotb1.operador, tt_eotb1.titulo_base, tt_eotb1.eotb_etapas"
" Index Cond: (tt_eotb1.titulo_base = n2v_1.titulo_base)"
" Filter: (at_2.operador = tt_eotb1.operador)"
" Buffers: local hit=39368"
" -> GroupAggregate (cost=1329.36..1336.22 rows=1 width=96) (actual time=6.702..318.563 rows=9 loops=19684)"
" Output: at_4.operador, n2v_3.titulo_base, sum((((count(*)))::numeric * ((k_1.etapa_km - ((sum((((count(*)))::numeric * k_2.etapa_km))) / (tt_eotb1_2.eotb_etapas)::numeric)) ^ '2'::numeric)))"
" Group Key: at_4.operador, n2v_3.titulo_base"
" Buffers: local hit=417506055"
" -> Nested Loop (cost=1329.36..1336.19 rows=1 width=128) (actual time=1.359..292.219 rows=19684 loops=19684)"
" Output: at_4.operador, n2v_3.titulo_base, (count(*)), k_1.etapa_km, (sum((((count(*)))::numeric * k_2.etapa_km))), tt_eotb1_2.eotb_etapas"
" Buffers: local hit=417506055"
" -> Nested Loop (cost=1329.22..1335.92 rows=1 width=322) (actual time=1.356..258.881 rows=19684 loops=19684)"
" Output: at_4.operador, n2v_3.titulo_base, (count(*)), k_1.etapa_km, k_1.operador, (sum((((count(*)))::numeric * k_2.etapa_km))), at_3.operador, n2v_2.titulo_base"
" -> Merge Join (cost=1328.95..1333.64 rows=1 width=210) (actual time=1.349..49.552 rows=19684 loops=19684)"
" Output: at_4.operador, n2v_3.titulo_base, (count(*)), n2v_3.cod_titulo, (sum((((count(*)))::numeric * k_2.etapa_km))), at_3.operador, n2v_2.titulo_base"
" Merge Cond: (at_3.operador = at_4.operador)"
" Join Filter: (n2v_3.titulo_base = n2v_2.titulo_base)"
" Rows Removed by Join Filter: 157472"
" Buffers: local hit=22563"
" -> GroupAggregate (cost=672.74..674.98 rows=1 width=96) (actual time=0.042..9.129 rows=9 loops=19684)"
" Output: at_3.operador, n2v_2.titulo_base, sum((((count(*)))::numeric * k_2.etapa_km))"
" Group Key: at_3.operador, n2v_2.titulo_base"
" Buffers: local hit=11295"
" -> Merge Join (cost=672.74..674.96 rows=1 width=88) (actual time=0.013..9.091 rows=41 loops=19684)"
" Output: at_3.operador, n2v_2.titulo_base, (count(*)), k_2.etapa_km"
" Merge Cond: (at_3.operador = (k_2.operador)::text)"
" Join Filter: ((n2v_2.cod_titulo)::text = k_2.cod_titulo)"
" Rows Removed by Join Filter: 3649"
" Buffers: local hit=11295"
" -> GroupAggregate (cost=656.21..657.63 rows=57 width=146) (actual time=0.009..8.138 rows=41 loops=19684)"
" Output: at_3.operador, at_3.titulo, n2v_2.cod_titulo, n2v_2.titulo_base, count(*)"
" Group Key: at_3.operador, n2v_2.titulo_base, at_3.titulo, n2v_2.cod_titulo"
" Buffers: local hit=11268"
" -> Sort (cost=656.21..656.35 rows=57 width=138) (actual time=0.007..2.025 rows=25270 loops=19684)"
" Output: at_3.operador, at_3.titulo, n2v_2.cod_titulo, n2v_2.titulo_base"
" Sort Key: at_3.operador, n2v_2.titulo_base, at_3.titulo, n2v_2.cod_titulo"
" Sort Method: quicksort Memory: 3783kB"
" Buffers: local hit=11268"
" -> Nested Loop (cost=5.20..654.54 rows=57 width=138) (actual time=0.915..84.991 rows=25270 loops=1)"
" Output: at_3.operador, at_3.titulo, n2v_2.cod_titulo, n2v_2.titulo_base"
" Buffers: local hit=11268"
" -> Seq Scan on pg_temp_6.tt_titulos_n2v_2017 n2v_2 (cost=0.00..3.90 rows=90 width=138) (actual time=0.018..0.037 rows=90 loops=1)"
" Output: n2v_2.ticket_operator_code, n2v_2.ticket_code, n2v_2.cod_titulo, n2v_2.desig_titulo_aml, n2v_2.desig_titulo_otlis_antigo, n2v_2.desig_titulo_otlis_novo, n2v_2.titulo_base, n2v_2.mo (...)"
" Buffers: local hit=3"
" -> Bitmap Heap Scan on pg_temp_6.tt_analise_transac_oper_mes at_3 (cost=5.20..7.22 rows=1 width=148) (actual time=0.769..0.867 rows=281 loops=90)"
" Output: at_3.ctrl_cod_valida, at_3.cod_controlo, at_3.causa, at_3.operador, at_3.ordem, at_3.num_serie, at_3.titulo, at_3.tipo_valida, at_3.data_dia_hora, at_3.cod_carreira, at_3.cod_parag (...)"
" Recheck Cond: (((at_3.ticket_operator_code)::text = n2v_2.ticket_operator_code) AND ((at_3.ticket_code)::text = n2v_2.ticket_code))"
" Heap Blocks: exact=8900"
" Buffers: local hit=11265"
" -> BitmapAnd (cost=5.20..5.20 rows=1 width=0) (actual time=0.754..0.754 rows=0 loops=90)"
" Buffers: local hit=2365"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_operator_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.662..0.662 rows=8149 loops=90)"
" Index Cond: ((at_3.ticket_operator_code)::text = n2v_2.ticket_operator_code)"
" Buffers: local hit=2156"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.041..0.041 rows=361 loops=70)"
" Index Cond: ((at_3.ticket_code)::text = n2v_2.ticket_code)"
" Buffers: local hit=209"
" -> Sort (cost=16.53..16.55 rows=9 width=186) (actual time=0.000..0.267 rows=3691 loops=19684)"
" Output: k_2.etapa_km, k_2.operador, k_2.cod_titulo"
" Sort Key: k_2.operador"
" Sort Method: quicksort Memory: 93kB"
" Buffers: local hit=27"
" -> Bitmap Heap Scan on pg_temp_6.tt_km_por_etapa_2017 k_2 (cost=2.35..16.39 rows=9 width=186) (actual time=0.088..0.298 rows=900 loops=1)"
" Output: k_2.etapa_km, k_2.operador, k_2.cod_titulo"
" Recheck Cond: ((k_2.mes_ref)::text = 'maio'::text)"
" Heap Blocks: exact=23"
" Buffers: local hit=27"
" -> Bitmap Index Scan on i_km_por_etapa_mes_ref (cost=0.00..2.34 rows=9 width=0) (actual time=0.078..0.078 rows=900 loops=1)"
" Index Cond: ((k_2.mes_ref)::text = 'maio'::text)"
" Buffers: local hit=4"
" -> Materialize (cost=656.21..658.49 rows=57 width=114) (actual time=0.012..6.667 rows=177148 loops=19684)"
" Output: at_4.operador, (NULL::text), at_4.titulo, n2v_3.cod_titulo, n2v_3.titulo_base, (count(*)), at_4.num_serie"
" Buffers: local hit=11268"
" -> GroupAggregate (cost=656.21..657.77 rows=57 width=210) (actual time=226.933..238.760 rows=19684 loops=1)"
" Output: at_4.operador, NULL::text, at_4.titulo, n2v_3.cod_titulo, n2v_3.titulo_base, count(*), at_4.num_serie"
" Group Key: at_4.operador, at_4.num_serie, n2v_3.titulo_base, at_4.titulo, n2v_3.cod_titulo"
" Buffers: local hit=11268"
" -> Sort (cost=656.21..656.35 rows=57 width=170) (actual time=226.928..228.778 rows=25270 loops=1)"
" Output: at_4.operador, at_4.titulo, n2v_3.cod_titulo, n2v_3.titulo_base, at_4.num_serie"
" Sort Key: at_4.operador, at_4.num_serie, n2v_3.titulo_base, at_4.titulo, n2v_3.cod_titulo"
" Sort Method: quicksort Memory: 4018kB"
" Buffers: local hit=11268"
" -> Nested Loop (cost=5.20..654.54 rows=57 width=170) (actual time=0.847..81.830 rows=25270 loops=1)"
" Output: at_4.operador, at_4.titulo, n2v_3.cod_titulo, n2v_3.titulo_base, at_4.num_serie"
" Buffers: local hit=11268"
" -> Seq Scan on pg_temp_6.tt_titulos_n2v_2017 n2v_3 (cost=0.00..3.90 rows=90 width=138) (actual time=0.009..0.025 rows=90 loops=1)"
" Output: n2v_3.ticket_operator_code, n2v_3.ticket_code, n2v_3.cod_titulo, n2v_3.desig_titulo_aml, n2v_3.desig_titulo_otlis_antigo, n2v_3.desig_titulo_otlis_novo, n2v_3.titulo_base, n2v_3.modalida (...)"
" Buffers: local hit=3"
" -> Bitmap Heap Scan on pg_temp_6.tt_analise_transac_oper_mes at_4 (cost=5.20..7.22 rows=1 width=180) (actual time=0.754..0.838 rows=281 loops=90)"
" Output: at_4.ctrl_cod_valida, at_4.cod_controlo, at_4.causa, at_4.operador, at_4.ordem, at_4.num_serie, at_4.titulo, at_4.tipo_valida, at_4.data_dia_hora, at_4.cod_carreira, at_4.cod_parage, at_ (...)"
" Recheck Cond: (((at_4.ticket_operator_code)::text = n2v_3.ticket_operator_code) AND ((at_4.ticket_code)::text = n2v_3.ticket_code))"
" Heap Blocks: exact=8900"
" Buffers: local hit=11265"
" -> BitmapAnd (cost=5.20..5.20 rows=1 width=0) (actual time=0.740..0.740 rows=0 loops=90)"
" Buffers: local hit=2365"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_operator_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.648..0.648 rows=8149 loops=90)"
" Index Cond: ((at_4.ticket_operator_code)::text = n2v_3.ticket_operator_code)"
" Buffers: local hit=2156"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.040..0.040 rows=361 loops=70)"
" Index Cond: ((at_4.ticket_code)::text = n2v_3.ticket_code)"
" Buffers: local hit=209"
" -> Index Scan using i_km_por_etapa_cod_titulo on pg_temp_6.tt_km_por_etapa_2017 k_1 (cost=0.28..2.27 rows=1 width=186) (actual time=0.004..0.010 rows=1 loops=387459856)"
" Output: k_1.cod_titulo, k_1.titulo, k_1.titulo_amtl, k_1.operador, k_1.etapa_km, k_1.mes_ref, k_1.utilizador, k_1.data, k_1.notas, k_1.caracter, k_1.ticket_code, k_1.ticket_operator_code"
" Index Cond: (k_1.cod_titulo = (n2v_3.cod_titulo)::text)"
" Filter: (((k_1.mes_ref)::text = 'maio'::text) AND (at_4.operador = (k_1.operador)::text))"
" Rows Removed by Filter: 19"
" -> Index Scan using i_titulo_base on pg_temp_6.tt_eotb1 tt_eotb1_2 (cost=0.14..0.26 rows=1 width=72) (actual time=0.001..0.001 rows=1 loops=387459856)"
" Output: tt_eotb1_2.operador, tt_eotb1_2.titulo_base, tt_eotb1_2.eotb_etapas"
" Index Cond: (tt_eotb1_2.titulo_base = n2v_3.titulo_base)"
" Filter: (at_4.operador = tt_eotb1_2.operador)"
" Buffers: local hit=774919712"
" -> GroupAggregate (cost=677.03..679.22 rows=1 width=96) (actual time=0.075..9.010 rows=9 loops=19684)"
" Output: at_5.operador, n2v_4.titulo_base, sum((((count(*)))::numeric * k_3.etapa_km))"
" Group Key: at_5.operador, n2v_4.titulo_base"
" Buffers: local hit=11298"
" -> Merge Join (cost=677.03..679.20 rows=1 width=88) (actual time=0.046..8.977 rows=41 loops=19684)"
" Output: at_5.operador, n2v_4.titulo_base, (count(*)), k_3.etapa_km"
" Merge Cond: (at_5.operador = (k_3.operador)::text)"
" Join Filter: (k_3.cod_titulo = (n2v_4.cod_titulo)::text)"
" Rows Removed by Join Filter: 3649"
" Buffers: local hit=11298"
" -> GroupAggregate (cost=656.21..657.63 rows=57 width=146) (actual time=0.010..8.042 rows=41 loops=19684)"
" Output: at_5.operador, at_5.titulo, n2v_4.cod_titulo, n2v_4.titulo_base, count(*)"
" Group Key: at_5.operador, n2v_4.titulo_base, at_5.titulo, n2v_4.cod_titulo"
" Buffers: local hit=11268"
" -> Sort (cost=656.21..656.35 rows=57 width=138) (actual time=0.007..1.920 rows=25270 loops=19684)"
" Output: at_5.operador, at_5.titulo, n2v_4.cod_titulo, n2v_4.titulo_base"
" Sort Key: at_5.operador, n2v_4.titulo_base, at_5.titulo, n2v_4.cod_titulo"
" Sort Method: quicksort Memory: 3783kB"
" Buffers: local hit=11268"
" -> Nested Loop (cost=5.20..654.54 rows=57 width=138) (actual time=0.887..83.363 rows=25270 loops=1)"
" Output: at_5.operador, at_5.titulo, n2v_4.cod_titulo, n2v_4.titulo_base"
" Buffers: local hit=11268"
" -> Seq Scan on pg_temp_6.tt_titulos_n2v_2017 n2v_4 (cost=0.00..3.90 rows=90 width=138) (actual time=0.011..0.028 rows=90 loops=1)"
" Output: n2v_4.ticket_operator_code, n2v_4.ticket_code, n2v_4.cod_titulo, n2v_4.desig_titulo_aml, n2v_4.desig_titulo_otlis_antigo, n2v_4.desig_titulo_otlis_novo, n2v_4.titulo_base, n2v_4.modalidade, n2v_4.tipo_aml, n2v_ (...)"
" Buffers: local hit=3"
" -> Bitmap Heap Scan on pg_temp_6.tt_analise_transac_oper_mes at_5 (cost=5.20..7.22 rows=1 width=148) (actual time=0.754..0.850 rows=281 loops=90)"
" Output: at_5.ctrl_cod_valida, at_5.cod_controlo, at_5.causa, at_5.operador, at_5.ordem, at_5.num_serie, at_5.titulo, at_5.tipo_valida, at_5.data_dia_hora, at_5.cod_carreira, at_5.cod_parage, at_5.val_inval_excl, at_5.m (...)"
" Recheck Cond: (((at_5.ticket_operator_code)::text = n2v_4.ticket_operator_code) AND ((at_5.ticket_code)::text = n2v_4.ticket_code))"
" Heap Blocks: exact=8900"
" Buffers: local hit=11265"
" -> BitmapAnd (cost=5.20..5.20 rows=1 width=0) (actual time=0.741..0.741 rows=0 loops=90)"
" Buffers: local hit=2365"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_operator_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.648..0.648 rows=8149 loops=90)"
" Index Cond: ((at_5.ticket_operator_code)::text = n2v_4.ticket_operator_code)"
" Buffers: local hit=2156"
" -> Bitmap Index Scan on tt_analise_transac_oper_mes_ticket_code (cost=0.00..2.48 rows=126 width=0) (actual time=0.041..0.041 rows=361 loops=70)"
" Index Cond: ((at_5.ticket_code)::text = n2v_4.ticket_code)"
" Buffers: local hit=209"
" -> Sort (cost=20.82..20.83 rows=4 width=228) (actual time=0.001..0.283 rows=3691 loops=19684)"
" Output: k_3.etapa_km, k_3.cod_titulo, k_3.operador, t.cod_titulo"
" Sort Key: k_3.operador"
" Sort Method: quicksort Memory: 102kB"
" Buffers: local hit=30"
" -> Hash Join (cost=16.50..20.78 rows=4 width=228) (actual time=0.463..0.648 rows=900 loops=1)"
" Output: k_3.etapa_km, k_3.cod_titulo, k_3.operador, t.cod_titulo"
" Hash Cond: ((t.cod_titulo)::text = k_3.cod_titulo)"
" Buffers: local hit=30"
" -> Seq Scan on pg_temp_6.tt_titulos_n2v_2017 t (cost=0.00..3.90 rows=90 width=42) (actual time=0.010..0.017 rows=90 loops=1)"
" Output: t.ticket_operator_code, t.ticket_code, t.cod_titulo, t.desig_titulo_aml, t.desig_titulo_otlis_antigo, t.desig_titulo_otlis_novo, t.titulo_base, t.modalidade, t.tipo_aml, t.tipo_otlis, t.tarifa, t.ultima_actualizacao, (...)"
" Buffers: local hit=3"
" -> Hash (cost=16.39..16.39 rows=9 width=186) (actual time=0.439..0.439 rows=900 loops=1)"
" Output: k_3.etapa_km, k_3.cod_titulo, k_3.operador"
" Buckets: 1024 Batches: 1 Memory Usage: 61kB"
" Buffers: local hit=27"
" -> Bitmap Heap Scan on pg_temp_6.tt_km_por_etapa_2017 k_3 (cost=2.35..16.39 rows=9 width=186) (actual time=0.087..0.283 rows=900 loops=1)"
" Output: k_3.etapa_km, k_3.cod_titulo, k_3.operador"
" Recheck Cond: ((k_3.mes_ref)::text = 'maio'::text)"
" Heap Blocks: exact=23"
" Buffers: local hit=27"
" -> Bitmap Index Scan on i_km_por_etapa_mes_ref (cost=0.00..2.34 rows=9 width=0) (actual time=0.079..0.079 rows=900 loops=1)"
" Index Cond: ((k_3.mes_ref)::text = 'maio'::text)"
" Buffers: local hit=4"
"Planning time: 46.737 ms"
"Execution time: 6452692.457 ms"
On 20-06-2018 23:46, David G. Johnston wrote:
And use some external service like pastebin.com to send long SQL statements.Or just attach a text file - those are allowed on these lists.David J.
-- J. M. Dias Costa Telef. 214026948 Telem. 939307421 Se divulgar esta mensagem por terceiros, por favor: 1. Apague o meu endereço de correio electrónico e o meu nome. 2. Apague também os endereços dos seus amigos antes de distribuir. 3. Enderece como cópia oculta (Cc ou Bcc) para os SEUS destinatários. Agindo deste modo, dificultará a disseminação de "vírus", "spams" e "banners" e contribuirá para manter a privacidade de todos e cada um. Obrigado. Nota: Não se deverá ao acaso a ocorrência de palavras na minha escrita que não respeitem o malfadado acordo ortográfico.
DiasCosta <diascosta@diascosta.org> writes: > This is the query plan for only 19684 rows. I think you're getting a bad query plan, mostly as a result of two factors: * Poor row estimates. It looks like the bottom-most misestimations are on temp tables, which makes me wonder whether you've ANALYZEd those tables. Your application has to do that explicitly after populating the tables; auto-analyze can't help on temp tables. * Too many tables --- I count 33 table scans in this query. You might get better planning results by raising join_collapse_limit and/or from_collapse_limit, but it will come at a cost in planning time, and in any case a query with this many tables is never likely to be cheap. You might want to think about restructuring your schema to not need so many tables, or maybe just do some hand optimization of the query to eliminate unnecessary joins. (It looks to me like at least some of the joins to tt_eotb1 might be unnecessary?) regards, tom lane
Thank you for your prompt answer and help.
It was enough to ANALYZE the temp tables to achieve a magnificent result: 37 seconds.
I'm portuguese.
It's a shame you live so far from me. So I can't put a box of bottles of Porto wine at your door.
I also thank David and Fabrízio for their willingness to help me.
They deserve a bottle of Porto wine each.
Best regards
Dias Costa
On 21-06-2018 22:08, Tom Lane wrote:
DiasCosta <diascosta@diascosta.org> writes:This is the query plan for only 19684 rows.I think you're getting a bad query plan, mostly as a result of two factors: * Poor row estimates. It looks like the bottom-most misestimations are on temp tables, which makes me wonder whether you've ANALYZEd those tables. Your application has to do that explicitly after populating the tables; auto-analyze can't help on temp tables. * Too many tables --- I count 33 table scans in this query. You might get better planning results by raising join_collapse_limit and/or from_collapse_limit, but it will come at a cost in planning time, and in any case a query with this many tables is never likely to be cheap. You might want to think about restructuring your schema to not need so many tables, or maybe just do some hand optimization of the query to eliminate unnecessary joins. (It looks to me like at least some of the joins to tt_eotb1 might be unnecessary?) regards, tom lane
-- J. M. Dias Costa Telef. 214026948 Telem. 939307421 Se divulgar esta mensagem por terceiros, por favor: 1. Apague o meu endereço de correio electrónico e o meu nome. 2. Apague também os endereços dos seus amigos antes de distribuir. 3. Enderece como cópia oculta (Cc ou Bcc) para os SEUS destinatários. Agindo deste modo, dificultará a disseminação de "vírus", "spams" e "banners" e contribuirá para manter a privacidade de todos e cada um. Obrigado. Nota: Não se deverá ao acaso a ocorrência de palavras na minha escrita que não respeitem o malfadado acordo ortográfico.