Oracle服务器内存分配公式(经验)
oracle内存分配和调优总结
![oracle内存分配和调优总结](https://img.taocdn.com/s3/m/c888acbad0f34693daef5ef7ba0d4a7302766c27.png)
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的分配](https://img.taocdn.com/s3/m/ed57a92c3868011ca300a6c30c2259010202f3d4.png)
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参数配置](https://img.taocdn.com/s3/m/690618237275a417866fb84ae45c3b3567ecdd6e.png)
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内存管理](https://img.taocdn.com/s3/m/6704c53e87c24028915fc380.png)
(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内存参数调优设置](https://img.taocdn.com/s3/m/3daf2d681611cc7931b765ce050876323112749b.png)
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关于内存的分配方案。](https://img.taocdn.com/s3/m/b8fc3430fbd6195f312b3169a45177232f60e467.png)
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内存配置-总结](https://img.taocdn.com/s3/m/d7a4d9fa998fcc22bcd10d93.png)
对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数据库的内存配置](https://img.taocdn.com/s3/m/6dcb5e05a6c30c2259019ed8.png)
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区。
Oracle内存结构(SGA、PGA)
![Oracle内存结构(SGA、PGA)](https://img.taocdn.com/s3/m/a8a38610cc17552707220874.png)
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:包含绑定信息、运行时的内存结构。
服务器资源测算及计算公式
![服务器资源测算及计算公式](https://img.taocdn.com/s3/m/b40c76fd4793daef5ef7ba0d4a7302768e996fe5.png)
服务器资源测算及计算公式应⽤服务器配置测算及计算公式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服务器内存分配公式(经验)
![Oracle服务器内存分配公式(经验)](https://img.taocdn.com/s3/m/d184b1cd6137ee06eff91893.png)
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。
oracle内存分配与调整
![oracle内存分配与调整](https://img.taocdn.com/s3/m/dbef5609f78a6529647d5313.png)
Oracle内存分配与调整者l 作者介绍冯春培,毕业于北京信息工程学院。
曾做电信计费后台程序开发,从事过开发DBA工作,目前公司主要做数据库优化产品开发。
热爱ORACLE,在任数据库管理版块版主(biti_rainy),个人兴趣主要在oracle internal、performance tuning。
对数据库管理、备份与恢复、数据库应用开发、SQL优化均有广泛理解。
希望大家一起探讨oracle及相关技术。
l 前言对于oracle的内存的管理,截止到9iR2,都是相当重要的环节,管理不善,将可能给数据库带来严重的性能问题。
下面我们将一步一步就内存管理的各个方面进行探讨。
l 概述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中。
对于SGA部分,我们通过sqlplus中查询可以看到:SQL> select * from v$sga;NAME VALUE-------------------- ----------Fixed Size 454032Variable Size 109051904Database Buffers 385875968Redo Buffers 667648Fixed Sizeoracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了SGA各部分组件的信息,可以看作引导建立SGA的区域。
Oracle数据库中的内存计算那点事
![Oracle数据库中的内存计算那点事](https://img.taocdn.com/s3/m/835bcd2379563c1ec4da710c.png)
Oracle数据库中的内存计算那点事内存计算那点事迄今为止,内存还是我们目前能用到的最快的存储设备,把数据尽可能放进内存成为各种应用提高数据访问性能的最有效途径。
对于很多关键业务系统而言,内存又是一种挥发性的和大小非常有限的存储设备,如何在保证性能的同时使数据能持久化,如何把有限的内存投入到无限的待处理数据上是程序设计的一个重大课题。
Oracle的内存TImesTen内存数据库为有高并发,低延时和高可用要求的关键业务系统提供了一个接近完美的解决方案:把数据放进内存,使用SQL简化开发,应用开发者可以更加专注在业务实现上而不用关心底层的内存分配。
TImesTen在大并发的环境中还能提供媲美Oracle数据库的数据完整性,一致性和可恢复性,内存的挥发性缺点也被克服,维护工作也极大地简化了。
因此Oracle TImesTen被广泛地应用于电信,金融等行业已经有20多年的历史。
基于内存计算的另外一个问题始终困扰着业内人士内存有限而数据相对无限:单一服务器的内存远远不足以存储需要处理的数据,频繁的内存交换消耗太多资源,用户不得不使用手工分库的方式把数据分散到多个服务器上来处理,这又带来了管理、开发复杂,扩展性差等诸多问题。
随着技术的发展,分布式内存网格技术也开始被用于加速数据访存的速度,比如Redis,Oracle Coherence等。
分布式内存网格技术采用key-value的内存数据存储方式可以方便把磁盘型数据库的数据分布到集群系统的各个节点上缓存,为简单的数据查询和事务提供了很高的性能。
但这类技术的问题是:数据的强一致性,数据持久化,复杂报表和统计,大并发事务处理等。
分布式的关系型内存数据库理想的内存数据库对于一个高并发,实时响应需求的关键业务系统而言,一个分布式的关系型数据库是最理想的选择:它既具有关系型数据ACID的特性,可以处理高并发的用户请求,可以实时响应业务的数据访问请求,拥有完善的备份恢复和容灾机制,同时和NoSQL的内存网格技。
Oracle数据库配置
![Oracle数据库配置](https://img.taocdn.com/s3/m/75607dedaeaad1f346933fb3.png)
1.1. 内存配置一般Oracle建议将操作系统物理内存的70%分配给它。
比如,物理内存是8G,则分配给Oracle的内存就是5.6G。
Oracle的内存主要分两块:SGA和PGA。
假定物理内存为8G,按照70%的物理内存来划分,则是:SGA为60%,即4.8G;PGA为10%,即0.8G。
1.1.1.SGA配置SGA主要包括4个部分:Data Buffer、Shared Pool、Large Pool、Java Pool。
假定物理内存为8G,按照70%的物理内存来划分,则是:Data Buffer为40%,即3.2G;Shared Pool r为10%,即0.8G;Large Pool为2%,即0.16G;Java Pool为2%,即0.16G。
由于10g支持SGA自动管理,所以这里分别给出9i和10g的内存优化方案。
1)9i中SGA的优化:SQL> alter system set db_cache_size = 3.2G scope = spfile;SQL> alter system set shared_pool_size = 0.8G scope = spfile;SQL> alter system set large_pool_size = 0.16G scope = spfile;SQL> alter system set java_pool_size = 0.16G scope = spfile;2)10g中SGA的优化:SQL> alter system set sga_target = 4915200000 scope = spfile;1.1.2.PGA配置PGA的大小为物理内存的10%,假定物理内存为8G,则为0.8G。
Oracle 9i开始PGA就可以自动调整了,所以我们这里只需要配置pga_aggregate_target 参数就可以了,同时记得打开workarea_size_policy参数。
ORACLE性能调整调整内存分配
![ORACLE性能调整调整内存分配](https://img.taocdn.com/s3/m/f40e528b6bd97f192279e992.png)
规则:减少Library Cache重载
重载应该接近于0,同执行的比率小于1%
SQL> select sum(pins) "Executions", sum(reloads)
2
"Cache Misses", sum(reloads)/sum(pins)
3 from v$librarycache;
Executions Cache Misses sum(reloads)/sum(pins)
须解析到同一SCHEMA的同一对象 – 准则3:SQL语句中使用的变量的名字和数据类型必须匹配 – 准则4: SQL语句必须使用相同的优化方法和优化目标
– 策略1:语句中尽量使用变量而不要使用常量 – 策略2:确保应用用户不会改变优化方法和目标 – 策略3:标准化的变量命名和空格转换 – 策略4:尽可能使用存储过程
Library Cache的大小
– 存储对象的空间(表,索引,存储过程,视图等)
SQL> select sum(sharable_mem) 2 from V$DB_OBJECT_CACHE;
SUM(SHARABLE_MEM) -----------------
379600
– 常用SQL命令的空间
SQL> select sum(sharable_mem) 2 from V$SQLAREA where executions > 5;
做日志文件的I/O次数
诊断
• V$SESSION_WAIT--是否有等待(由于会话写数据的速
度快于LGWR) – SELECT sid,event,seconds_in_wait,state – FROM v$session_wait – WHERE event=‘log buffer space%’;
oracle内存分配与调整
![oracle内存分配与调整](https://img.taocdn.com/s3/m/3b283d0f7dd184254b35eefdc8d376eeaeaa1711.png)
pga_aggregate_t (PGA ): 说明 : 指定连接到例程的所有服务器进程的目标 PGA
总内存。请在启用自动设置工作区之前将此参数设置 为一个正数。这部分内存不驻留在 SGA 中。数据库 将此参数值用作它所使用的目标 PGA 内存量。设置 此参数时, 要将 SGA 从可用于 Oracle 例程的系统内 存总量中减去。然后可将剩余内存量分配给 pga_aggregate_target。 值范围 : 整数(zhěngshù)加字母 K, M 或 G, 以将此限 值指定为千字节, 兆字节或千兆字节。最小值为 10M, 最大值为 4000G 默认值 : "未指定", 表示完全禁用对工作区的自动优化。
我们期望该参数能大一些。但是该参数的增大,却也有负面的影响,因为需要
维护共享的结构,内存的增大也会使得SQL 的老化的代价更高,带来大量的 管理的开销,所有这些可能会导致CPU 的严重问题。在一个充分使用绑定变 量的比较大的系统shared_pool_size 的开销通常应该维持在300M 以内。除非
系统使用了大量的存储过程、函数、包,比如oracle erp 这样的应用,可能会
达到500M甚至更高。于是我们假定一个1G内存的系统,可能考虑设置该参数 为100M,2G 的系统考虑设置为150M,8G 的系统可以考虑设置为200—300M。
精品资料
• Data buffer
• 现在我们来谈数据缓冲区,在确定了 SGA 的大小(dàxiǎo)并分配完了前面部分的 内存后,其余的,都分配给这部分内存。通 常,在允许的情况下,我们都尝试使得这部 分内存更大。这部分内存的作用主要是缓存 DB BLOCK,减少甚至避免从磁盘上获取数 据,在8i中通常是由
ORACLE块的分配
![ORACLE块的分配](https://img.taocdn.com/s3/m/ac99991714791711cc791789.png)
块的分配
INITIAL: INITIAL:分配给Segment的第一个Extent的大小,以字节为单位,这个参数不能 在alter语句中改变,如果指定的值小于最小值,则按最小值创建 NEXT:第二个Extent的大小等于NEXT的初值, : NEXT值=前一NEXT大小*(1+PCTINCREASE/100) 如果指定的值小于最小值,则按最小值创建。 如果在alter语句中改变NEXT的值,则下一个分配的Extent将具有指定的大小, 而不管上一次分配的Extent大小和PCTINCREASE参数值。 MINEXTENTS: Segment第一次创建时分配的Extent数量 : MAXEXTENTS:随着Segment中数据量的增长,最多可分配的Extent数量 : PCTINCREASE:指定第三个及其后的Extent相对于上一个Extent所增加的百分比, : 如果PCTINCREASE为0,则Segment中所有新增加的Extent的大小都相同,等于 NEXT的值,如果PCTINCREASE大于0,则每次计算NEXT的值(用上面的公式), PCTINCREASE不能为负数。 创建回滚段时,不可指定此参数,回滚段中此参数固定为0。
块的ห้องสมุดไป่ตู้配
OPTIMAL:仅与回滚段有关,当回滚段因为增长、扩展而超过此参数的设定范围 : 时,Oracle系统会根据情况动态地重新分配Extents,试图收回多分配的Extent。 FREELISTS:只能在CREATE TABLE、CLUSTER、INDEX中指定FREELISTS和FREELIST : GROUPS参数。模式对象中每一个自由列表组中自由列表的数量 FREELIST GROUPS:用户创建的数据库对象的自由列表组的数量,只有用OPS并行 : 服务器选项时才使用这一参数,一个实例对应一个组。 BUFFER_POOL:给模式对象定义缺省缓冲池(高速缓存),该对象的所有块都存 : 储在指定的高速缓存中,对于表空间或回滚段无效。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。