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
