HP-UX下ORACLE10gR2的共享記憶體分段

china_yebin發表於2009-09-20

實驗物件:

$  /usr/contrib/bin/machinfo
CPU info:
 11 Intel(R) Itanium 2 9100 series processors (1.6 GHz, 18 MB)
          533 MT/s bus, CPU version A1
          22 logical processors (2 per socket)

Memory: 89914 MB (87.81 GB)

Firmware info:
   Firmware revision:  9.048
   FP SWA driver revision: 1.18
   IPMI is supported on this system.
   BMC firmware revision: 4.01

Platform. info:
   Model:                  "ia64 hp server rx8640"
   Machine ID number:      b24e5d6e-acdd-11de-9bbf-a49fa173a3ab
   Machine serial number:  SGH49342W6

OS info:
   Nodename:  GDWDB
   Release:   HP-UX B.11.31
   Version:   U (unlimited-user license)
   Machine:   ia64
   ID Number: 2991480174
   vmunix _release_version:              
@(#) $Revision: vmunix:    B.11.31_LR FLAVOR=perf

 

測試目的:

       使用ipcs –mob觀察oracle使用ipc共享記憶體的情況,發現共享記憶體被分為多個記憶體段,按資料所說共享記憶體劃分為多個段對oralce的效能有重大的影響。因此本次此時的目的是測試核心引數是否設定正確。

      

測試原始碼:

 

#include

#include

#include

#include

 

#define SHM_SIZE    21474836480

#define SHM_MODE    0600    /* user read/write */

 

char    array[ARRAY_SIZE];  /* uninitialized data = bss */

 

int

main(void)

{

    int     shmid;

char    *ptr, *shmptr;

key_t      key = ftok(“/home/oracle/test”, ‘A’);

      

    if ((shmid = shmget(key, SHM_SIZE, SHM_MODE | IPC_CREAT)) < 0)

        printf("shmget error");

    if ((shmptr = shmat(shmid, 0, 0)) == (void *)-1)

        printf("shmat error");

    printf("shared memory attached from %lx to %lx\n",

      (unsigned long)shmptr, (unsigned long)shmptr+SHM_SIZE);

      

    getc(stdin);

    if (shmctl(shmid, IPC_RMID, 0) < 0)

        printf("shmctl error");

}

 

cc +DD64 test.c test

 

1. 執行測試程式前

ipcs –mob

$ ipcs -mob
IPC status from /dev/kmem as of Sun Sep 20 06:09:14 2009
T         ID     KEY        MODE        OWNER     GROUP NATTCH      SEGSZ
Shared Memory:
m          0 0x412006cb --rw-rw-rw-      root      root      0        348
m          1 0x4e0c0002 --rw-rw-rw-      root      root      2      61760
m          2 0x41241c5a --rw-rw-rw-      root      root      1       8192
m          3 0x00a5c581 --rw-------     sfmdb     users      7   10469376
m          4 0x412014fa --rw-------      root      root      1       4096
m          5 0x4918b784 --rw-r--r--      root      root      0      22912
m    3047430 0x40244b22 --rw-rw-rw-       mqm       mqm      0       1000
m      32775 0x00000000 --rw-r-----    oracle  oinstall     19 6442450944
m          8 0x00000000 --rw-r-----    oracle  oinstall     19 6465085440
m          9 0x00000000 --rw-r-----    oracle  oinstall     19 6459228160
m         10 0x00000000 --rw-r-----    oracle  oinstall     19 2166505472
m         11 0xf4b45100 --rw-r-----    oracle  oinstall     19      45056

 

2. 測試程式分配20G的共享記憶體:

./test&

 

3. 執行測試程式後

ipcs –mob

$ ipcs -mob
IPC status from /dev/kmem as of Sun Sep 20 06:07:16 2009
T         ID     KEY        MODE        OWNER     GROUP NATTCH      SEGSZ
Shared Memory:
m          0 0x412006cb --rw-rw-rw-      root      root      0        348
m          1 0x4e0c0002 --rw-rw-rw-      root      root      2      61760
m          2 0x41241c5a --rw-rw-rw-      root      root      1       8192
m          3 0x00a5c581 --rw-------     sfmdb     users      7   10469376
m          4 0x412014fa --rw-------      root      root      1       4096
m          5 0x4918b784 --rw-r--r--      root      root      0      22912
m    3047430 0x40244b22 --rw-rw-rw-       mqm       mqm      0       1000
m      32775 0x00000000 --rw-r-----    oracle  oinstall     18 6442450944
m          8 0x00000000 --rw-r-----    oracle  oinstall     18 6465085440
m          9 0x00000000 --rw-r-----    oracle  oinstall     18 6459228160
m         10 0x00000000 --rw-r-----    oracle  oinstall     18 2166505472
m         11 0xf4b45100 --rw-r-----    oracle  oinstall     18      45056
m    1900556 0x41140055 --rw-------    oracle  oinstall      1 21474836480

 

共享記憶體分配有兩種方式:私有方式和共享方式。私有方式只能由建立程式或子程式所共享,其他程式無法訪問,該方式的共享記憶體KEY=0x00000000。而共享方式的共享記憶體可以被其他程式所使用,並且使用KEY作為接入引數,如圖ID=11的共享記憶體段。

       根據上圖分析oracle只劃分了1個共享方式的共享記憶體段(4K),而其他的使用私有方式分配。

通過測試,證明shmmax已經正確設定,系統支援分配足夠大的共享記憶體空間。

oracle分配多段共享記憶體的原因推斷不是由於核心引數設定的問題,至少不是shmmax的設定問題,問題的根源也只能由oracle提供服務了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13605188/viewspace-615101/,如需轉載,請註明出處,否則將追究法律責任。

相關文章