Oracle服务器内存分配公式(经验)

合集下载

oracle内存分配和调优总结

oracle内存分配和调优总结

oracle内存分配和调优总结⼀直都想总结⼀下oracle内存调整⽅⾯的知识,最近正好优化⼀个数据库内存参数,查找⼀些资料并且google很多下。

现在记录下来,做下备份。

⼀、概述:oracle 的内存可以按照共享和私有的⾓度分为系统全局区和进程全局区,也就是 SGA和 PGA(process global area or private global area)。

对于 SGA 区域内的内存来说,是共享的全局的,在 UNIX 上,必须为 oracle 设置共享内存段(可以是⼀个或者多个),因为 oracle 在UNIX 上是多进程;⽽在 WINDOWS 上 oracle 是单进程(多个线程),所以不⽤设置共享内存段。

PGA 是属于进程(线程)私有的区域。

在 oracle 使⽤共享服务器模式下(MTS),PGA中的⼀部分,也就是 UGA 会被放⼊共享内存 large_pool_size 中。

发张图oracle内存架构组成,按照图上⾯的显⽰可以⼀⽬了然关键的参数和参数名称:对于 SGA 部分,我们通过 sqlplus 中查询可以看到:SQL> select * from v$sga;NAME VALUE---------- --------------------Fixed Size 454032Variable Size 109051904Database Buffers 385875968Redo Buffers 667648Fixed Size:oracle 的不同平台和不同版本下可能不⼀样,但对于确定环境是⼀个固定的值,⾥⾯存储了 SGA 各部分组件的信息,可以看作引导建⽴SGA 的区域。

Variable Size :包含了 shared_pool_size、java_pool_size、large_pool_size 等内存设置Database Buffers :指数据缓冲区:在 8i 中包含 db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三部分内存。

ORACLESGA的分配

ORACLESGA的分配
# 512k (128K*CPU个数)
large_pool_size = 31457280
# 30 M
java_pool_size = 20971520
# 20 M
sort_area_size = 524288
# 512k (65k--2M)
sort_area_retained_size = 524288
shmmax共享内存段的最大字节数建议设大点甚至可以大过物理内存的字节数
ORACLESGA的分配
ORACLE SGA 的分配
ORACLE 8.0.X 版本
SGA=((db_block_buffers * block size)+(shared_pool_size+large_pool_size+log_buffers)+1MB
set shmsys:shminfo_shmmni=315
set shmsys:shminfo_shmseg=10
set shmsys:shminfo_shmmin=1
其中这些参数的含义
shmmax - 共享内存段的最大字节数,建议设大点,甚至可以大过物理内存的字节数
shmmin - 共享内存段的最小尺寸.
设database buffer cache 620M (79360*8192 bytes)
initorasid.ora文件里具体各参数如下:
shared_pool_size = 262144000
# 250 M
db_block_buffers = 79360
# 620 M
log_buffer = 524288
我推荐SGA=0.45*(OS RAM)
假设服务器运行ORAC db_block_size 是8192 bytes,

oracle参数配置

oracle参数配置

oracle参数配置⼀、Oracle LARGE_POOL_SIZE⼤⼩设置值多少java_pool_size:以字节为单位, 指定 Java 存储池的⼤⼩, 它⽤于存储 Java 的⽅法和类定义在共享内存中的表⽰法, 以及在调⽤结束时移植到 Java 会话空间的 Java 对象。

large_pool_size:指定⼤型池的分配堆的⼤⼩, 它可被共享服务器⽤作会话内存, ⽤作并⾏执⾏的消息缓冲区以及⽤作RMAN备份和恢复的磁盘 I/O 缓冲区。

LARGE_POOL通常⽤于共享服务器(MTS),并⾏计算或者RMAN备份恢复中。

设置其⼤⼩的参数为:LARGE_POOL_SIZE如果不设置MTS,LARGE_POOL通常在RMAN 、OPQ 会使⽤到,LARGE_POOL_SIZE设置在10M --- 50M 应该差不多了。

如果RMAN备份恢复中,分配了多通道,可以考虑参考给出的公式。

LARGE_POOL_SIZE = number_of_allocated_channels *(16MB ( 4 * size_of_tape_buffer))。

假如设置 MTS,则由于 UGA 放到large_pool_size 的缘故,这个时候依据 session最⼤数量和 sort_ares_size 等参数设置,必须增⼤large_pool_size 的设置,可以考虑为 session * (sort_area_size 2M)。

这⾥要提醒⼀点,不是必须使⽤MTS,我们都不主张使⽤MTS,尤其同时在线⽤户数⼩于500的情况下。

⼆、关于SGA设置的⼀点总结本总结不针对特例,仅对服务器只存在OS ORACLE 为例,如果存在其他应⽤请酌情考虑写这个也是因为近来这种重复性的问题发⽣的太多所导致的⾸先不要迷信STS,SG,OCP,EXPERT 等给出的任何建议、内存百分⽐的说法基本掌握的原则是, data buffer 通常可以尽可能的⼤,shared_pool_size 要适度,log_buffer 通常⼤到⼏百K到1M就差不多了设置之前,⾸先要明确2个问题1:除去OS和⼀些其他开销,能给ORACLE使⽤的内存有多⼤2:oracle是64bit or 32 bit,32bit 通常 SGA有 1.7G 的限制(某些OS的处理或者WINDOWS上有特定设定可以⽀持到2G以上甚⾄达到3.7G,本⼈⽆这⽅⾯经验)下⾯是我的windows2000下的oracle :SQL> select * from v$version;BANNER----------------------------------------------------------------Oracle8i Enterprise Edition Release 8.1.7.0.0 - ProductionPL/SQL Release 8.1.7.0.0 - ProductionCORE 8.1.7.0.0 ProductionTNS for 32-bit Windows: Version 8.1.7.0.0 - ProductionNLSRTL Version 3.4.1.0.0 - ProductionSQL>windows上存在32bit的限制,如AIX、HP UNIX 等有明确的64BIT OS and ORACLE的版本,32bit oracle可以装在64bit os 上,64 bit oracle 不能装在32 bit OS上,不管oracle是32 bit ORACLE还是 64 bit 的,假定应⽤存在没有很好的使⽤bind var 的情况,也不能设置 shared_pool_size 过⼤,通常应该控制在200M--300M,如果是 ORACLE ERP ⼀类的使⽤了很多存储过程函数、包,或者很⼤的系统,可以考虑增⼤shared_pool_size ,但是如果超过500M可能是危险的,达到1G可能会造成CPU的严重负担,系统甚⾄瘫痪。

ORACLE内存管理

ORACLE内存管理
私有SQL由以下两部分组成:
(a).永久区域(Persistent ):包含绑定变量等信息,这部分内存只有在游标被关闭时才会被释放。
(b).运行时区域(Runtime Area):存放了SQL语句运行时需要的信息,在执行请求时创建,包括查询执行的状态信息(如对于全表扫描,则记录全表扫描的进度等)、
对于PGA_AGGREGATE_TARGET参数的分配建议(对于单纯的数据库服务器):
(1)OLTP系统:PGA_AGGREGATE_TARGET=(<Total Physical Memory> * 80%) * 20%
(2)DSS系统:PGA_AGGREGATE_TARGET=(<Total Physical Memory> * 80%) * 50%
PGA和UGA的关系,就如同process同session一样,PGA是服务于进程的内存结构,包含进程信息;UGA是服务于会话的,包含的是会话信息。
UGA类似也分为固定UGA和可变UGA:
(1)固定UGA:包含大量原子变量、小的数据结构和指向可变UGA的指针。
(2)可变UGA(UGA堆):固定表(X$表)的永久内存、私有SQL区和PL/SQL区。
Oracle 9iR2后可以指定内存地址:
SQL>alter session set events 'immediate trace name heapdump level n,addr n';
level 1:PGA汇总信息
level 2:SGA汇总信息
level 4:UGA汇总信息
level 8:当前调用的汇总信息(CGA)
如果SGA<128M,则Granule值为4M,否则为16M(32位windows为8M)。

Oracle内存参数调优设置

Oracle内存参数调优设置

Oracle内存参数调优设置Oracle 数据库系统中起到调节作⽤的参数叫初始化参数,数据库管理员根据实际情况需要适当调整这些初始化参数以优化Oracle系统。

1 主要系统参数调优介绍 2 系统内存参数的分配 2.1 Oracle 实例= 内存结构 + 进程结构 内存结构 = SGA + PGA SGA(系统全局区):⽤户存储数据库信息的内存区,该区域为数据库进程所共享。

它包含服务器的数据和控制信息,主要包含⾼速数据缓冲区、共享池、重做⽇志缓存区、Java池,⼤型池等内存结构。

SGA的设置,理论上SGA的⼤⼩应该占OS的内存的 1/3-1/2左右。

SGA + PGA + OS使⽤的内存 < 总的物理内存 查看当前系统SGA的信息select name,bytes/1024/1024 as "Size(M)"from v$sgainfo; 根据查询信息显⽰当前还有148M可⽤的SGA内存,系统当前的内存配置并不是最优的,我们在实际使⽤过程中根据情况可以重新分配内存。

2.2 SGA的设置原则 SGA = (db_block_buffers * db_block_size) + (shared_pool_size + large_pool_size + java_pool_size + log_buffers) (1)缓冲区⾼速缓存(database_buffer_cache):主要存储由磁盘数据⽂件写⼊的数据 ⼤⼩:db_block_buffers * db_block_size分配原则:缓冲区⾼速缓存的调整,⽤户进程所存取的所有数据都是经过缓冲区⾼速缓存来存取,所以该部分的命中率,对性能⾄关重要。

缓冲区⾼速缓存的使⽤情况记录在动态性能表v$sysstat中,可通过查询该表来了解其活动情况,以决定如何调整。

select name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads');dbblock gets和consistent gets的值是请求数据缓冲区中读的总次数。

oracle11g关于内存的分配方案。

oracle11g关于内存的分配方案。

oracle11g关于内存的分配方案。

1,在32位的操作系统上,安装oracle的话,oracle最大能分配到的内存是1.7G。

这样的话,推荐最好使用64位的操作系统。

这样在物理内存足够大的情况下,oracle也能分配到无限制的足够大的内存。

2,在物理内存既定的情况下,如果服务器是只为oracle应用提供的服务器。

在创建数据库实例时,oracle的典型内存分布,默认总共给sga 和pga分配系统内存的40%,同时oracle建议自动内存管理。

此时,如果选择oracle的典型内存分布,同时不选择自动管理内存分布,那么sga : pga的内存比是3:1。

但是当sga的内存达到1536M之后,就不会再增加内存了,多出来的内存全都被增加到了pga的内存中去了。

(问题一:请问一下,如果是自动管理内存分布的话,sga和pga 也会出现这样的情况吗? sga达到1536m之后也不会继续增加吗?问题二:pga增多的话,排序等的性能会增加。

但是如果适当的增加sga,将表数据全都缓存到sga中的话,内存中的排序等性能同样会得到很大的提升。

为什么典型配置在sga增加到1536m之后就不再增加了呢?)3,定制数据库实例的内存时:pga,根据实际的情况,可以增加到足够大。

sga的共享池,日志缓冲池如果过大的话,会对性能产生较大的负面影响。

sga的java池,建议20msga的共享池,建议sga的22%sga的large池,建议sga的9.9%sga的缓冲区,可以设置到足够大。

(问题三,当创建数据库实例时,如果选择的是自动管理内存的话,这时的内存结构参数的值都是0。

如果只想要手动管理sga的一个缓冲区的话,是不是必然将重新手动设置sga的全部内存结构?包括重新设置sga本身的大小?)4,问题四:请问一下,如果手动设置的话,那sga和pga的内存比应该多少比较合适?以上只是个人的一些理解,有可能有错误的地方,希望大家能帮忙指出,最后将做出总结,将错误的地方改正。

Oracle内存配置-总结

Oracle内存配置-总结

对oracle的内存(SGA和PGA)进行调整,优化数据库性一、示例:SGA:共享池:200MB缓冲区高速缓存:24MB大型池:9MBJava池:32MBSAG总容量:264.933SAG的最大大小:305.069PGA:总记PGA目标:240MB分配的当前PGA:8914KB分配的最大PGA(自启动以来)9081KB高速缓存命中百分比:100%PGA和SGA的和应小于系统内存总量前去操作系统和其他应用程序所需内存后得到的值。

二、名词解释:SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境Java池:ava Pool为Java命令的语法分析提供服务PGA:Program Global Area是为每个连接到Oracle database的用户进程保留的内存。

三、分析与调整:1、系统全局域:SGA与操作系统、内存大小、cpu、同时登录的用户数有关。

可占OS系统物理内存的1/2到1/3,当然,如果服务器上只有oracle的话,可以分配的更大一些,如果还有其他服务,如IIS等,那就要分的小一些。

1、共享池:修改共享池的大小,ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;查看共享SQL区的使用率:select(sum(pins-reloads))/sum(pins) "Library cache" fromv$librarycache;--动态性能表这个使用率应该在90%以上,否则需要增加共享池的大小。

全面分析Oracle数据库的内存配置

全面分析Oracle数据库的内存配置

Oracle内存全面分析(1)作者:fuyuncat来源:Oracle的内存配置与oracle性能息息相关。

而且关于内存的错误(如4030、4031错误)都是十分令人头疼的问题。

可以说,关于内存的配置,是最影响Oracle性能的配置。

内存还直接影响到其他两个重要资源的消耗:CPU 和IO。

首先,看看Oracle内存存储的主要内容是什么:•程序代码(PLSQL、Java);•关于已经连接的会话的信息,包括当前所有活动和非活动会话;•程序运行时必须的相关信息,例如查询计划;•Oracle进程之间共享的信息和相互交流的信息,例如锁;•那些被永久存储在外围存储介质上,被cache在内存中的数据(如redo log条目,数据块)。

此外,需要记住的一点是,Oracle的内存是与实例对应的。

也就是说,一个实例就有一个独立的内存结构。

先从Oracle内存的组成架构介绍。

1.Oracle的内存架构组成Oracle的内存,从总体上讲,可以分为两大块:共享部分(主要是SGA)和进程独享部分(主要是PGA 和UGA)。

而这两部分内存里面,根据功能不同,还分为不同内存池(Pool)和内存区(Area)。

下面就是Oracle内存构成框架图:SGAShare Pool Buffer Cache Redo Log BufferJava Pool Stream Pool(10g)Large PoolPGA*nBitmap merge area Sort Area Hash AreaUGA*nCUA*n下面分别介绍这两块内存区。

1.1.SGA(System Global Area)SGA(System Global Area 系统全局区域)是一组包含一个Oracle实例的数据和控制信息的共享内存结构。

这句话可以说是SGA的定义。

虽然简单,但其中阐述了SGA几个很重要的特性:1、SGA的构成——数据和控制信息,我们下面会详细介绍;2、SGA是共享的,即当有多个用户同时登录了这个实例,SGA中的信息可以被它们同时访问(当涉及到互斥的问题时,由latch和enquence控制);3、一个SGA只服务于一个实例,也就是说,当一台机器上有多个实例运行时,每个实例都有一个自己的SGA,尽管SGA来自于OS的共享内存区,但实例之间不能相互访问对方的SGA区。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle服务器内存分配公式(经验)
当今的计算机系统,CPU的个数和计算能力已经不再是问题,一个固定的计算机系统,I/O硬件性能也是定值(当然你可以在存储上做优化!),问题有很大一部分出在内存的分配上。

这个帖子以Oracle数据库RDBMS为例,提供一个计算内存使用的方法。

具体估算方法如下:
系统支持的连接数:
(System physical Memory - OS memory - SGA memory - PGA memory) / 20
in MB
OS memory
512~1024
(可以按大值来估计,这样有溢量)
20是一个平均值(每个连接平均占的内存)
你可以在实际运行的系统,查看大多数的server process占用多少实际内存
因为10g这个值变化比较大,估算的话可以取值10M或者20M
9i可以按 4M来算
曾庆峰(版主)
文章:331篇
大洋币:1040枚
时间:2011-07-20 引用
早先写的版本,呵呵呵,貌似比新版的还好!
(根据多年经验)
假设你的服务器是8GB内存(490标配),如果内存更大或者更小:
服务器上只安装oracle(如果有其他软件,请确认其他软件的最大内存使用量,从系统总内存中减掉该用量)
操作系统(安装完系统后可以察看) 预留 512M
系统最大oracle连接数(Server Process的个数N) N*4(每个占用4M)
系统所需排序内存总数 X MB
SGA内存 Y MB
将来调优预留内存量 Z MB
公式如下:
512(OS) + N*4 + X+ Y +Z = 8GB。

相关文档
最新文档