problemas de desempenho escondido Enterprise Library Database.ExecuteNonQuery (Ligar a IBM iSeries)

StackOverflow https://stackoverflow.com/questions/497649

Pergunta

Eu queria saber quais eram as implicações escondidas desempenho do usando o objeto de banco de dados no Enterprise Library. Eu tenho um OleDbCommand (tipo = procedue armazenado) que está chamando um procedimento armazenado IBM iSeries que está tomando em qualquer lugar de 1,5 a 4,5 minutos para ser concluído.

Se eu executar manualmente o sproc usando as ferramentas do iSeries e parâmetros semelhantes, em seguida, leva cerca de 5 segundos. Assim, a diminuição de desempenho é ou na rede de comunicação do iSeries ou algo escondido dentro do objeto de banco de dados dentro da biblioteca da empresa. Basta olhar para todas as idéias.

m_asi = DatabaseFactory.CreateDatabase("ASI-TEST");
using (var cmd = new OleDbCommand())
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = string.Format("{0}.P_VNDR_INV", m_strASISprocCatalog);
    cmd.Parameters.Add("@RUN_ENV", OleDbType.Char, 1).Value = strEnvironmentCode;
    cmd.Parameters.Add("@SIS_KEY", OleDbType.Char, 36).Value = InvFilter.SISKey;
    cmd.Parameters.Add("@FROM_DTE", OleDbType.Char, 8).Value = InvFilter.CheckDateFrom.ToString("yyyyMMdd");
    cmd.Parameters.Add("@TO_DTE", OleDbType.Char, 8).Value = InvFilter.CheckDateTo.ToString("yyyyMMdd");
    cmd.Parameters.Add("@EXT_Y", OleDbType.Char, 1).Value = (InvFilter.IsExternal ? "Y" : "N");
    cmd.Parameters.Add("@INC_Y", OleDbType.Char, 1).Value = (InvFilter.IncludeASI ? "Y" : "N");
    cmd.Parameters.Add("@VND_ID", OleDbType.Char, 1800).Value = InvFilter.GetVendorQueryString(18, 1800);

    // This call is the bottleneck
    m_asi.ExecuteNonQuery(cmd);
}
Foi útil?

Solução

eu esperar que fosse alguma configuração bizarro que é diferente das ferramentas iSeries e o cliente .NET - por exemplo:

  • modo de transação?
  • ansi configurações?
  • outras opções de conexão? (Para SQL Server, eu quero dizer coisas como SET CONCAT_NULL_YIELDS_NULL, etc)

Eu não sei muito sobre iSeries, mas com SQL Server, por exemplo, só pode usar "indexados persistiu calculado" colunas se tudo é apenas para a direita; caso contrário, o re-calcula a fórmula por linha.

Você já tentou deixar vestígios?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top