我想知道在企业库中使用数据库对象对性能的隐含影响是什么。我有一个OleDbCommand(类型=存储过程),它正在调用IBM iSeries存储过程,该过程需要1.5到4.5分钟才能完成。
如果我使用iSeries工具和类似参数手动运行sproc,则大约需要5秒钟。因此,性能下降要么是在与iSeries的网络通信中,要么是企业库中数据库对象中隐藏的某些东西。只是寻找任何想法。
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);
}
最佳答案
我希望它是与iSeries工具和.NET客户端不同的一些奇怪设置,例如:
交易方式?
ansi设置?
其他连接选项? (对于SQL Server,我的意思是类似SET CONCAT_NULL_YIELDS_NULL等)
我对iSeries的了解不多,但是例如对于SQL Server,如果一切都正确,它只能使用“索引的持久性计算所得”列。否则,它将重新计算每行的公式。
您是否尝试过追踪?