cancel
Showing results for 
Search instead for 
Did you mean: 

Shared memory management on a clustered system

szymon_bolek
Participant
0 Kudos

hello,

I've been looking for similar threads but found nothing that would answer my question.

If an SAP Application Server is installed as clustered system, would the shared memory be seen as one for the whole cluster? Means, the developers don't have to worry about whether the system is clustered or not?

Or would the machines have separate shared memories and while updating some kind of synchronization would have to be implemented?

thanks+regards

simon:)

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi,

Please, define what you call SAP application server.

Do you mean "ABAP application server" or JAVA app server" or "ABAP+JAVA app server" ?

What do you call a cluster ?

Is it a High Availability cluster like an MSCS cluster on windows ?

Or do you mean a cluster of several Java Server processes ?

Without the context it's not posible to give you an answer...

Regards,

Olivier

szymon_bolek
Participant
0 Kudos

Hello,

Context:

Double Stack "ABAP+JAVA" app server.

MSCS cluster on 2 windows machines.

regards

simon

Former Member
0 Kudos

Hi,

There is no shared memory between different MSCS cluster ressources.

When you have several servers in one SAP system, the only persistance layer is the database.

SAP buffers are in shared memory of each servers and you can have inconsistenties between 2 buffers synchronization. That is why, only unfrequently updated tables should be buffered.

Regards,

Olivier

szymon_bolek
Participant
0 Kudos

hi,

Thank you for the quick answer. This is however not good:(

So what is the possible good solution, if I store my data, a lot of it, in cache/shared memory?.

Is tRFC-update of every cache instance.the best solution?

What about the dead-locks, if both updaters will update the same cache table at the same time, lock it and try to tRFC update it on the "other side(s)", what would be the best solution for this? Are there any administration setting that would prevent such a situation?

Are there any other things(system limitations, or restrictions) , however slight, I have to consider when working out this solution or this issue?

Any tipps are more than welcome!:)

regards

simon:)

Former Member
0 Kudos

Hi,

As I said, you should not buffer SAP tables that are frequently updated.

The standard SAP tables which are buffered are usually customizing tables or less often master data tables but not business data tables.

As your real need is not explained, it's not really possible to give you tips...

Regards,

Olivier

szymon_bolek
Participant
0 Kudos

Hi,

my scenario is, loading data from DB tables and keeping them in shared memory, in order to access them n-times quicker than from the DB and beeing able to update them quickly as well.

The problem is, if the system is installed on the cluster, there is one database and N shared memories, depending on the number of nodes in the cluster.

Now, I seek for the best solution to update the shared memory, as efficient as possible, avoiding the deadlocks. If an update runs into the Node 1, it has to recognize it landed there in this node, and then update this nodes' shared memory and the other nodes' shared memory.

regards

simon:)

Former Member
0 Kudos

Hi,

This is exactly what is done automatically by table bufferisation.

The buffers on different servers are synchronized if your have set the profile parameters :

rdisp/bufrefmode = sendon,exeauto

rdisp/bufreftime = delay in seconds between synchros

But as I told you, this not adviced to use this feature for tables which are often updated.

Regards,

Olivier

szymon_bolek
Participant
0 Kudos

Hi,

Thanks for an answer, but i am mot sure if we are talking about the same thing. The shared memory which i instantiate can be managed/administrated in SHMM and SHMA.

In the SHMA an shared memory area is created which will be administrated using a ABAP Class. This class implements an interface IF_SHM_BUILD_INSTANCE and also administrates a reference object class which inherits from CL_SHM_AREA class.

In the SHMM you can 'run' and monitor the memory areas and see what is inside.

The data which are beeing kept in this shared memory object are put maually into it. And this data doesn't come directly from any SAP tables. So these parameters you suggested will not help in this case.

regards

simon:)

Former Member
0 Kudos

Hi,

We definitively don't speak about the same subject !

If you're speaking about programming why don't you ask your question in the ABAP Objects forum ?

Sorry but your question was absolutely not clear (at least for me !).

Regards,

Olivier

szymon_bolek
Participant
0 Kudos

hi,

no, i am not talking about programming, i just wanted to clarify the subject of the shared memory, because you seemed not to understand which shared memory i am talking about.

I cannot ask this question on the programming forum because they will send me here.

How i will implement the update of the multiple shared memories is not in scope of this thread I agree and I am not seeking the technical solution here.

I want to clarify if it is really the case, that a cluster of several nodes have indeed many separate shared memories, or maybe they are beeing syncronized and it could be customized on the server. That has not been answered yet.

regards

simon

szymon_bolek
Participant
0 Kudos

just a short feedback,

well, on a clustered system every single node has its own shared memory that has to be updated and only a single DB.

so if one wants to update the shared memory, it has to be done on all nodes if one wants to keep the shared memory in sync. This guarantees that, when a read request comes over the load balancer into the system, there is always the up-to-date data in the shared memory.

regards

simon

Former Member
0 Kudos

Hi Simon,

thanks for following up and posting the results of your research.I have run into the same issue with shared memory access in a clustered environment and am wondering how you've implemented the solution? Your comment indicates that you must explicitly update all nodes in the cluster to maintain synchronization, but is this done in ABAP or is it a configurable option when the Class/Area is created? Any information would be greatly appreciated.

Many thanks,

Hagen

Former Member
0 Kudos

You must be looking to use Enqueue replication server

With standalone enqueue server SAP also introduced an enqueue replication server to provide high availability for the enqueue server. It is also a standalone component and it runs on another host and connects with the enqueue server. Once connected, the enqueue server sends lock table replication data to the replication server. The replication server maintains a shadow lock table with the replication data. The shadow lock table exists in the shared memory and is used to rebuild lock table for the failed enqueue server when it is restarted on the same host where the replication server is running. Thus, the host where the standalone enqueue server is running and the host where the replication server is running must be clustered so that failed enqueue server can be restarted on the host where the shadow lock table is maintained. Once the enqueue server rebuilds the lock table from the shadow lock table, the replication server is shutdown.

In this way in flight transactions are not lost

P.S : Whenever DB is stopped and started buffer data is definately cleared. There is no technology i have heard where you can failover DB adn at the same time get the buffered data also on node 2. If anyone know i do not mind to

add to my knowledge

Former Member
0 Kudos

Hi,

In SAP HA enviornment, generally

- DB instance

- SCS(or ASCS) instance

are the SPOC (Single Point of Components).

Those components should be clustered.

While Application instance(DI, J) is not SPOC and

you can setup mulitiple application servers on sevral machines.

This means each applicatoin server has own shared memory.

For more information

High Availability FAQ is available on the SDN.

https://www.sdn.sap.com/irj/sdn/landscapedesign?rid=/webcontent/uuid/b09d53ac-8b0f-2b10-6798-ecfd558...

Especially for your question following information may help you.

Is there a session failover mechanism for SAP NetWeaver AS Java?

NetWeaver AS Java supports a session failover mechanism using DB, local persistence, or shared memory(7.1) which can be implemented in applications. Please take a look into the documentation for further information on how to do that. See the documentation for Failover System in Version 7.0 or Configuring Shared Memory for Version 7.1

szymon_bolek
Participant
0 Kudos

Hello,

thanks for the prompt answer. I've read the links You gave me, but it does not clearly state whether shared memory is common for the whole cluster or not. It also says about 7.1 Release. We currently use 7.0 SPS14

I'll keep looking, I need a definite answer how this issue can be handled. It might as well be configurable, but these are only my suspicions:)

regards

simon:)