在操作系统OS/400 R220上,命令SETOBJACC可以将物理文件,索引或程序调入存储池,这使得客户可以对存储池内的内容实施一定的控制。这里所说的存储池指的是私有存储池,作业运行的存储池,或者是系统共享的存储池。 这样做的主要目的是为了提高作业以随机的顺序访问某个物理文件,或一系列作业访问相同的物理文件的效率。如果存储池有足够大的空间容纳所有数据,那么一旦对象被装入存储池,所有对文件的读取操作就会在一个读磁盘的周期完成,减少了将数据装入磁盘的时间。从而达到大大提高作业运行效率的目的。 如果一个私有存储池只存放预装的数据,那么这些数据将一直驻留内存直到它们被用命令SETOBJACC,被其它文件覆盖(也使用SETOBJACC命令),或者该存储池被清空(使用CLRPOOL命令)清除出去。我们可以使用命令SETOBJACC *PURGE 将物理文件,索引和程序从主存中(不仅仅是从某个存储池)清除。这也是我们建议的管理存储池内部对象的方法。 以下介绍命令SETOBJACCDE在使用步骤和应该注意的事项,包括该命令如何工作,以及以一个具体使用该命令的实例的效果。 1.1 使用时的注意事项 1.1.1 在使用命令SETOBJACC之前 1. 选择那些在整个作业运行过程中要大量使用I/O并花费大部分作业运行时间的文件,通常是指那些被随机访问的文件(Get by Key); 2. 判断这些物理文件,逻辑文件,或它们的一部分是否能够整个的放进主存,如果不能,判断它们是否都需要立刻放入主存,或者它们可以被单独地装入,这个将由具体的作业流程控制决定; 3. 决定使用哪个存储池:您可以使用作业运行的存储池(我们不建议),系统共享的存储池,或者一个私有的存储池; 我们建议使用私有存储池。如果您使用作业运行的存储池,将不能保证数据驻留内存,因为数据不能够被锁入内存,它们会因为错页而从内存中消失。 如果您打算使用系统共享的存储池,那么请确保您没有使用IBM的QPFRADJ或者任何其它OEM厂商的性能调节工具,因为这些工具会根据错页率自动动态地调节系统共享存储池的大小。 4. 决定您要预先装入数据的存储池的大小。这需要您清楚地知道文件的大小和作业使用这些文件的行为。判断一个物理文件是否适合装入内存,首先应该考虑该文件是否被同步读取(例如:有许多随机读取的动作并且交错I/O很少的文件)的几率很高,并且可以放入内存。顺序I/O的文件将不是一个好的选择; 5. 考虑工作负载压缩的效果 一个作业的运行时间,通常情况下,是由CPU时间和磁盘I/O时间组成。如果使用命令SETOBJACC可以减少磁盘I/O的时间,那么无疑可以缩短整个作业的运行时间。但是。我们应该考虑到,当作业使用的CPU时间还和以前一样,由于磁盘I/O的时间的减少,作业将缩短运行时间。这将使得相应的增加总体的CPU使用率,从而,我们无疑是从一个瓶颈(磁盘I/O)转向另一个瓶颈(CPU能力)。 1.1.2 其它注意事项 1. 对于批处理作业中不同阶段用到的同一个文件,使用SETOBJACC可以用于将该文件在整个处理阶段保存在内存中; 2. 对命令SETOBJACC *PURGE的考虑:如果作业没有使用单独的存储池,并且作业使用 了多个文件,或者这些文件被用在几个顺序的作业阶段中,可以尝试使用该命令。它可以清除在下一个作业步骤中用不到的文件,这样有助于保存几个常用的文件。 3. 如果对批处理过程使用命令SETOBJACC,您应该时常地查看以下作业运行日志,确保预先装入的对象还驻留在存储池中。 1.2 使用步骤 在一个单独的子系统中创建一个私有存储池: 1. 创建子系统描述: CRTSBSD SBSD(name) ((1 size 1)) 2. 启动子系统: STRSBS SBSD(name) 将私有存储池加入已创建的子系统中:(假定子系统中存储池3可用) 1. 将存储池3加入子系统定义: CHGSBSD SBSD(name) ((3 size 1)) 如何确定文件的大小和文件的活动: 1. 文件活动 a. 对于您要调查的文件运行性能工具DSPACCGRP命令,并将结果输出到一个输出文件中; b. 使用性能工具ANZACCGRP命令,分析哪个文件具有最高的I/O特性; 另一个方法是使用命令WRKJOB,选项14.显示打开的文件。该命令可以显示当前打开的文件,并以文件名,I/O操作的数量排列。 2. 文件大小 可以使用DSPFD命令来确定文件的大小。但是通常用SETOBJACC将文件装入内存时所用到的空间大小,将比您用DSPFD命令查看时大20kB - 30KB的记录空间。 如果一个文件中有很多被删除的记录,并且您没有使用"重用删除记录"的选项,那么,最好在做之前,整理这些被删除的记录占用的空间。 将一个程序装入内存时用到的空间将比用DSPOBJD命令中看到的对象大小要少;但是确切使用了多少空间将显示在命令SETOBJACC运行结束后显示的消息CPC1141中。 1.3 如何使用 SETOBJACC 1. 一旦文件被调入内存,数据库读的操作将会很少,但是对于数据库写操作还会和以前一样。数据库写操作通常是异步的。由于文件被调入内存,所以数据库读操作会处理得很快,这样就会造成数据库写操作产生过多的系统输出,这样使得很多数据库写操作回被异步地执行,用户会感觉作业运行并不象预期希望的那样快。经管如此,还是会比不运行SETOBJACC快。 2. 如果一个对象没有全部放入存储池,那么该对象的一部分将在SETOBJACC的过程中被覆盖; 3. 每一次SETOBJACC都会假设整个存储池都是可用的。因此,存储池现存的对象都可能被覆盖,以满足当前的请求。使用SETOBJACC *PURGE功能,可以避免该问题。 4. 对象的装入是异步的,以块来传递磁盘的操作的。 由于SETOBJACC是同时异步提交的,所以如果要装入的对象比存储池大,将不能保证首先装入的部分不被后装入的部分覆盖; 5. 如果一个对象只被装入了一部分,那么会引起作业所在的存储池的错误,同时有可能在处理记录追加时出错; 6. 在没有运行SETOBJACC *PURGE 或 CLRPOOL 之前,数据库写操作是最有可能造成错页的。如果一个存储池中的某个页面是被用命令SETOBJACC保留的,那么只有运行另一条SETOBJACC命令才能将其替代; 7. SETOBJACC命令总是尽可能地在第一次将对象清除出内存的时候将所有的页面放在特定的存储池中,如果有其它作业要使用到这些对象时,它们可能被重新装入另一个存储池中。
阅读(2850) | 评论(0) | 转发(0) |