AS / 400查询响应时间

时间:2011-07-06 20:39:04

标签: c# .net odbc ibm-midrange

我在做什么......

我通过ODBC连接到AS400(目前我必须使用ODBC)在C#/ .Net应用程序中。 查询很慢。我运行DBmonitor&查询它返回的文件,其中QQIDXA ='Y',我被告知创建已经存在的索引。原因代码是I1& I3。

我已经按照where子句的顺序重建了索引,没有运气。

如何改善AS400查询?

AHIA, LarryR ...

3 个答案:

答案 0 :(得分:3)

首先,一些命名法。 AS / 400是一台非常非常非常老旧的机器。现在有些人坚持用习惯称呼后继车型'AS / 400'。在搜索网络时,这可能会对您不利。 IBM在AS / 400之后制造了几代中端机器。试试iSeries,System i和IBM i。

这些中型机器上的数据库是DB2的一种变体,因此调整与其他任何数据库非常相似。正确的索引通常是数据库性能问题的第一个解决方案。不要只看WHERE子句;考虑任何JOIN ON和ORDER BY。

IBM拥有名为Client Access(iSeries Access,IBM i Access)的软件,该软件具有名为Navigator的免费组件。 Navigator有一个非常好的数据库工具,名为Visual Explain。让中端管理员在您的PC上安装Navigator。

IBM发布了几本可能有帮助的数据库调优红皮书:

答案 1 :(得分:2)

您可能还想考虑在MIDRANGE-L邮件列表上发布您的问题。

那里有很多DB2专家。

答案 2 :(得分:2)

DB2 / 400查询和索引遇到的一个常见问题与字段属性有关。例如,如果您使用不具有相同属性的字段连接两个表,则数据库可能必须在派生临时字段后创建特殊的即时索引。例如,Numeric(8,0)与Decimal(11,3)不同。即使您可以将它们连接在一起,通常也会创建临时索引。可以肯定的是,这是一个烦恼。我经常使用的修复是在join语句中转换我的字段,以便我总是将字段连接在一起,以便使用正确的属性。这是一个例子:

LEFT JOIN DBRQRQH ON DBRQH_COMPANY = DBWHS_COMPANY AND DBRQH_REQ_NUMBER = CAST(DBWHS_DOC_NBR AS NUMERIC(7,0))

对于WHERE子句,有时候 - 虽然不常见 - 也是如此。如果转换连接没有帮助,请尝试使用带有选择条件的CAST。

这是查询性能优化的另一个提示。在通过ODBC连接之后和执行查询之前,在带有断点的调试会话中启动C#程序。然后使用WRKACTJOB JOB(QZDASOINIT)在AS / 400(iSeries)上找到ODBC作业。查找具有您的用户配置文件的作业。或者至少是连接时使用的用户配置文件。当您找到该作业时,请使用这两个命令(从绿色屏幕)将其置于调试模式:

STRSRVJOB JOB(258094/QUSER/QZDASOINIT)

(注意:作业编号将根据您找到的ODBC作业而改变。)

STRDBG UPDPROD(*YES)

然后从C#程序运行查询并检查AS / 400上所选QZDASOINIT作业的作业日志。在处于调试模式的作业中运行SQL时,您将在作业日志中获得各种有用的内容。完成后,请记住运行ENDD​​BG然后运行ENDSRVJOB。