分类: Oracle
2007-12-19 09:25:20
预备知识
shared memory:共享内存段:
一个内存区域,可以被不同的进程读取。oracle使用它来构成sga。oracle使用以下三种方法来创建一个sga区:
1. 使用单个共享内存段。
2. 使用连续多个共享内存段。
3. 使用多个不连续共享内存段。
oracle优先使用的一种方法,如果成功,则继续初始化,不成功则使用第二种方法,再不成功则使用第三种方法。如果再不成功,则初始化失败,oracle报告错误代码。
semaphore:
可以看作一个标记。可以有on和off两种状态。oracle使用semaphores来实现服务器进程对sga区的存取控制。
shared memory 和semaphore 是oracle在unix上运行的重要资源。如果oracle 实例得不到所需要的资源,实例启动就会失败。
PGA+SGA=ORACLE占用的内存。
PGA: 每个oracle用户占用的内存,一般设为内存的10%,官方建议:
Oracle recommends initially setting this parameter to 16% of your server’s physical memory for OLTP systems and 40% of your server’s physical memory for DSS systems
PGA需要登陆oracle的客户端,在例程里修改,或者
对于ora9i,在32位平台上 9i的sga默认最多只能扩展到1.7G,如果想突破这个限制,需要重新link Oracle软件。以下为sga为900M的例子:
alter system set db_cache_size = 700m scope = spfile;
alter system set shared_pool_size = 200m scope=spfile;
alter system set pga_aggregate_target = 100m scope=spfile;
对于oracle10G,sga默认最多只能扩展到2.5G,如果想突破这个限制,需要重新link Oracle软件。有4G内存的情况下,可以这样分配:
10g 不用 设置 db_cache_size 和 shared_pool_size ,它是自动管理的,你只要 给他个最大内存就行
alter system set sga_target = 2g scope=spfile;
alter system set pga_aggregate_target = 500m scope=spfile ;
察看oracle连接数
select count(*)
from sys.v_$session ;
查看oracle最大连接数
SQL〉show parameter processes ,看最后一行。
修改 SQL〉alter system set processes=1000 scope=spfile;
scope=spfile 用于重起生效
服务器物理内存×(0.16 至 0.40) = 要分配给所有PGA的内存总量
初始SGA大小:
服务器物理内存×0.55 = 要分配给所有SGA的内存总量(TSGA)
注意:TSGA要小于已分配给oracle的共享内存段大小 共享内存段echo "2147483648" > /proc/sys/kernel/shmmax
TSGA/服务器上Oracle实例个数=每个实例的总SGA大小(TSGAI)
TSGAI×0.4=已分配给SHARED POOL的总内存
TSGAI×0.6=已分配给 DATABASE BUFFER CACHE的总内存
####TSGAI×0.10=已分配给 REDO LOG BUFFER 的总内存
以上原则在内存小于1GB的服务器上非常适用。
在内存大于1GB的服务器上 :
要分配给所有SGA的内存总量(TSGA)=服务器物理内存×(0.60至0.75)
共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信(IPC)方式 主要是因为数据在进程之间传递时没有涉及到内核的操作。在进程之间不需要复制数据。
Oracle 将共享内存用于它的系统全局区 (SGA),这是一个由所有的 Oracle 备份进程及前台进程所共享的内存区域。为 SGA 分配足够的容量对于 Oracle 的性能非常重要,因为它负责保存数据库缓冲区高速缓存、共享 SQL、访问路径以及更多。
shmmax
共享内存段的最大大小(以字节为单位)
含义:这个设置并不决定究竟oracle数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。
设置方法:0.5*物理内存
通过直接更改 /proc 文件系统,你无需重新启动计算机便可以改变 SHMMAX 的缺省设置。可以使用以下方法动态设置 SHMMAX 的值。通过将此命令置于 /etc/rc.local 启动文件中可以使它永久有效:
echo "2147483648" > /proc/sys/kernel/shmmax
shmmni
这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的缺省值是 4096。该值足以满足需要,因此通常无需更改。
可以通过执行以下命令来确定 SHMMNI 的值:
# cat /proc/sys/kernel/shmmni
4096
shmall
该参数控制系统一次可以使用的共享内存总量(以页为单位)
shmall 的默认大小为 2097152,并可以使用以下命令进行查询:
# cat /proc/sys/kernel/shmall
2097152
shmall 的默认设置足以满足 Oracle RAC 10g 安装的需要。
(注意:i386 平台上的 Red Hat Linux 中的页面大小为 4,096 字节。但您可以使用 bigpages,它支持配置更大的内存页面大小。)
设置信号
对信号的最佳描述是,它是用于在共享资源(如共享内存)的进程(或进程中的线程)之间提供同步的计数器。Unix System V 支持信号集,其中的每个信号都是一个信号计数。当应用程序请求信号时,它使用“集合”来完成此工作。
要确定所有信号限制,可使用以下命令:
# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
您还可以使用以下命令:
# cat /proc/sys/kernel/sem
250 32000 32 128
semmsl
内核参数用于控制每个信号集合的最大信号数。
系统所占用信号量可用下列命令查出:#ipcs –sb ,其中列NSEMS显示系统已占用信号量
Oracle 建议将 SEMMSL 设置为 init.ora 文件(适用于 Linux 系统上所有数据库)中的最大 PROCESS 实例参数设置再加上 10。此外,Oracle 建议将 SEMMSL 设置为不小于 100。
例子:set semsys:seminfo_semmsl=-200
semmni
内核参数用于控制整个 Linux 系统中信号集的最大数量。
Oracle 建议将 SEMMNI 设置为不小于 100。
semmns
内核参数用于控制整个 Linux 系统中的信号(而非信号集)的最大数量
每个process会占用一个信号量,Oracle 建议将 SEMMNS 设置为系统上每个数据库的 PROCESSES 实例参数设置之和,加上最大的 PROCESSES 的两倍,最后为系统上的每个 Oracle 数据库加上 10。
设置方法:这个值可以通过以下方式计算得到:各个oracle实例的initsid.ora里边的processes的值的总和(除去最大的processes参数)+最大的那个processes×2+10×oracle实例的个数。
shmseg
含义:每个用户进程可以使用的最多的共享内存段的数目。
例子:set shmsys:shminfo_shmseg=20:
如何增加ORACLE连接数
ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:
sessions=(1.1*process+5)
但是我们增加process数时,往往数据库不能启动了。这因为我们还漏调了一个unix系统参数:它是/etc/system/ 中semmns,这是unix系统的信号量参数。每个process会占用一个信号量。semmns调整后,需要重新启动unix操作系统,参数才能生效。不过它的大小会受制于硬件的内存或ORACLE SGA。范围可从200——2000不等。
semmns的计算公式为:SEMMNS>processes+instance_processes+system
processes=数据库参数processes的值 instance_processes=5(smon,pmon,dbwr,lgwr,arch)
system=系统所占用信号量。系统所占用信号量可用下列命令查出:#ipcs -sb
其中列NSEMS显示系统已占用信号量。
有关oracle的基本参数的调整:
/oracle/admin/ora9i/pfile/initora9i.ora.10202007144030为安装时创建,一帮用于还原时使用,oracle正常启动时使用的是
product/9.2/dbs/spfileora9i.ora这个2进制文件,不能修改,当对oracle进行调整时,修改被记录到这个文件中,当修改导致oracle不能正常启动时,可以使用pfile文件进行恢复启动
startup pfile='/oracle/admin/ora9i/pfile/initora9i.ora.10202007144030' (正常启动为 startup)
但是oracle的参数将变为初始安装的状态。
可以使用以下的命令生成pfile文件:
create spfile from pfile='/oracle/admin/ora9i/pfile/initora9i.ora.10202007144030'
调整的参数