HP-UX下ORACLE10gR2的共享内存分段

本文通过一个测试程序验证了HP-UX系统下Oracle数据库使用的共享内存情况。测试结果显示系统支持分配大容量共享内存,但Oracle仍选择将内存划分为多个段。这表明问题可能不在内核参数设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验对象:

$  /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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13605188/viewspace-615101/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值