【问题标题】:Enterprise Library Database.ExecuteNonQuery hidden performance issues (Connecting to IBM iSeries)Enterprise Library Database.ExecuteNonQuery 隐藏的性能问题(连接到 IBM iSeries)
【发布时间】:2009-01-30 23:17:41
【问题描述】:

我想知道在企业库中使用数据库对象的隐藏性能影响是什么。我有一个 OleDbCommand (type=stored procedue),它正在调用一个 IBM iSeries 存储过程,该过程需要 1.5 到 4.5 分钟才能完成。

如果我使用 iSeries 工具和类似参数手动运行存储过程,则大约需要 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);
}

【问题讨论】:

    标签: c# oledb enterprise-library ibm-midrange


    【解决方案1】:

    我会预计这是一些与 iSeries 工具和 .NET 客户端不同的奇怪设置 - 例如:

    • 交易模式?
    • ANSI 设置?
    • 其他连接选项? (对于 SQL Server,我的意思是 SET CONCAT_NULL_YIELDS_NULL 等)

    我对 iSeries 了解不多,但是以 SQL Server 为例,如果一切都刚刚好,它只能使用“索引持久计算”列;否则它会重新计算每行的公式。

    你试过追踪吗?

    【讨论】:

    • 所有非常好的想法都值得一看。我会看看这些。 +1 给我一些想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2011-09-29
    相关资源
    最近更新 更多