Pode ajudar tambem

aumentar o work_mem


set work_mem to ' '





Em 4 de março de 2011 12:15, Fabiano Machado Dias <
fabi...@wolaksistemas.com.br> escreveu:

>  Primeiro, HD Sata de 5400 não dá né! Coloque SAS de 15k pelo menos!
>
> Segundo, troque os SELECT IN por EXISTS ou encadeie novamente o SELECT para
> usar LEFT JOIN, outra coisa que você pode fazer é primeiro trazer os dados e
> depois aplicar as conversões.
>
> Abraço,
> Fabiano Machado Dias
>
> Em 4/3/2011 07:55, Irineu Raymundo escreveu:
>
>  Como o Euler disse, fica muito difícil imaginar o que a sua rotina está 
> fazendo. Se for um processo crítico para você, >recomendo contratar uma 
> consultoria para avaliar o problema. Podemos dar algumas dicas aqui, mas os 
> seus problemas >podem começar na configuração do PostgreSQL, passando por 
> problemas de modelagem e possivelmente de reescrita do >procedimento com o um 
> todo.
>
> Sem enxergar o processo como um todo, fica muito difícil lhe ajudar. Já fiz 
> este tipo de trabalho para várias vezes e >sei como é difícil ajudar sem ter 
> uma visão global do problema. Tenho certeza de que você vai encontrar ótimos 
> >profissionais por aqui.
>
> Agora, se você puder mostra todo o processo aqui, então poderemos lhe dar 
> algumas idéias, claro.
>
> --
>
>
>
> Prezado Fábio,
>
> Obrigado pela ajuda, vou seguir o teu conselho e sugerir uma consultoria para 
> avaliar o problema.
>
> De qualquer forma consegui levantar alguma informações,o problema se resume a 
> 2 comandos SQL.
>
> abaixo segue os comandos.Poderia a falta de um índice mais apropriado causar 
> essa demora toda na execução dele?
>
> Os shared_buffers do postgres não tem valor de memória significativo alocada, 
> o postgres tá dependendo totalmente do sistema operacional para o 
> gerenciamento de memória.
>
> Servidor: OS Linux RedHat Interprise 5,  2  HD's SATA 5200rpm fazendo raide 
> 1, 4GB RAM.
> PostgreSQL 8.3 ,base com 19GB aproximadamente.
>
> O processo problemático iniciou aproximadamente as 13:17 de ontem e terminou 
> as 15:04.
>
> O Postgres usou 3,7 GB de RAM.
>
> Foi alterado a  configuracao do PostgreSQL para reportar nos logs todo 
> comando SQL cujo tempo de execucao ultrapesse 500ms.
>
> Gerou 1.534 comandos SQL no log, indicando que esse processo executou 
> aproximadamente 1.500 comandos SQL com tempo superior a 500ms. O log aponta 
> que estes comandos se resumem a apenas 2 comandos SQL, um sendo executado 513 
> vezes e o outro 1019.
>
> Essa tabela tem (ind_03_03_02_01_01) tem 840MB.
>
> Os dois comandos SQL sao:
> 1019 vezes:
> SELECT DISTINCT
>                CAST(array_to_string(ARRAY(SELECT op2.tamanho || '/' || 
> CAST(SUM(op2.quantidade) AS VARCHAR)
>                                             FROM senda.ind_03_03_02_01_01 op2
>                                            WHERE op2.tamanho <> '' AND
>                                                  op2.remessa = op.remessa AND
>                                                  op2.cod_componente = 
> op.cod_componente AND
>                                                  op2.cod_material = 
> op.cod_material AND
>                                                  op2.cod_cor = op.cod_cor AND
>                                                 op2.cod_op IN
>                                                (SELECT op3.cod_op
>                                                   FROM 
> senda.ind_03_03_02_01_02_a1 op3
>                                                  WHERE op3.remessa = 
> op2.remessa AND
>                                                         op3.op_aux2 =0 AND
>                                                        op3.usuario = '' AND
>                                                        op3.sequencia_comp = 0)
>                                         GROUP BY op2.remessa, 
> op2.cod_componente, op2.cod_material, op2.cod_cor, op2.tamanho
>                                         ORDER BY op2.remessa, 
> op2.cod_componente, op2.cod_material, op2.cod_cor, op2.tamanho
>                                          ), '   ') AS VARCHAR) AS grade
>           FROM senda.ind_03_03_02_01_01 op
>          WHERE op.tamanho <> '' AND
>                op.remessa IN (SELECT op3.remessa
>                                 FROM senda.ind_03_03_02_01_02_a1 op3
>                                WHERE op3.remessa = op.remessa AND
>                                      op3.op_aux2 = 0 AND
>                                      op3.sequencia_comp = 0 AND
>                                      op3.usuario =  '')  AND
>                op.cod_componente = '' AND
>                op.cod_material = '' AND
>                op.cod_cor = 0;
>
> 513 vezes:
> SELECT  op.numero,
>  op.quantidade
>  FROM senda.ind_03_03_02_01_02 op
>  WHERE op.remessa IN(SELECT op2.remessa
>   FROM senda.ind_03_03_02_01_02_a1 op2
>   WHERE op2.remessa = op.remessa
>         AND op2.sequencia_comp = 54
>         AND op2.op_aux2 = 392
>         AND op2.usuario = 'adriel')
>         AND op.cod_op IN
>   (SELECT op2.cod_op
>    FROM senda.ind_03_03_02_01_02_a1 op2
>    WHERE op2.remessa = op.remessa AND
>          op2.sequencia_comp = 54 AND
>          op2.op_aux2 =392 AND
>          op2.usuario = 'adriel')
> order by numero;
>
> Os explain analyze referente a ambos comandos:
>
> Comando 1:
>  Sort  (cost=3197917.93..3198379.07 rows=184457 width=7) (actual 
> time=4255.189..4255.189 rows=0 loops=1)
>    Sort Key: op.numero
>    Sort Method:  quicksort  Memory: 25kB
>    ->  Seq Scan on ind_03_03_02_01_02 op  (cost=0.00..3181784.47 rows=184457 
> width=7) (actual time=4255.150..4255.150 rows=0 loops=1)
>          Filter: ((subplan) AND (subplan))
>          SubPlan
>            ->  Index Scan using ind_03_03_02_01_02_a1_idx_01 on 
> ind_03_03_02_01_02_a1 op2  (cost=0.00..4.28 rows=1 width=4) (never executed)
>                  Index Cond: (((usuario)::text = 'adriel'::text) AND 
> ((remessa)::text = ($0)::text) AND (sequencia_comp = 54) AND (op_aux2 = 392))
>            ->  Index Scan using ind_03_03_02_01_02_a1_idx_01 on 
> ind_03_03_02_01_02_a1 op2  (cost=0.00..4.28 rows=1 width=11) (actual 
> time=0.004..0.004 rows=0 loops=737828)
>                  Index Cond: (((usuario)::text = 'adriel'::text) AND 
> ((remessa)::text = ($0)::text) AND (sequencia_comp = 54) AND (op_aux2 = 392))
>  Total runtime: 4255.255 ms
> (11 rows)
>
> Comando 2:
>  Unique  (cost=165144.44..165144.45 rows=1 width=27) (actual 
> time=5142.882..5142.882 rows=0 loops=1)
>    ->  Sort  (cost=165144.44..165144.45 rows=1 width=27) (actual 
> time=5142.880..5142.880 rows=0 loops=1)
>          Sort Key: ((array_to_string((subplan), '   '::text))::character 
> varying)
>          Sort Method:  quicksort  Memory: 25kB
>          ->  Index Scan using ind_03_03_02_01_01_idx6 on ind_03_03_02_01_01 
> op  (cost=0.00..165144.43 rows=1 width=27) (actual time=5142.810..5142.810 
> rows=0 loops=1)
>                Index Cond: (((cod_componente)::text = ''::text) AND 
> ((cod_material)::text = ''::text) AND (cod_cor = 0))
>                Filter: (((tamanho)::text <> ''::text) AND (subplan))
>                SubPlan
>                  ->  Index Scan using ind_03_03_02_01_02_a1_idx_01 on 
> ind_03_03_02_01_02_a1 op3  (cost=0.00..4.28 rows=1 width=11) (never executed)
>                        Index Cond: (((usuario)::text = ''::text) AND 
> ((remessa)::text = ($2)::text) AND (sequencia_comp = 0) AND (op_aux2 = 0))
>                  ->  GroupAggregate  (cost=7.25..7.29 rows=1 width=33) (never 
> executed)
>                        ->  Sort  (cost=7.25..7.25 rows=1 width=33) (never 
> executed)
>                              Sort Key: op2.remessa, op2.cod_componente, 
> op2.cod_material, op2.cod_cor, op2.tamanho
>                              ->  Index Scan using ind_03_03_02_01_01_idx6 on 
> ind_03_03_02_01_01 op2  (cost=0.00..7.24 rows=1 width=33) (never executed)
>                                    Index Cond: (((remessa)::text = 
> ($2)::text) AND ((cod_componente)::text = ($3)::text) AND 
> ((cod_material)::text = ($4)::text) AND (cod_cor = $5))
>                                    Filter: (((tamanho)::text <> ''::text) AND 
> (subplan))
>                                    SubPlan
>                                      ->  Index Scan using 
> ind_03_03_02_01_02_a1_idx_01 on ind_03_03_02_01_02_a1 op3  (cost=0.00..4.28 
> rows=1 width=4) (never executed)
>                                            Index Cond: (((usuario)::text = 
> ''::text) AND ((remessa)::text = ($0)::text) AND (sequencia_comp = 0) AND 
> (op_aux2 = 0))
>  Total runtime: 5143.021 ms
> (20 rows)
>
>
> ------------------------------------------------------------------------------------------
> ------------------
> Esta mensagem foi verificada pelo sistema de Seguran�a da SJB Solados Ltda.
>
>
>
> _______________________________________________
> pgbr-geral mailing 
> listpgbr-ge...@listas.postgresql.org.brhttps://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a