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