Chamando a Oracle SP com TableAdapter muito lento

votos
3

Eu tenho uma consulta que corre super rápido quando executado no editor de SQL (Oracle): 1ms.

A mesma pesquisa (como procedimento armazenado) quando executado por um DataSet-TableAdapter leva 2 segundos. Eu só estou recuperando 20rows.

Desde que eu estou usando um TableAdapter, os valores de retorno são armazenados em um cursor ref.

Se eu estava buscando 2'000 linhas que eu poderia entender que algum tempo é necessário para construir o DataSet, mas 2 segundos para apenas 20 linhas parece demais para mim.

Existe uma maneira melhor para executar SP em Oracle ou esta é a única maneira? O que eu poderia tentar fazer para melhorar as performances?

Obrigado pela ajuda!


Pesquisando no Google, parece que o problema é com o refcursor. Outras pessoas enfrentaram o mesmo problema de desempenho, mas nenhuma solução é fornecida.

Publicado 09/12/2008 em 16:00
fonte usuário
Em outras línguas...                            


4 respostas

votos
2

Qual provedor de dados que você usa?

Você referência System.Data.OracleClient ou você usa odp.net (provedor de dados da Oracle para conectar aplicativos .NET com Oracle) ou você usa (anteriormente conhecido como corelab) provedor do devart.

Eu tenho boas experiências com odp.net em combinação com o Oracle 9. Você pode baixar odp.net gratuitamente no site da Oracle. Veja: http://www.oracle.com/technology/tech/windows/odpnet/index.html

Você pode usar a versão mais recente (11.1.0.6.20) para conectar a um banco de dados Oracle 9.

Respondeu 10/12/2008 em 12:28
fonte usuário

votos
0

Está bem. Eu encontrei o que é o problema.

No começo eu pensei que era um problema de DataProvided, mas não era. Eu descobri o mesmo problema em 2000 SQLServer ....

Procurando no google eu descobri algo sobre o plano de execução. Tomar este caminho, eu impulsionou o desempenho da consulta de 50%.

currículo breve do problema é que ao executar um SP por código, o DBMS tem alguns problemas com o plano de execução, e não utiliza os índices ...

Uma resposta melhor é neste post: Parâmetro Sniffing (ou falsificação) no SQL Server

Eu espero que isso te ajude.

Respondeu 12/12/2008 em 11:45
fonte usuário

votos
0

Certifique-se de que você está definindo o CommandTypeque CommandType.StoredProcedure.

Por exemplo (a partir de MSDN ):

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
Respondeu 10/12/2008 em 08:42
fonte usuário

votos
0

Quanto tempo demora quando você usa um datareader em vez de um TableAdaptor? Gostaria de tentar a datareader. Eu nunca encontrou problemas com o datareader.

Respondeu 09/12/2008 em 16:43
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more