SAP Shared Memory的使用方法

SAP Shared Memory的使用方法

下图为SAP内存体系架构名,可见Shared Memory位于数据库之上、用户内存之间,主要用于解决在不同用户中间传值的问题。

我们知道,ABAP Memory主要是用于同一个用户同一个会话内部的数据传递,User Memory(也叫SAP Memory)主要是用于同一个用户同一次登录不同会话之间的值传递,而Shared Memory则是用于同一个SAP应用内不同用户之间的数据传递。

共享内存区域(特定的类和方法在用户间传递值) > User内存(parameter在external session间传递值) > ABAP内存(memory id在internal session间传递值) > 运行时内存(程序里的变量间传值).

SAP memory使用SET/GET parameters

SET PARAMETER ID ‘BUK’ FIELD IV_BUKRS.

GET PARAMETER ID ‘BUK’ FIELD IV_BUKRS.

Parameter存放在表TPARA中,SM30可维护这个表。在SE11维护数据元素时维护,这样程序中就能使用了。

ABAP Memory使用EXPORT 和IMPORT

EXPORT E_TAB TO MEMORY ID G_MEMORY.

EXPORT I_TAB FROM MEMORY ID G_MEMORY.

注意:E_TAB和I_TAB分别是导出和导入的参数,这两个参数的数据结构一定要一样,否则dump.

由于SHM(Shared Memory的缩写)驻留在内存中,因此速度比直接从数据库查询要快,因此当不想查询数据库又想在用户间传递数据时,可以考虑使用这种方法。

SHM相关的事务代码:

SHMA Shared Objects: Management

SHMM Shared Objects Monitor

RZ10参数设置:

ipc/shm_psize_10

ipc/shm_psize_40

abap/shared_objects_size_MB

RZ20和ST06可以监控操作系统SWAP、内存等参数。

创建和使用共享内存区域的步骤:

1.SE24创建一个根类并勾选“启用共享内存”

2.SHMA创建内存区域,绑定第一步创建的root类,创建内存区域时会自动产生与区域名相同的类及操作方法

3.使用第二步自动产生的类的方法操作这个内存区域

#SE24创建root类

# SHMA创建内存区域

系统自动产生了与内存区域同名的类和操作方法。

#测试共享内存使用

可参考SAP DEMO程序:

DEMO_CREATE_SHARED_OBJECT

DEMO_CREATE_SHARED_DATA_OBJECT

其他文档:

https://www.doc88.com/p-919954717125.html

假设我们的ROOT类中某些属性需要全局共享。

我们新建一个程序测试共享内存对象的写入、读取、更新等操作(见文章末尾)。

当执行write操作之后,shmm中就能看到这个共享内存区域的信息了。

双击共享内存区域,可以进入区域内部查看共享的数据。

双击表可以看到表中的内容

为了验证这部分数据确实是保存再共享内存中,而不是从表SCARR中实时取的,我们修改一下SCARR的数据看下效果。

再重新进SHMM,还是原来的值,验证通过。

附:测试程序

 

发表评论