Salesforce

How to identify shared memory segments associated with a database

« Go Back

Information

 
TitleHow to identify shared memory segments associated with a database
URL NameP91873
Article Number000141446
EnvironmentProduct: Progress
Version: 8.x, 9.x
Product: OpenEdge
Version: 10.x, 11.x
OS: All supported platforms
Question/Problem Description
How to identify what shared memory segments are associated with a database?
How to determine which shared memory segments are associated with a specific database?
Steps to Reproduce
Clarifying Information
Error Message
Defect Number
Enhancement Number
Cause
Resolution

There are three methods of determining which shared memory segments are associated with an OpenEdge database.

1. The first way is via the PROUTIL command and can only be used on UNIX systems. The dbipcs option will allow you to identify all shared memory segments associated with any OpenEdge databases running on this machine.

Command Syntax: (notice no dbname is specified)
$   proutil -C dbipcs

Sample output:

PROGRESS SHARED MEMORY STATUS
      ID ShMemVer Seg# InUse Database
       0       -    - -      (not PROGRESS)
       1       -    - -      (not PROGRESS)

       6    10213    0 Yes   /db/prod/sports.db
       7    10213    1 -     /db/prod/sports.db
       8    10213    2 -     /db/prod/sports.db

      10    10213    0 No    /db/test/sports.db

      13 64010213    - -     (unsupported shared memory version)

 


Where:

ID - Indicates the shared-memory ID.

ShMemVer - Specifies the OpenEdge shared memory version.

Seg# - Indicates the shared-memory segment number. One database can own more than one shared-memory segment.
In the example above the 'sports' database owns 3 shmsegs.

InUse - Specifies whether the segment is in use.
YES or NO are displayed only if the segment # is 0.
All other segments show a dash(-)

Database - Represents full pathname to the database.
This column will even represent non-OpenEdge (not PROGRESS) and
different versions of OpenEdge databases (unsupported shared memory version) running on the server.
In the example above, if the proutil -C dbipcs were run with OE 10.1C 64-bit instead of the 32-bit executable,
then all the other ShMemVer=10213 lines would read (unsupported shared memory version)
and this line would read:
      13 64010213    0 Yes   /db/dev/sports.db

On Unix platforms additional information about the shmid's can be found with IPCS:

  • $ ipcs -a ( provides the same information including semaphores, where "ipcs -m" is equivalent to dbipcs for comparison)
  • $ ipcs -mt  (time is useful against the known-time shared-memory issues are realised)
  • $ ipcs -mp  (shmid creator and specifically the last operator's pid)


On Windows, one way to identify shared memory segments is to use the handle.exe tool from System Internals available at the Microsoft's website can be used to identify which OpenEdge process has a handle to the shared memory. It does not require any install, only for the EULA to be accepted the first time it is run.

 

Example: $   handle64.exe -a sharemem. -u -nobanner
_mprosrv.exe       pid: 13424  [Domain\owner] 
264: \Sessions\1\BaseNamedObjects\sharemem.[path to db].[dbname].0
 

2. The second way to see shared memory segment information is using PROMON. The promon utility will allow you to display shared memory segments and the shared memory segment ids in use for a specific database. This method can be used on Windows and Unix platforms.

Command Syntax:
#   promon dbname

  • In promon type R&D <return> to get to the R&D Menu
  • Select 1 for Status Displays
  • Select 14 for Shared Memory Segments

Sample output:

                Status: Shared Memory Segments
       
Seg       Id         Size          Used         Free

   1          6    268435456    268435444           12
   2          7    268435456    268435220          236
   3          8    120987648    116561868      4425780


In this example:

  • There are 3 shared memory segments.
  • Only the last segment will have any appreciable space free.
  • The "ID" will correspond with the "ID" in the above dbipcs shared-memory ID.


3.  The third method is to use the _segments VST table. This method can be used on Windows and Unix platforms.

FOR EACH _segments NO-LOCK:
    DISPLAY _segments EXCEPT _segment-misc.
END.
Workaround
Notes
References to Other Documentation:

OpenEdge Data Management: Database Administration, "Status Displays > Shared Memory Segments"
OpenEdge Data Management: Database Administration, "PROUTIL DBIPCS qualifier"

 

Keyword Phrase
Last Modified Date11/27/2019 9:46 AM

Powered by