我们知道,数据库是与操作系统紧密相关的软件,所以很多数据库功能的实现均需要操作系统支持,尤其是现在主流数据库都在运行中创建大容量的缓冲内存,提供数据库的查询或操作的命中率,那么操作系统的内存无疑是一个很大的瓶颈,在此我们更多的是讨论,在主流的unix平台系统中主要是hp-ux和solaris安装数据库需要设置的共享内存的内核参数问题,适用于所有的RDBMS数据库。
基本参数介绍:
shared memory:共享内存段:
一个内存区域,可以被不同的进程读取。
1. 使用单个共享内存段。
2. 使用连续多个共享内存段。
3. 使用多个不连续共享内存段。
database优先使用的一种方法,如果成功,则继续初始化,不成功则使用第二种方法,再不成功则使用第三种方法。如果再不成功,则初始化失败,database报告错误代码。
Semaphore:
可以看作一个标记。可以有On和Off两种状态。database使用semaphores来实现服务器进程对共享缓冲内存的存取控制。
Shared memory 和semaphore 是database在Unix上运行的重要资源。如果database实例得不到所需要的资源,实例启动就会失败。
其细化具体参数项的含义和字段解释如下:
shmmax
含义:这个设置并不决定究竟database数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。
设置方法:通常保证0.5*物理内存,各unix平台的参数名称:
solaris:shminfo_shmmax
[size=3] [size=2]HP-UX[/size]:shnmax[/size]
shmmin
含义:共享内存的最小大小。
设置方法:一般都设置成为1。
shmmni
含义:系统中共享内存段的最大个数。
solaris : shminfo_shmmin
HP-UX:shmmin
shmseg
含义:每个用户进程可以使用的最多的共享内存段的数目。
solaris:shminfo_shmseg
HP-UX:shmseg
semmni
含义:系统中semaphore identifierer的最大个数。
设置方法:把这个变量的值设置为这个系统上的所有database的实例的相关processes的那个值加10。
solaris: seminfo_semmni
HP-UX:semni (等于nproc)
semmns
含义:系统中emaphores的最大个数。
设置方法:这个值可以通过以下方式计算得到:各个database实例的的processes的值的总和(除去最大的 Processes参数)+最大的那个Processes×2+10×database processes的个数。
solaris:seminfo_semmns
HP-UX:semmns
semmsl:
含义:一个set中semaphore的最大个数。
设置方法:设置成为10+所有database最大的Processes的值。
solaris:seminfo_semmsl
HP-UX:semmsl
至于具体的修改在solaris一般修改/etc/system文件,solaris 10版本或以上动态修改projmod,HP-UX可以通过/usr/sbin/kcweb -F[font=宋体][size=10.5pt]命令修改,也可以通过sam修改,但是修改后请记住需要重启系统以让修改生效。[/size][/font]
新闻热点
疑难解答