EXTRA STEP: Checking for ISM
Unfortunately, before Solaris 7 it isn't easy to tell whether a shared memory segment is using ISM (described in "Intimate Shared Memory" on page 24 of Configuring and Tuning Databases on the Solaris Platform). As of Solaris 7, the ipcs utility includes a -i parameter that shows how many shared memory segments have been attached as ISM (the ISMATTCH column). Since Solaris 8, pmap shows whether a particular process has attached a shared memory segment as ISM (ism will appear immediately before the shmid parameter). For earlier Solaris releases, the procedures shown in Figure 13 through Figure 17 can be used to answer the question.
Figure 13 is based on a server running an Oracle database.
Figure 13 ps trace of Oracle shadow process
The ps -aef command shows a number of Oracle processes, including pid 4498.
In Figure 14, the pstack command shows that pid 4498 is currently doing a read.
Figure 14 pstack trace for process
In Figure 15, the pmap command shows that pid 4498 has attached to a shared memory segment shmid=0x5401, size 69144K bytes, base address 0xD0000000.
Figure 15 pmap trace for process
Now, use the crash program to discover more about this process. In Figure 16, the data from the other processes on the system has been removed to reduce the size of the following trace.
Figure 16 crash program proc output
Next, use the SLOT information to find out whether this process is using ISM. In Figure 17, the output from crash has been reduced to save space.
Figure 17 crash program as output
We saw before that the shared memory segment had a base address of 0xD0000000 (hex). The equivalent line on this trace shows a size of 4400000 (hex), which is equivalent to 71,303,168 bytes, or 69,632 Kbytes. This size agrees with that shown by pmap (rounded up to the nearest megabyte). The OPS value shows segspt_shm. This value definitely shows that the ISM driver is in use for this shared memory segment. If the value is segvn_ops, then ISM is not in use.