• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

讨论:关于创建obj时的参数--share

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 21次 | 进入软件测试论坛讨论

领测软件测试网
不知道大家有没有主意到,在创建obj的时候有个系统参数share。它的作用是让运行同一作业的一个或多个程序公用同一个数据通路。简单点说就是多个进程调用只使用同一条到硬盘,内存访问它的路径。缩短了第二次以后打开文件所需要的时间,还能够节省内存占用。

但是,这么一个功能,为什么系统默认参数是*no而不是*yes呢。
不知道大家有没有主意到这个问题。我这里现在没有条件做大负载情况下的测试,来检测修改这个参数对系统性能的影响。大家谁有条件的话测试一下,把结果公布出来。


————希望大家踊跃讨论 :em02:

 yoyoage 回复于:2004-05-19 18:15:01
如果一个文档在相同的作业/活动组中经常需要被多次按照同一种路径来访问,使用share(*yes)固然是个可以节约资源的好方法。
但是,从编程的角度来考虑,会需要注意到这样几个问题:
1。同一个作业中用到的程序,某些是按照键字排列顺序访问数据库文件,而有些则是按照rrn数来打开该文件。因此不能用共享的访问路径。
2。比如,pgm1第一个打开一个文档filex,只对该文档进行read操作;而pgm调用程序pgm2,在pgm2中要对filex进行update/delete操作,那么在pgm1中打开filex的时候,就应该是以updatable/addable的方式(f-specification中定义)。这就需要我们第一次打开一个文件的时候,允许所有的操作,因为pgm2可能还会掉用其它的程序来对filex进行不确定的操作。这样,某些数据的安全性就得不到保障。
3。如果第一次打开filex的时候用到了commit control,那么其后用共享访问路径打开改该文件的程序中都要求用到commitment control.
4。只有第一次带开数据库文件的时候,override ,f-spec才会有用,其后的override,f-spec都被忽略,除非你在OVRDBF中改变了share或者lvlchk的参数。

 e_server 回复于:2004-05-20 00:40:34
说的好,这么详细的解释。高手~~

 mamei 回复于:2004-05-20 07:59:32
呵呵,楼上的开始谦虚了!!!!

 居士 回复于:2004-05-20 08:54:36
yoyoage 解释的,后来我查了一些资料,也是和你解释的差不多。
不过,我是搞系统管理的,对一些开发方面的还是有点模糊,能不能再用通俗一点的,不带有专用术语的语言再解释一下。

我举个例子,对于最简单的400应用--domino。它的数据库为文档型数据库,就是一个一个分开的nsf文件。然后很多用户可能同时调用阅读该文件,比如names.nsf这个数据库。对于非管理员来说,大家只有read的权限那么,可不可以通过share(*yes)来设置它,提高运行效率呢?

 fzrxh 回复于:2004-05-20 11:30:44
我想文檔型數據庫與關係型數據庫做法不一樣把

 居士 回复于:2004-05-20 11:48:05
对,我希望我能能讨论讨论share这个参数对两种数据库的性能影响。
大家继续~

 aeiou 回复于:2004-05-20 13:17:13
应该是创建PF或者LF的时候有这个参数。
我原来有篇贴子说过一些:http://chinaunix.net/jh/10/233584.html

Share的时候如果不注意,程序之间容易产生指针错位的现象,导致程序运行结果异常。所以一般都不会设置成默认值。而是在需要用的时候通过OVRDBF 来修改。

 居士 回复于:2004-05-20 14:22:03
谢谢。
这里我再把aeiou的帖子转贴一下,供大家讨论:

1.ShareODP: 
    在PF或者LF编译的时候,有个SHARE(Share Open Data Path)的参数,控制该文件是否共享其打开路径。 
    如果指定SHARE为*NO的话,程序在每次打开一个文件的时候,都会为该文件建立一次访问路径;如果指定SHARE为*YES的话,程序在第一次打开该文件的时候,系统建立该文件的访问路径,在同一个ActiveGroup中再打开该文件时,就不再重新建立该文件的访问路径,而是共享使用之前建立的路径,从而提高了程序运行的速度。 
    一般在编译的时候该参数设置为*NO,即不是共享打开。在需要共享打开的时候,使用OVRDBF对该参数进行更改。 

使用ShareODP需要注意的一些东西: 
1).由于在不同的ActiveGroup之间不能ShareODP,所以如果几个程序在编译的时候没有加入到同一个ActivationGroup中,ShareODP就不会有什么效果。 
2).如果PGMA打开FILEA并定位到了第一条记录,然后PGMA调用PGMB;PGMB也打开了FILEA并直接读FILEA,将读到第二条记录;PGMB运行完后PGMA又继续读FILEA下一条记录,此时它读到的将是第三条记录。而如果没有ShareODP的话,PGMA两次读到的会是第一条和第二条记录,PGMB读到的会是第一条记录。 

ActiveGroup: 
在CRTPGM 的时候,有个参数ACTGRP(ActivationGroup),控制该PGM在运行的时候属于哪个ActiveGroup。如果指定*NEW,则该PGM会重新建立一个ActiveGroup;如果指定为*CALLER,则该PGM会与调用它的PGM使用同一个ActiveGroup。 

2.UserOpen: 
    RPG程序在使用F表引用外部文件的时候,有一个KeyWords是USROPN。 
    在没有使用USROPN的时候:系统会在每次运行该程序的时候自动打开所引用的文件;一般可以通过设置*LR为*ON来自动关闭文件,但是如果是SubProcedure,系统不会自动关闭所打开的文件。 
如果指定了USROPN:则系统不再控制文件的打开与关闭,由用户手工进行文件的OPEN与CLOSE;如果一个模块已经打开还没有关闭文件的情况下,该模块将不能再对该文件做打开的操作。 
    USROPN比系统自动打开文件要慢一些。在打开同一个文件5000次的情况下,USROPN使用了400毫秒,系统自动打开只用了4毫秒。 

使用UserOpen需要注意的一些东西: 
1).在OPEN之前最好使用 %OPEN(FileName) 检查要打开的文件是否已经打开,如果没有打开再执行OPEN的操作。 
2).CLOSE *ALL的命令可以关闭本模块打开的所有文件。如果一个文件没有指定为USROPN,Close *ALL也将关闭该文件。并且如果该模块是不参与RPG Cycle的程序,如一个SubProcedure,则在第二次运行本模块的时候,该文件将不会再自动打开,此时如果再对该文件做操作,就会出错。所以最好指定文件名来CLOSE,并注意只关闭USROPN的文件。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网