>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 list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a