Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibm midrange CPYTOIMPF到qtemp是否比到其他库更快?_Ibm Midrange - Fatal编程技术网

Ibm midrange CPYTOIMPF到qtemp是否比到其他库更快?

Ibm midrange CPYTOIMPF到qtemp是否比到其他库更快?,ibm-midrange,Ibm Midrange,我是一名在IBMAS400V5R4上工作的程序员。我创建了2个CL程序,它们都使用CPYTOIMPF将AS400 PFs列表格式化为字符分隔的文件。它们之间的区别是:一个将文件格式化为qtemp(PGM A),而另一个将文件格式化为qtemp(PGM B)以外的库 我分别调用了2个程序来格式化大约90个文件,总共有大约800万条记录。这两个程序都消耗了超过1300s的CPU时间,而PGM A使用的CPU时间比PGM B少约5%。我试过几次,结果是相似的 我可以知道为什么CPYTOIMPF到qte

我是一名在IBMAS400V5R4上工作的程序员。我创建了2个CL程序,它们都使用CPYTOIMPF将AS400 PFs列表格式化为字符分隔的文件。它们之间的区别是:一个将文件格式化为qtemp(PGM A),而另一个将文件格式化为qtemp(PGM B)以外的库

我分别调用了2个程序来格式化大约90个文件,总共有大约800万条记录。这两个程序都消耗了超过1300s的CPU时间,而PGM A使用的CPU时间比PGM B少约5%。我试过几次,结果是相似的


我可以知道为什么CPYTOIMPF到qtemp的速度比复制到其他库的速度要快,尽管只是有一点不同吗?

如果这里没有答案的话。尝试将其发布到。那里有一个由IBMi(或AS/400)专家组成的大型社区。有人可能会在那里回答这个问题。

有趣的实验


在QTEMP或其他库中创建输出文件时,是否在CRTPF命令上使用SIZE attAttribute?我怀疑在QTEMP中扩展文件的速度比在其他库中快。将SIZE属性中的记录数设置为输入文件上的记录数可能会消除性能差异,因为文件不再需要扩展。

QTEMP始终位于iSeries作业的库列表中(使用正常配置的iSeries)。你做了你的-有趣的是否也要尝试库列表中的库


我不知道usrlibl的syslibl、curlibl是否有任何重要性。

QTEMP及其内容不需要在作业生命周期之外继续存在,因此它可能会被优化为不将内容提交到磁盘或不太频繁地提交到磁盘,也可能不需要为对象更改创建文件系统事务,因为如果系统发生故障,不受控制的QTEMP只会随着工作而消失

此外,QTEMP不需要担心安全性解析和对象控制,因为它是作业的私有部分


这些东西,以及类似的东西,可以使访问QTEMP所需的工作比普通的持久库少。

QTEMP
中,通常只需使用
CRTFILE(*YES)


区别可能只是在重新创建文件之前删除文件的时间,或者更具影响的是清除文件的时间:
MBROPT(*REPLACE)

QTEMP仅在列表中明确包含时才在库列表中,就像任何其他库一样。如果不是,则必须限定对象。只需使用EDTLIBLE并将其移除,即可轻松进行测试。然后在QTEMP中创建一个对象,并尝试无条件地访问它。您应该注意到,它通常会添加到每个*JOBD和系统值quslibl中。(这可能被认为意味着“正常配置的iSeries”,但实际上仍然需要确保它已经完成。)我期望的第一件不同的事情是权限检查。如果QTEMP授权的速度相对较快,我不会感到惊讶,但我不知道有任何文档提到过这一点;有效的性能比较并不容易实现。至少,两个测试变量的顺序应在每次多次迭代中颠倒,并且每次变量的多次运行应在丢弃每次运行的第一次运行后求平均值;然后才进行比较,但比较两者之间的平均值。除最低限度外,应在每次运行之前清除存储池,或在多次迭代的单独测试每次运行之前清除存储池,以便对四个平均结果中的每一个进行比较。@user2338816对于QTEMP来说,权限检查应与任何其他永久库没有区别。尽管名称不同,QTEMP是一个永久对象,在QTEMP中创建的外部对象也是如此;他们可能会被转移到另一个图书馆,所以暂时的将是一个难题。作为用户配置文件属性的一部分,对象可以由切换到用户或指定的私有权限恢复或创建到QTEMP中,并使用程序采用的权限访问——所有其他库都存在同样的问题,因此[几乎可以肯定]在这方面,QTEMP库的任何操作系统代码中都没有捷径。@CRPence在IBM之外很难确定,所以我不能不同意。不过,也有一些奇怪之处,例如,QTEMP的DSPOBJAUT返回CPD2258;所以总是感觉有区别。是的,权限显示的预防措施[?隐藏未被阻止的任何授权更改?]我推断这意味着QTEMP aut通常不由安全组件(SY)检查,但对库的权限只是开销的一小部分,其中大部分是物体。OP肯定是数据,而不是对象\aut相关;i、 用夸张来强调。Aut Chg*CMD对象的重复[not proxy],经过[STRSST\D/A/D]修改,可能会影响GRT\RVK以启用测试;i、 e.“QTEMP不允许”的强制执行在命令中,可能也不在CPP中。QTEMP几乎没有任何不同之处,因此提及的性能差异应该是明显的。性能测试必须非常科学地进行,外行不太可能进行有效的比较。上面提到的减少QTEMP的“安全”和“控制”(我想不出在不显得粗鲁的情况下如何陈述这一点)是站不住脚的;即使在QTEMP中,也必须维护对象级权限\安全性--只有真正的临时对象是免税的[每无所有者],并且QTEMP库和其中的对象都是永久对象。@CRPence,我只是想解释为什么OP可能会看到他所看到的性能差异。由于QTEMP的特殊性质,系统可以通过多种方式优化QTEMP。但很高兴知道,这里有专家在发挥他们(想象中的)影响力。我讲的是我多年来的经验