From: [email protected]
To: [email protected]
Date: Fri, 7 Feb 2014 14:57:06 +0000
Subject: [pgbr-geral] Diferenças de performance rodando funcao




Boa tarde pessoal!
Estou tentando entender a diferença de performance em duas implementações que 
fazem a mesma coisa, mas ainda não consegui achar uma explicação.
Segue abaixo os dois exemplos, caso alguém possa me ajudar no entendimento:
Tenho um arquivo texto de 12 mil linhas, parte do conteudo abaixo:
SELECT aux_ir_gao_generico ('I', 39700, '1621', '39700', 0);SELECT 
aux_ir_gao_generico ('I', 39700, '1622', '39700', 0);. . .SELECT 
aux_ir_gao_generico ('I', 39700, '1623', '39700', 0);SELECT aux_ir_gao_generico 
('I', 39700, '1624', '39700', 0);
******* Fiz um programa C++ que simplesmente lê o arquivo e executa cada uma de 
suas linhas, a seguir:
main(){
  time_t now;  char l_comando_sql[C_TAM_MAX_LINHA+1];  int resultado_st;  FILE* 
a_arq_executado;
  PGconn   *l_conexao = PQconnectdb(dbname=bd_vas user=vas_user);  PGresult 
*l_result;
  now = time(0);  std::cout << "tempo inicial=" << now << std::endl;
  a_arq_executado = fopen (C_NOME_ARQ_EXECUTADO, "r");  fseek (a_arq_executado, 
0, SEEK_SET);
  for(int cont_linha = 1; (fgets(l_comando_sql, sizeof(l_comando_sql), 
a_arq_executado) != NULL); cont_linha++){    l_result = PQexec(l_conexao, 
l_comando_sql); -- comentando esta linha, fica instantaneo (nao é problema ao 
ler o arquivo)  }
  now = time(0);  std::cout << "tempo final=" << now << std::endl;  }
******* No outro teste, fiz uma funcao postgres e 'embuti' as mesmas queries, a 
seguir:
CREATE FUNCTION insere_gao_mult () RETURNS INTEGER AS'DECLARE  l_retorno 
INT;BEGIN
SELECT into l_retorno aux_ir_gao_generico (''I'', 39700, ''1621'', ''39700'', 
0);SELECT into l_retorno aux_ir_gao_generico (''I'', 39700, ''1622'', 
''39700'', 0);-- omitindo as outras linhas, só 12 mil dentro de uma funcao... 
rsSELECT into l_retorno aux_ir_gao_generico (''I'', 39700, ''1623'', ''39700'', 
0);SELECT into l_retorno aux_ir_gao_generico (''I'', 39700, ''1624'', 
''39700'', 0);
  RETURN 0;
END;' LANGUAGE 'plpgsql';
Rodei um script .sh para chamar a funcao acima.
Tempo do programa C++..................................: 1 minutoTempo 
executando a funcao q contem as linhas do arquivo: 3 segundos
Particularmente, acho muito interessante este tipo de dúvida, e por isso 
resolvi postar aqui....
Pq toda essa diferença no tempo?!?!?! (desculpem a ignorância)
obs: não vou ter funções como a do meu exemplo, é apenas para tentar entender 
alguns conceitos.
Grato,Fabio Barros                                        

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Boa tarde!!!
Pessoal, estou lendo sobre as dúvidas destes dias, e acredito que meu e-mail 
acima acabou 'passando'.
Vcs teriam algo a comentar sobre minha dúvida?
Obrigado e desculpem por pedir novamente, mas já acrescentando outra pergunta: 
faz sentido, em função dessa diferença de tempo, adotar algo do tipo como 
solução?!?!
obs: onde trabalho tb não há DBA Postgresql, e talvez eu seja quem mais conhece 
sobre o banco aqui (porém pouco), mas minha 'facilidade' é mais em modelagem, 
montagem de queries e funções.... e muito menos em administração, mas as 
pessoas confundem.
Grato,Fabio Barros




                                          
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a