首页
学习
活动
专区
圈层
工具
发布

CICS优化
EN

Stack Overflow用户
提问于 2022-08-16 20:43:34
回答 1查看 61关注 0票数 0

我有一个CICS程序,它将读取一个DB2表以获得基于字段名的规则。假设我的记录类型是AA,这种类型至少有20个规则,我需要在DB2表中循环这些规则。像wise一样,我几乎没有记录类型,而且每种类型都有更多的规则。

我从MQ获得数据,对于每种记录类型,我都调用了单独的CICS程序。因此,当我不得不处理高负载时,DB2规则表被这么多程序所持有,这就导致了性能问题。

我想摆脱DB2,在Container中加载这个规则,并定期维护。但我不确定这是否有效。我不想使用或创建VSAM,我在CICS中寻找某种可以使用和维护的存储。

我的问题是。如果我创建了一个管道和容器,我是否能够同时通过多个程序访问它们,并且在成功获取之后数据存储规则是否会保存在容器中?

EN

回答 1

Stack Overflow用户

发布于 2022-08-19 14:49:34

在进一步阅读之前,请理解DB2非常有效地解决了所有共享和锁定问题。我从未遇到过太多事务试图并发读取DB2表的问题。更新,是的;更新和读取的混合,是的;只是阅读,不。

因此,为了在CICS中实现您自己的DB2表缓存,您需要一个数据存储。正如@BruceMartin所指出的,TS队列是一个选项,考虑到您的其他约束,它是您唯一的选择。

为了自动化这一点,您必须在DB2表上创建一个触发器,该触发器在插入、更新或删除之后触发。触发器必须导致重新填充TS队列。重新填充机制可以是EXCI或MQ,因为执行重新填充的代码必须在CICS中执行。

在重新填充期间,读取TS队列的所有事务都必须等待重新填充完成。这可以通过来完成,但有一个警告。为了防止所有这些事务通过由于总是ENQing而读取的TS队列进行单线程处理,我建议使用两个TS队列,一个保存DB2数据,另一个保存“触发器”TS队列。触发器TS队列的内容并不显着,您可以存储时间戳,或者"Hello,World“或"ABC”--没关系。

正常事务尝试读取触发器TS队列。如果读取失败,事务只需使用DB2数据读取TS队列。但是,如果读取成功,则重新填充正在进行,事务在资源(称为XYZ)上进行。从ENQ返回时,使用DB2数据读取TS队列。

在重新填充期间,由DB2表上的触发器执行的程序在CICS中执行。首先在资源XYZ上创建ENQing,然后创建触发器TS队列,然后使用DB2数据删除TS队列,然后创建TS队列并使用新的DB2数据填充它,删除触发器TS队列,最后删除DEQing资源XYZ。我强烈建议使用多行选择来获取DB2数据,因为它比传统的打开游标、提取、关闭游标方法效率要高得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73380102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档