> Só por curiosidade, qual a diferença do de tempo de execução do SQL
original com o compilado (com os casts) agora, depois do VACUUM?

Agora depois do vacuum ficou instantâneo os 2 sql's, segue ae os 2 planos
de execução depois do vacuum.

Em termos de tempo, os sqls sem cast eram praticamente iguais antes e
depois do vacuum (404.419 ms), o problema era no que havia casts
(Consequentemente nas view's), antes do vacuum demorava 195556.620 ms
(pouco mais de 3 minutos), agora demora 261.405 ms (Menos de 1 segundo).

O plano de execução mudou totalmente depois do vacuum.

Para outro teste, fiz um backup e restore desta base, após o restore
executei o sql e estava lento novamente, fazendo o vacuum novamente voltou
a ficar rápido.
Conclusão: Sempre depois de fazer um retore faça um vacuum também.




*========================== PLANO DE EXECUÇÃO SEM O CAST
=============================*

Hash Left Join  (cost=7388.52..10174.38 rows=25044 width=377) (actual
time=157.818..250.086 rows=25044 loops=1)
  Hash Cond: (((l.cd_loja)::integer = (pl.cd_loja)::integer) AND
((l.cd_produto)::integer = (pfi.cd_produto)::integer))
  ->  Hash Join  (cost=1426.10..3335.42 rows=25044 width=339) (actual
time=40.026..104.254 rows=25044 loops=1)
        Hash Cond: ((p.cd_produto)::integer = (l.cd_produto)::integer)
        ->  Seq Scan on tb_produto p  (cost=0.00..1408.44 rows=25044
width=131) (actual time=0.012..26.460 rows=25044 loops=1)
        ->  Hash  (cost=1113.05..1113.05 rows=25044 width=212) (actual
time=39.955..39.955 rows=25044 loops=1)
              Buckets: 4096  Batches: 1  Memory Usage: 2622kB
              ->  Seq Scan on tb_produto_loja l  (cost=0.00..1113.05
rows=25044 width=212) (actual time=0.018..23.521 rows=25044 loops=1)
                    Filter: ((cd_loja)::integer = 1)
  ->  Hash  (cost=5586.76..5586.76 rows=25044 width=46) (actual
time=117.740..117.740 rows=25044 loops=1)
        Buckets: 4096  Batches: 1  Memory Usage: 1212kB
        ->  Nested Loop  (cost=2325.70..5586.76 rows=25044 width=46)
(actual time=28.974..108.834 rows=25044 loops=1)
              ->  Seq Scan on tb_uf u  (cost=0.00..1.35 rows=1 width=0)
(actual time=0.011..0.017 rows=1 loops=1)
                    Filter: ((cd_uf)::bpchar = 'MT'::bpchar)
              ->  Nested Loop  (cost=2325.70..5334.97 rows=25044 width=46)
(actual time=28.959..104.463 rows=25044 loops=1)
                    ->  Index Scan using tb_loja_pkey on tb_loja l
 (cost=0.00..4.27 rows=1 width=4) (actual time=0.017..0.020 rows=1 loops=1)
                          Index Cond: ((cd_loja)::integer = 1)
                    ->  Hash Left Join  (cost=2325.70..5080.26 rows=25044
width=46) (actual time=28.934..100.686 rows=25044 loops=1)
                          Hash Cond: ((pfi.cd_figura_icms)::integer =
(fi.cd_figura_icms)::integer)
                          ->  Hash Join  (cost=2311.20..4721.40 rows=25044
width=12) (actual time=28.655..84.291 rows=25044 loops=1)
                                Hash Cond: ((p.cd_produto)::integer =
(pfi.cd_produto)::integer)
                                ->  Hash Join  (cost=1426.10..3335.42
rows=25044 width=12) (actual time=12.675..45.880 rows=25044 loops=1)
                                      Hash Cond: ((p.cd_produto)::integer =
(pl.cd_produto)::integer)
                                      ->  Seq Scan on tb_produto p
 (cost=0.00..1408.44 rows=25044 width=4) (actual time=0.005..9.801
rows=25044 loops=1)
                                      ->  Hash  (cost=1113.05..1113.05
rows=25044 width=8) (actual time=12.613..12.613 rows=25044 loops=1)
                                            Buckets: 4096  Batches: 1
 Memory Usage: 979kB
                                            ->  Seq Scan on tb_produto_loja
pl  (cost=0.00..1113.05 rows=25044 width=8) (actual time=0.009..7.001
rows=25044 loops=1)
                                                  Filter:
((cd_loja)::integer = 1)
                                ->  Hash  (cost=572.05..572.05 rows=25044
width=16) (actual time=15.953..15.953 rows=25044 loops=1)
                                      Buckets: 4096  Batches: 1  Memory
Usage: 979kB
                                      ->  Seq Scan on
tb_produto_uf_figura_icms pfi  (cost=0.00..572.05 rows=25044 width=16)
(actual time=0.010..9.638 rows=25044 loops=1)
                                            Filter: (((cd_figura_icms IS
NOT NULL) OR (cd_figura_icms_producao_propria_up IS NOT NULL)) AND
((cd_uf)::bpchar = 'MT'::bpchar))
                          ->  Hash  (cost=9.78..9.78 rows=378 width=13)
(actual time=0.232..0.232 rows=378 loops=1)
                                Buckets: 1024  Batches: 1  Memory Usage:
18kB
                                ->  Seq Scan on tb_figura_icms fi
 (cost=0.00..9.78 rows=378 width=13) (actual time=0.027..0.125 rows=378
loops=1)
Total runtime: 253.011 ms

*========================== PLANO DE EXECUÇÃO COM O CAST
=============================*

Hash Left Join  (cost=7447.87..10233.73 rows=25044 width=377) (actual
time=166.024..258.455 rows=25044 loops=1)
  Hash Cond: (((l.cd_loja)::integer = (pl.cd_loja)::integer) AND
((l.cd_produto)::integer = (pfi.cd_produto)::integer))
  ->  Hash Join  (cost=1426.10..3335.42 rows=25044 width=339) (actual
time=45.780..109.989 rows=25044 loops=1)
        Hash Cond: ((p.cd_produto)::integer = (l.cd_produto)::integer)
        ->  Seq Scan on tb_produto p  (cost=0.00..1408.44 rows=25044
width=131) (actual time=0.011..26.463 rows=25044 loops=1)
        ->  Hash  (cost=1113.05..1113.05 rows=25044 width=212) (actual
time=45.715..45.715 rows=25044 loops=1)
              Buckets: 4096  Batches: 1  Memory Usage: 2622kB
              ->  Seq Scan on tb_produto_loja l  (cost=0.00..1113.05
rows=25044 width=212) (actual time=0.017..23.723 rows=25044 loops=1)
                    Filter: ((cd_loja)::integer = 1)
  ->  Hash  (cost=5646.11..5646.11 rows=25044 width=46) (actual
time=120.191..120.191 rows=25044 loops=1)
        Buckets: 4096  Batches: 1  Memory Usage: 1212kB
        ->  Nested Loop  (cost=2325.70..5646.11 rows=25044 width=46)
(actual time=29.348..111.242 rows=25044 loops=1)
              ->  Seq Scan on tb_uf u  (cost=0.00..1.35 rows=1 width=0)
(actual time=0.011..0.017 rows=1 loops=1)
                    Filter: ((cd_uf)::bpchar = 'MT'::bpchar)
              ->  Hash Left Join  (cost=2325.70..5394.32 rows=25044
width=46) (actual time=29.329..106.709 rows=25044 loops=1)
                    Hash Cond: ((pfi.cd_figura_icms)::integer =
(fi.cd_figura_icms)::integer)
                    ->  Nested Loop  (cost=2311.20..5035.46 rows=25044
width=12) (actual time=29.055..90.346 rows=25044 loops=1)
                          Join Filter: ((pl.cd_loja)::integer =
(l.cd_loja)::integer)
                          ->  Seq Scan on tb_loja l  (cost=0.00..1.01
rows=1 width=4) (actual time=0.005..0.006 rows=1 loops=1)
                          ->  Hash Join  (cost=2311.20..4721.40 rows=25044
width=12) (actual time=29.045..84.745 rows=25044 loops=1)
                                Hash Cond: ((p.cd_produto)::integer =
(pfi.cd_produto)::integer)
                                ->  Hash Join  (cost=1426.10..3335.42
rows=25044 width=12) (actual time=13.077..45.532 rows=25044 loops=1)
                                      Hash Cond: ((p.cd_produto)::integer =
(pl.cd_produto)::integer)
                                      ->  Seq Scan on tb_produto p
 (cost=0.00..1408.44 rows=25044 width=4) (actual time=0.006..9.590
rows=25044 loops=1)
                                      ->  Hash  (cost=1113.05..1113.05
rows=25044 width=8) (actual time=13.022..13.022 rows=25044 loops=1)
                                            Buckets: 4096  Batches: 1
 Memory Usage: 979kB
                                            ->  Seq Scan on tb_produto_loja
pl  (cost=0.00..1113.05 rows=25044 width=8) (actual time=0.008..7.458
rows=25044 loops=1)
                                                  Filter:
((cd_loja)::integer = 1)
                                ->  Hash  (cost=572.05..572.05 rows=25044
width=16) (actual time=15.943..15.943 rows=25044 loops=1)
                                      Buckets: 4096  Batches: 1  Memory
Usage: 979kB
                                      ->  Seq Scan on
tb_produto_uf_figura_icms pfi  (cost=0.00..572.05 rows=25044 width=16)
(actual time=0.009..9.583 rows=25044 loops=1)
                                            Filter: (((cd_figura_icms IS
NOT NULL) OR (cd_figura_icms_producao_propria_up IS NOT NULL)) AND
((cd_uf)::bpchar = 'MT'::bpchar))
                    ->  Hash  (cost=9.78..9.78 rows=378 width=13) (actual
time=0.225..0.225 rows=378 loops=1)
                          Buckets: 1024  Batches: 1  Memory Usage: 18kB
                          ->  Seq Scan on tb_figura_icms fi
 (cost=0.00..9.78 rows=378 width=13) (actual time=0.027..0.123 rows=378
loops=1)
Total runtime: 261.405 ms
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a