我的一个运行 7.1 的 i 系统出现了一个奇怪的问题
我正在使用 jdedwards 8.0 作为 erp,但这个问题与我刚刚发现的无关。
经过一番研究,归结为这一点。我在特定表中运行相同的简单选择。第一次我从一个通过 odbc 连接的胖客户端运行它,第二次我通过 STRSQL 运行它。
第一次最多需要 1 秒,第二次需要 4-5 秒。
调试 (STRDBG) 显示在服务器上运行时它有一个已经存在的索引建议!odbc 机器使用它。
我尝试从 erp 和导航器中删除和添加索引,但结果是相同的。
如果我从 STRSQL 为同一个表运行相同的 sql,但在我们的生产库中,它运行得像 odbc 案例一样快。
为我的无知感到抱歉,但我什至离成为一个知道 as400 的人还差得很远……
附言更多信息:
它是我正在运行的一个简单的 SQL:
SELECT * FROM testDTA/F74G0904 WHERE ( WFDCT = 'JE' AND WFDOC =
166823.000000 AND WFKCO = '00003' AND WFDGJ = 114090 AND WFJELN =
1.000000 AND WFLT = 'AA' AND WFEXTL = ' ')
The table has around 10.000.000 in both libraries.
绿屏 - LIB1 - 4 秒
绿屏 - LIB2 - 1 秒
ODBC 客户端 - LIB1 - 1 秒
ODBC 客户端 LIB2 - 1 秒
它似乎同时是特定于库和特定于连接的。
在“GREEN SCREEN - LIB1 - 4 SECS”的情况下,DSPJOBLOG 表明索引已经存在。另外正如我所说,试图删除并创建索引。
在不同的库、优化器和执行计划中查看相同的 eSQL:
谢谢
问题很简单但很难找到。
索引的排序顺序错误。
客户端被错误地配置为使用排序顺序的语言首选项。
因此,在创建索引时,它们具有用于排序的语言规范。
提交作业时,服务器正在寻找具有 *HEX 规范的索引,因此他忽略了现有索引。