IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

处理大量记录时达到缓冲区限制


IBM大型机论坛 -> COBOL程式设计
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表:2014年3月31日星期一7:29 pm
引用回复

1.我们收到一个文件,其中包含3种类型的记录,即类型0,类型A和类型B
2.所有Type0,TypeA,Type都包含一个公用密钥。
3.我们将这三种类型分别加载到3个单独的数组中,每个数组最多只能处理5000个条目(即出现5000个条目)
请找到以下示例以更好地理解

输入文件
0 AAA->输入0,这里AAA是以下3的密钥
1 AAA xyz abc-> Type 1
2 AAA def ghi-> Type 2
0 BBB BBB是低于3的关键
1 BBB ghi jkl
2 BBB jkl mno

因此,一旦我们为特定键“ AAA”加载Type0,Type 1和Type 2记录数组,我们将进行一些处理并重置内部表(假定将其清空)
我们将对所有键执行此操作,直到到达文件末尾

我面临的问题:当前由于业务扩展,每个Key收到近2万条记录。我是说
0 AAA
1 AAA .....
1 AAA .....
:
:
:
假设1万
2 AAA .....
2 AAA .....
:
:
:
假设1万
总计20k

2.对于每种类型(Type0,Type 1和Type 2),我们都有一个计数器,在加载内部表时它们会递增1

3.由于超出了内部阵列的大小,我在SOC7变数下获得了SOC7(经分析,我知道它是由于超出阵列限制)

4.我什至尝试增加该限制作为临时解决方案,但是分配给该作业的临时空间受到限制(出现错误“达到缓冲区限制”)
更重要的是,我只是不想增加数组限制,因为我觉得它不是一个好的编码习惯

请给我建议这种情况的可能解决方案,以便将来根据阵列限制处理任意数量的记录

永久解决此问题将非常有帮助

提前致谢。
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表:2014年3月31日星期一7:41 pm
引用回复

你做 需要 所有 密钥的记录存储在 相同 时间?即您是否多次引用记录?如果是这样,您可以仅存储所需的图片吗?如果没有,那么您无需存储它们,只需阅读/处理/阅读下一个
回到顶部
查看用户资料 发送私信
特里·海因兹

JCL主持人


已加入:2008年7月14日
帖子:1249
地点:美国明尼苏达州里奇菲尔德

发布发表:2014年3月31日星期一8:08下午
引用回复

正如Nic所说,请尝试仅存储要存储的记录的所需字段。如今,编译器的限制非常大。请参阅《 COBOL语言参考手册》中的附录B。
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

发布发表:2014年3月31日星期一8:23 pm
引用回复

您好,

引用:
我们将这三种类型加载到3个单独的数组中,每个数组最多可处理5000个条目(即出现5000个条目)
5000是如何确定的?这不是一个很大的数字。 。 。
引用:
更重要的是,我只是不想增加数组限制,因为我觉得它不是一个好的编码习惯
为什么您认为超过5000个不好?

是什么引起“缓冲区限制”错误?

如果输入是“按顺序”,为什么不进行汇总,因为读取了数据并消除了阵列。可能是我误会了一些东西。
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

发布发表:2014年3月31日星期一
引用回复

您需要明确说明“达到缓冲区限制”的含义。

如果表需要容纳20,000个条目,则它需要20,000个条目。实际上,有一个增长预测并确保您不必在短期/中期重新访问同一事物的好习惯。

您有128MB的WORKING-STORAGE。您的记录有多大?

Enterprise COBOL V5.1具有“无限制”表(在编译时未施加限制),但正如其他人所指出的,您是否仍然需要保留所有存储?
回到顶部
查看用户资料 发送私信
比尔·奥博伊尔

CICS主持人


已加入:2008年1月14日
帖子:2504
地点:美国乔治亚州亚特兰大

发布发表:2014年3月31日星期一10:16 pm
引用回复

法案,

我们让IBM的Tom Ross在这里进行了COBOL 5.1概述,所以我问他“ Unbound”是否可以承担DEPENDING ON的PICTURE子句的最大值(在我的示例中是一个未签名的二进制全字),他说是。

我从未发布过我的VSAMXREF子程序,您可以通过COBOL调用该子程序,它使用SHOWCB宏返回目标VSAM文件上的记录数。

嗯...
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2581
地点:美国纽约

发布发表:2014年4月1日(星期二)上午12:43
引用回复

您可能想要在此处进行多线程,根据“类型”分割输入文件,这样,在每个文件中,现在控制记录的文件中只有一个“类型”,然后可以使用调度和在最后将所有输出文件连接到一个文件中。
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

发布发表:2014年4月1日,星期二2:24上午
引用回复

法案,

我想这是有道理的,尽管如果“语言参考”中UNBOUNDED的文档是特定的:-)

对于依赖于的事件:

引用:
OCCURS DEPENDING ON子句
OCCURS DEPENDING ON子句指定可变长度表。
数据名称1
标识OCCURS DEPENDING ON子句的对象;那就是
数据项,其当前值表示当前的数量
主题项目的出现。 发生项目的内容
数字超过对象的值是不确定的
.


甚至更清楚。

因此,UBOUNDED没有特定的最大值,但受OCCURS DEPENDING ON子句中提到的data-name-1限制。
回到顶部
查看用户资料 发送私信
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表时间:2014年4月1日,星期二,12:40 pm
引用回复

大家好,

感谢您的答复

我将尝试这里发布的所有可能的解决方案,并将很快发布我的结果

谢谢和问候
拉杰德拉
回到顶部
查看用户资料 发送私信
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表时间:2014年4月1日,星期二,12:57 pm
引用回复

大家好,

当前,我们仅在程序中对所有3个表使用“ OCCURS DEPENDING”子句。
实际上,当我尝试将数组限制增加到每个表超过10000个时
我在编译时收到以下错误

““工作存储区”的大小超出了“租用”和“数据(24)”编译器选项所允许的16,777,215个字节的限制。 “ DATA(31)”选项被假定为“

该程序存在于过去的15年中。由于业务扩展,我们最近面临这个问题

请让我知道更多信息。做需要的事情

感谢致敬,
拉杰德拉
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

发布发表时间:2014年4月1日,星期二,下午1:38
引用回复

请包括整个错误消息,包括消息开头的错误参考。

您的程序需要DATA(24)吗?使用DATA(31),您将拥有128MB的WORKING-STORAGE,足以容纳每个表20,000多个条目。

如果需要DATA(24),请说明原因。

如果您需要DATA(24),则必须查看将内容缩减到最小的建议。
回到顶部
查看用户资料 发送私信
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表:2014年4月1日,星期二,下午3:39
引用回复

大家好,

那很棒。工作正常。我在程序中编码了DATA(31),即使数组限制已设置为每张表20000条记录,我仍然可以看到编译正常。

但是我在运行时遇到了问题。我有一个错误
“试图将大于16 MB的参数地址传递给AMODE(24)子程序”

不幸的是,我们正在调用在AMODE(24)处定义的子程序,该子程序被我们所在地区的不同应用程序使用

请在这方面帮助我

感谢致敬,
拉杰德拉
回到顶部
查看用户资料 发送私信
比尔·奥博伊尔

CICS主持人


已加入:2008年1月14日
帖子:2504
地点:美国乔治亚州亚特兰大

发布发表时间:2014年4月1日,星期二,下午4:24
引用回复

当31位程序调用24位程序时,您可以做的是编写一个LINKAGE ASSISTANT程序,它是AMODE 31,但建立了一个24位Parmlist来传递给24位子程序,基本上是将直通。

使用GETMAIN或STORAGE OBTAIN宏,在LINKAGE ASSISTANT程序中使用LOC = 24,并将此线下存储用作24位Parmlist,可以轻松地在Assembler中完成此操作。

您可能还需要查看LE Callable Service例程CEEGTST,但是我不确定您可以在LINKAGE ASSISTANT中指定特定的AMODE,因为我相信CEEGTST具有呼叫者的特征。

但是,值得一看。

嗯...
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

发布发表时间:2014年4月1日,星期二,5:30 pm
引用回复

子程序 需要 成为AMODE(24)?它有什么作用?
回到顶部
查看用户资料 发送私信
比尔·奥博伊尔

CICS主持人


已加入:2008年1月14日
帖子:2504
地点:美国乔治亚州亚特兰大

发布发表:2014年4月1日,星期二,下午5:45
引用回复

是的,我赞成比尔的问题。

是否有某些原因需要使被调用的子程序为AMODE 24?

是使用DCB的汇编程序,还是将其早于尘埃的COBOL Abend-Program称为“ ILBOABN0”? icon_eek.gif

您正在使用哪个版本的COBOL?

请指教....
回到顶部
查看用户资料 发送私信
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表:2014年4月1日,星期二,6:51 pm
引用回复

大家好,

费耶

所调用的程序包含retsart逻辑,这些逻辑适用于我所负责的不同应用程序的所有程序

因此,将子程序更改为AMODE(31)可能会影响其他应用程序

有什么方法可以将数据从AMODE(31)程序传递到AMODE(24)程序

让我知道更多信息

提前致谢
拉杰德拉
回到顶部
查看用户资料 发送私信
比尔·奥博伊尔

CICS主持人


已加入:2008年1月14日
帖子:2504
地点:美国乔治亚州亚特兰大

发布发表:2014年4月1日,星期二,下午6:58
引用回复

拉詹德拉·卡莱普(Rajendra Kalepu)询问-

引用:
有什么方法可以将数据从AMODE(31)程序传递到AMODE(24)程序

请查看我以前有关LINKAGE ASSISTANT子程序的答复。

嗯...
回到顶部
查看用户资料 发送私信
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表:2014年4月2日星期三下午1点12分
引用回复

嗨,比尔,

抱歉,我是AMODE(24)和AMODE(31)概念的新手。您能否提供给我一个示例代码,我们将数据从AMODE(31)编译的程序传递到AMODE(24)编译的程序

这样我就可以将其作为参考并进行相应的编码。

我搜索了AMODE(31)/ AMODE(24)的LINKAGE ASSISTANT子程序
但我无法清楚地理解它

请在这方面帮助我。

提前致谢
拉杰德拉·卡勒普(Rajendra Kalepu)
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2581
地点:美国纽约

发布发表:2014年4月2日星期三下午1点31分
引用回复

您是否看过我提出的长期解决建议?
回到顶部
查看用户资料 发送私信
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表:2014年4月2日星期三下午2点21分
引用回复

罗希特(Hi Rohit),

感谢您的建议,但问题是所有3种类型都必须处于同步状态,即Type0,Type1,Type 2

因此,即使我拆分了文件,例如,如果特定键组合的Type 0,Type1,Type 2具有超过5000条记录,该过程也会失败

注意:我无法将同一键的组合拆分为2

提前致谢
拉杰德拉
回到顶部
查看用户资料 发送私信
阿努·达万(Anuj Dhawan)

高级会员


已加入:2006年4月22日
帖子:6250
地点:印度孟买

发布发表:2014年4月2日星期三下午2点30分
引用回复

拉詹德拉·卡勒普(rajendra kalepu)写道:
所调用的程序包含retsart逻辑,这些逻辑适用于我所负责的不同应用程序的所有程序
检查点重启和AMODE(24)/(31)是两个不同的地方 东西 共。你为什么担心他们? icon_confused.gif

当您的应用程序包含COBOL子程序时,某些COBOL子程序可以是AMODE 31,而某些可以是AMODE24。实际上,如果您的应用程序仅包含COBOL程序,并且仅使用静态和动态调用,则-程序员并不需要太费力,因为每个COBOL子程序将始终以正确的AMODE输入。例如,如果您正在使用从AMODE 31 COBOL程序到AMODE 24 COBOL程序的动态调用,则除非使用过程指针,函数指针或其他调用COBOL子程序的语言,否则AMODE将自动切换。

话虽如此,然后尝试在两行之间读取(姿势)-一个非常原始的建议,使用AMODE(31)编译子程序,使用AMODE(31)编译主程序-执行主程序,看看会发生什么。
回到顶部
查看用户资料 发送私信
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表:2014年4月2日,星期三2:37 pm
引用回复

嗨阿努吉,

感谢您提供宝贵的信息。

这里的问题是许多应用程序使用相同的子程序

如果我尝试使用AMODE(31)编译子程序。我可能不确定在AMODE(24)编译的其他应用程序调用此子程序是否会失败。如果我错了请纠正我

让我知道更多信息

感谢致敬,
拉杰德拉·卡勒普(Rajendra Kalepu)
回到顶部
查看用户资料 发送私信
阿努·达万(Anuj Dhawan)

高级会员


已加入:2006年4月22日
帖子:6250
地点:印度孟买

发布发表:2014年4月2日星期三下午3点14分
引用回复

拉詹德拉·卡勒普(rajendra kalepu)写道:
如果我尝试使用AMODE(31)编译子程序。我可能不确定在AMODE(24)编译的其他应用程序调用此子程序是否会失败。如果我错了请纠正我
要获得答案-您需要回答比尔(O'Boyle)和比尔(伍德格)的几个问题,我将重复它们:

1.您正在使用哪个版本的COBOL?
2.对于子程序或其他程序,您真的需要AMODE(24)/ DATA(24)吗?使它们成为AMODE(31)不会伤害您,这是2014年!
回到顶部
查看用户资料 发送私信
拉詹德拉·卡勒普

新的用户


已加入:2011年7月29日
帖子:21
地点:印度

发布发表:2014年4月2日星期三下午3点25分
引用回复

嗨阿努吉

1. IBM Enterprise COBOL for z / OS 4.2.0是我们正在使用的COBOL版本。

2.是的,由于帐户的某些限制,我们无法更改子程序的AMODE

请让我知道更多信息,在此先感谢

问候,
拉杰德拉
回到顶部
查看用户资料 发送私信
比尔·奥博伊尔

CICS主持人


已加入:2008年1月14日
帖子:2504
地点:美国乔治亚州亚特兰大

发布发表:2014年4月2日星期三下午4:49
引用回复

请让我们对这些限制有所了解。正如Anuj所说的,这是2014年,拥有AMODE(24)加载模块至多是陈旧的,尤其是与Enterprise COBOL 4.2一起运行时。

我认为您会发现原来的“好吧,我们总是以这种方式运行”,这是OS / VS COBOL时代(COBOL2之前)的延续。

最好现在解决此问题,因为您将在Enterprise COBOL 5.1中找到其他AMODE(24)限制,该限制现已可用。

不要被裤子压垮。 icon_eek.gif

顺便说一句,这个AMODE(24)子程序是否被其他程序调用?这些呼叫者也是AMODE(24)吗?
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> COBOL程式设计 转到页面 1, 2  下一页

 


类似主题
话题 论坛 回覆
没有新帖 选择多个常量记录 DB2 3
该主题已锁定:您无法编辑帖子或回复。 将匹配的记录写入输出文件 DFSORT / ICETOOL 11
没有新帖 合并两个以上的记录 DFSORT / ICETOOL 15
没有新帖 匹配和不匹配记录使用 DFSORT / ICETOOL 11
没有新帖 删除基于S ...的重复记录 DFSORT / ICETOOL 4
搜索我们的论坛:


回到顶部