Oracle服务器内存分配公式(经验)
- 格式:docx
- 大小:11.91 KB
- 文档页数:3
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 三部分内存。
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 数据库系统中起到调节作⽤的参数叫初始化参数,数据库管理员根据实际情况需要适当调整这些初始化参数以优化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关于内存的分配方案。
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的内存(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内存全面分析(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区。
SGA是全局共享区,PGA是程序共享区SGA一个实例对应一个SGA,PGA一个实例允许有多个PGA共同点应该他们都是ORACLE 逻辑组成部件select*from v$parametersga_max_size为SGA的值一、内存结构SGA(System Global Area):由所有服务进程和后台进程共享;PGA(Program Global Area):由每个服务进程、后台进程专有;每个进程都有一个PGA。
二、SGA包含实例的数据和控制信息,包含如下内存结构:1)Database buffer cache:缓存了从磁盘上检索的数据块。
2)Redo log buffer:缓存了写到磁盘之前的重做信息。
3)Shared pool:缓存了各用户间可共享的各种结构。
4)Large pool:一个可选的区域,用来缓存大的I/O请求,以支持并行查询、共享服务器模式以及某些备份操作。
5)Java pool:保存java虚拟机中特定会话的数据与java代码。
6)Streams pool:由Oracle streams使用。
7)Keep buffer cache:保存buffer cache中存储的数据,使其尽时间可能长。
8)Recycle buffer cache:保存buffer cache中即将过期的数据。
9)nK block size buffer:为与数据库默认数据块大小不同的数据块提供缓存。
用来支持表空间传输。
database buffer cache, shared pool, large pool, streams pool与Java pool根据当前数据库状态,自动调整;keep buffer cache,recycle buffer cache,nK block size buffer可以在不关闭实例情况下,动态修改。
三、PGA每个服务进程私有的内存区域,包含如下结构:1)Private SQL area:包含绑定信息、运行时的内存结构。
服务器资源测算及计算公式应⽤服务器配置测算及计算公式1 术语和定义1.1 信息系统由计算机、通信设备、处理设备、控制设备及其相关的配套设施构成,按照⼀定的应⽤⽬的和规则,对信息进⾏采集、加⼯、存储、传输、检索等处理的⼈机系统。
1.2 软硬件平台指信息系统运⾏的环境,主要包括硬件(服务器、存储)和软件(操作系统、数据库和中间件)部分。
1.3 ⾮安全区即Internet,此区域允许外⽹⽤户随意访问。
1.4 安全区内⽹,此区域通常不对外提供服务。
1.5 DMZ区(Demilitarized Zone)⼜称⾮军事区,介于⾮安全区与安全区之间,此区域按需对外⽹⽤户提供部分服务。
1.6 FC SAN(Fiber ChannelStorage Area Network)指采⽤光纤通道的存储区域⽹络,是⼀种将存储设备、连接设备和服务器集成在⼀个⾼速⽹络中的技术,SAN作为存储⽹络,与LAN⽹络隔离,主要承担数据存储任务。
1.7 FC Switch(Fibre Channel Switch)指光纤通道交换机,是⼀种⾼速的⽹络传输中继设备,以光纤作为传输介质,是组成FC SAN光纤存储⽹络的光纤交换机。
1.8 HBA(Host Bus Adapter)指主机总线适配器,是⼀个使计算机和存储设备间提供输⼊/输出处理和物理连接的电路板和/或集成电路适配器。
1.9 磁盘阵列(Redundant Arrays of Inexpensive Disks,简称Raid)由多个容量较⼩、速度较慢的磁盘组合成⼀个磁盘组,以提升整体性能和存储空间。
1.10 虚拟机指使⽤系统虚拟化技术,运⾏在⼀个隔离环境中、具有完整硬件功能的逻辑计算机系统。
1.11 负载均衡分为硬件和软件负载均衡,软件负载均衡指通过将负载均衡软件安装在⼀台或多台服务器相应的操作系统上来实现负载均衡,硬件负载均衡是直接将负载均衡设备部署在服务器和外部⽹络之间,专门完成负载均衡任务。
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。