Skip to end of metadata
Go to start of metadata

Purpose

The purpose of this page is to help you to understand the Program Buffer.

Overview

  1. What is program buffer?
  2. Relationship among Program Source and Program Load and Program buffer.
  3. What is the suitable size of program buffer for my system?
  4. How to preload ABAP programs into buffer.
  5. Clearing the program buffer.

1. What is program buffer?

ABAP Program Buffer = PXA = Program eXecution Area.

PXA is the name of the shared buffer for ABAP programs. The PXA is located once on each application server and is shared among the work processes of this application server. It serves two main purposes:

  - PXA buffers the program loads (compiled ABAP programs) on the application server and thereby reduces the number of database accesses.

  - It allows concurrent reading access to the buffered programs (more exactly their unchangeable parts) by all work processes of the application server and thereby represents a shared execution area. This is also the root for the name (Program eXecution Area).

PXA has a hash structure and supports LRU (Least Recently Used) displacement.

2. Relationship among Program Source, Program Load and Program buffer.

ABAP sources are stored in the database (REPOSRC).

Compiled ABAP programs are stored on database (REPOLOAD) in one version. 

Compiled ABAP programs are buffered in the program buffer of the ABAP Server ("PXA") in multiple versions, there is a flag "old".

If an ABAP program (function group, class pool, report, ...) shall be executed for the first time in an ABAP session, the following is done:

    1. If the program load is available in PXA and not old, take that version
    2. If the program load is available in the database
      1. Check if there is a newer source available (read REPOSRC)
      2. Otherwise, take that version and store it in PXA
    3. Otherwise compile+generate the program
      1. store it in PXA
      2. store it in REPOLOAD
    4. Remember the version (=timestamp) in the internal session

If the ABAP program is executed again in the same ABAP session:

    1. Get the required version from PXA
    2. If that version is not available (might be dropped if PXA runs out of memory) read from REPOLOAD
    3. If the DB version is different, dump LOAD_PROGRAM_LOST is raised

If an ABAP program requires the specific version of another program (e.g. method call):

    1. Get the recent version from PXA (see above)
    2. If that version does not match the required version, rabax LOAD_PROGRAM*MISMATCH is raised

If an ABAP Source is activated:

    1. All programs which depend (statically) on the changed source are marked as "old" in PXA
    2. This information is sent to all app servers asynchronously

3. What is the suitable size of program buffer for my system?

Profile parameter abap/buffersize is used to define the size of program buffer.

The following symptoms indicate the size of program buffer is not big enough:

 - Shortdump PXA_NO_FREE_SPACE occurs → Check KBA 2169471.

 - Too many swaps on program buffer (ST02) → Check KBA 2468124.

Unfortunately, it is impossible to calculate a suggested value as it highly depends on the system usage, if you are suffering from symptoms mentioned above, the system admins need to increase abap/buffersize gradually (10%~20%.eg) to explore the suitable value for your systems.

4. How to preload ABAP programs into buffer.

Initially, after the system startup the program buffer is empty and every started program must be read from the database. To avoid performance problems in this early phase of the system runtime, the programs used during the last run are automatically preloaded (not necessarily all).

For each application server of an R/3 system two files pxastat and pxanew exist. Each contains a list of programs which had been loaded into the PXA. Both file are read at system startup and the programs are loaded into PXA (pxanew first) until the percentage specified in parameter abap/pxa_preload is reached. After this, pxanew replaces pxastat.

*Without this "preload" process, system response time would be initially very slow until the relevant programs were loaded back into the buffer.

Additionally, you could also preload a fixed amount of programs. To use this feature, you must create a file called pxauserload in the work directory.

For details, check SAP Note 1122370 and 23642.

5. Clearing the program buffer.

System OK codes $SYNC or $PXA can be used to reset program buffer.

$PXA  is recommended as $SYNC will reset all buffers (table buffers, program buffer, screen buffer, ...) of the application server.

 





  • No labels