多服务器环境中的共享缓冲区资源不可用问题

2020-08-19 08:54发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我们有一个程序来处理数据(数据大小约100,000条记录(或更多)),并在并行过程中为每个记录进行FI过账,我们需要允许这些过账直到上限 金额达到后,一旦所有过帐的累计金额达到上限金额,则应停止所有后续过帐。

这里的挑战是,我们拥有多服务器生产环境,程序会根据服务器上资源的可用性在应用服务器上分布这些并行过程,由于这些多服务器使跟踪累计数量变得越来越困难 而不会增加性能。

最初,我们想到了跟踪数据库表中的累积量,但是这里的问题是,当某个进程试图更新数据库表时,所有其余进程都必须等待DB表才能更新。 可用于读/写,这将导致很多性能问题,因此我们不希望采用这种方式。

导出到数据库类似的问题-在执行COMMIT之前,其他进程将无法使用数据,这将再次导致性能问题。

我们想尝试共享缓冲区,因为它更快,但是共享缓冲区特定于Application Server,因此我们将累积逻辑放入RFC中,并且始终将RFC定向到 我们在TVARV中维护的特定的指定应用服务器。

以下是我们目前使用此方法所面临的问题

1.当我们与BASIS团队一起审查此解决方案时,出于以下原因,他们不能依靠一台服务器

a)他们对一台特定的指定服务器不满意,因为该服务器可能由于各种原因有时会关闭,

他们的建议是,确定哪个服务器具有可用资源并利用该服务器。 这将对我们不起作用,因为我们最终将在不同服务器上累计金额,这将给我们带来不正确的结果。

2。 由于所有并行进程都试图访问共享缓冲区的特定服务器,因此在PE测试期间,我们发现服务器中的某些资源不可用异常。

这是我们目前面临的两个主要挑战,请提供您对如何解决/克服这些问题的看法/建议。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我们有一个程序来处理数据(数据大小约100,000条记录(或更多)),并在并行过程中为每个记录进行FI过账,我们需要允许这些过账直到上限 金额达到后,一旦所有过帐的累计金额达到上限金额,则应停止所有后续过帐。

这里的挑战是,我们拥有多服务器生产环境,程序会根据服务器上资源的可用性在应用服务器上分布这些并行过程,由于这些多服务器使跟踪累计数量变得越来越困难 而不会增加性能。

最初,我们想到了跟踪数据库表中的累积量,但是这里的问题是,当某个进程试图更新数据库表时,所有其余进程都必须等待DB表才能更新。 可用于读/写,这将导致很多性能问题,因此我们不希望采用这种方式。

导出到数据库类似的问题-在执行COMMIT之前,其他进程将无法使用数据,这将再次导致性能问题。

我们想尝试共享缓冲区,因为它更快,但是共享缓冲区特定于Application Server,因此我们将累积逻辑放入RFC中,并且始终将RFC定向到 我们在TVARV中维护的特定的指定应用服务器。

以下是我们目前使用此方法所面临的问题

1.当我们与BASIS团队一起审查此解决方案时,出于以下原因,他们不能依靠一台服务器

a)他们对一台特定的指定服务器不满意,因为该服务器可能由于各种原因有时会关闭,

他们的建议是,确定哪个服务器具有可用资源并利用该服务器。 这将对我们不起作用,因为我们最终将在不同服务器上累计金额,这将给我们带来不正确的结果。

2。 由于所有并行进程都试图访问共享缓冲区的特定服务器,因此在PE测试期间,我们发现服务器中的某些资源不可用异常。

这是我们目前面临的两个主要挑战,请提供您对如何解决/克服这些问题的看法/建议。

付费偷看设置
发送
4条回答
打一壶酱油
1楼-- · 2020-08-19 09:28

调度程序是否有机会估算程序包的数量(特别是具有或多或少的良好上限)?

然后,您可以考虑使用一个包含关键字段的帮助数据库表

  • 运行ID(调度程序和任务已知)
  • 运行中的任务ID(对于每个任务,由调度程序分配)

和用于成功过帐累计金额的数据字段。

然后调度程序可以跟踪

  • 在助手表中没有条目的已启动任务及其估计的累积量
  • 所有此类程序包的总估算值-启动程序包时需要增加,而在调度程序识别出助手表上的条目时应减去
  • 在帮助者表中具有所有条目的任务的累计累积金额

并根据上述内容和对下一个软件包的估计,可以决定并行启动它,或者等待所有未完成的任务,然后开始以串行方式执行软件包(对于最后一个[few]软件包 ])。

为了减少同步,应最小化DB helper表上的锁定时间(例如,通过将其插入通过PERFORM ON COMMIT调用的子例程中)。

(在通过RFC调用进行并行化的情况下,还有一种方法可以将RFC响应中的累计量发送回-执行中...在任务结束和接收结果等时-但是,响应将不会成为一部分 逻辑工作单元,并且可能在COMMIT WORK之后但在RFC响应之前带来终止的风险-原始方法更安全,因为helper DB表是LUW的一部分)

否则,据我所知,严格遵守上限的要求将始终意味着大量同步,这将大大限制并行化。

小c菟菟
2楼-- · 2020-08-19 09:09

Sandra Rossi 谢谢您的投入,

只是想了解您的答复,每个FI帖子大约要等待10毫秒,所以100,000帖子的等待时间将是100万毫秒-> 1000 s,大约是16分钟,如果我的理解错了,请纠正我。 我知道这是100,000条记录的最坏情况。

这里很少担心,

1)累积/比较逻辑在增强中,我的理解是更新表,并在此处写入COMMIT并不是一个好主意,因为它关闭了当前的LUW。 发布完成后,我想立即提交。

2)要添加更多有关该问题的详细信息,我已经在问题中提到,我们需要允许过帐直到金额上限,该上限是针对不同参数(例如公司代码,工作细目分类)的组合设置的 结构元素等..因此,表最终将增长,我不确定10毫秒是否仍然有效。

3)我正在对此进行频繁的数据库表更新,不确定是否建议这样做。

My梦
3楼-- · 2020-08-19 09:09

是的,您说的很正确1000 s。 我给出了错误的论点; 我想说的是,对于一个持续约1秒,10毫秒的发布来说,并不重要。

1)执行FI发布,更新Z表,然后提交工作。

p>

2)即使Z表中还有其他键列,更新的持续时间与FI过帐的持续时间相比仍然不重要。

3)为什么不? 少于FI发布更新的表数。

ZJXianG
4楼-- · 2020-08-19 09:06

对于共享缓冲区,我不理解"服务器中资源不可用"异常-您能否提供更多详细信息 ?

一周热门 更多>