O seu loop chega até quantos inserts?

Já tive um problema parecido, e o problema eram os índices da tabela. Fazia
um loop que chegava mais de 100.000 inserts em um hardware singelo, e ao
beirar os 20.000 o tempo para execução de cada INSERT individual já começava
a cair drasticamente continuando a cair até o término do processo.

-- 
Tiago J. Adami
Dois Vizinhos - Paraná - Brasil


2009/7/27 Márcio Almeida Bernardino <[email protected]>

>  Pessoal,
>
> está é minha primeira mensagem na lista , e pretendo colaborar com o que
> sei para cada vez mais enriquecer a lista.
>
> Mas de inicio ja tenho um problema, andei pesquisando e nao encontrei nada
> a respeito . Eu tenho uma funcao que faz uma série de inserts e os mesmo vão
> ficando cada vez mais lento (um processo gradativo) , já pesquisei tudo e
> nao consegui solucao.
>
> Este é o trecho que fica lento:
>
>   WHILE v_count < arg_bilhetes_a_gerar LOOP
>
>        v_count_bilhetes_gerados := v_count_bilhetes_gerados + 1;
>
>        v_array_numeros_aposta :=
> fn_gera_num_rand_bilhete(v_jogo_total_numeros_aposta,v_jogo_numero_range_inicial,
> v_jogo_numero_range_final, v_sequence_extracao, v_id_primeira_serie,
> v_id_primeiro_sorteio);
>
>        RAISE NOTICE 'NUMEROS GERADOS --> %', v_array_numeros_aposta;
>
>        FOR v_record_sorteio IN select * from tb_extracoes_sorteios order by
> id limit v_jogo_total_sorteios LOOP
>            FOR v_record_serie IN select * from tb_extracoes_series order by
> id limit v_jogo_total_series  LOOP
>
>               RAISE NOTICE 'GRAVANDO BILHETE % -> SORT. % - SERIE %
> ',v_count_bilhetes_gerados, v_record_sorteio.id, v_record_serie.id;
>               -- Gravando na tabela de bilhetes
>               v_order_extracao_bilhete :=
> nextval('control.seq_extracao_ger_'||currval('control_extracoes_seq')||
> v_record_sorteio.id||v_record_serie.id);
>               INSERT INTO tb_extracoes_bilhetes (fk_extracao_serie,
> fk_extracao, fk_extracao_sorteio,cod_barras_code39, extracao_order, status)
>               VALUES (v_record_serie.id ,v_sequence_extracao,
> v_record_sorteio.id, fn_gera_cod_barra_bilhete(v_sequence_extracao,
> v_record_sorteio.id,v_record_serie.id,v_order_extracao_bilhete ) ,
> v_order_extracao_bilhete, 'ABERTO');
>               v_sequence_bilhete :=
> currval('tb_extracoes_detalhes_id_seq');
>
>               -- Gravando as fracoes
>               FOR v_count_fracoes IN 1..v_jogo_total_fracoes LOOP
>                   INSERT INTO tb_extracoes_bilhetes_fracoes (fracao,
> fk_extracao_bilhete, fk_extracao, cod_barras_code39)
>                   VALUES (v_count_fracoes + 1, v_sequence_bilhete,
> v_sequence_extracao, fn_gera_cod_barra_bilhete_fracao(v_sequence_extracao,
> v_record_sorteio.id,v_record_serie.id,v_order_extracao_bilhete,
> v_count_fracoes +1) );
>               END LOOP;
>
>               -- Gravando os numeros
>               v_count_numeros := 0;
>               FOR  v_count_numeros IN 0..v_jogo_total_numeros_aposta-1
> LOOP
>
>                        INSERT INTO tb_extracoes_bilhetes_numeros
> (num_aposta, fk_extracao, fk_extracao_bilhete)
>                        VALUES (v_array_numeros_aposta[v_count_numeros],
> v_sequence_extracao, v_sequence_bilhete );
>               END LOOP;
>
>
>               -- Finalizando o bilhete
>
>            END LOOP;
>        END LOOP;
>
>    END LOOP;
>
>
> ------------------------------
> Compartilhe os momentos mais importantes da sua vida com quem você 
> quiser.<http://www.microsoft.com/brasil/windows/windowslive/products/photos-share.aspx?tab=1>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a