ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:22.13KB ,
资源ID:12518585      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12518585.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Oracle 内存分配与调整.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Oracle 内存分配与调整.docx

1、Oracle 内存分配与调整Oracle 内存分配与调整一、前言对于oracle 的内存的管理,截止到9iR2,都是相当重要的环节,管理不善,将可能给数据库带来严重的性能问题。下面我们将一步一步就内存管理的各个方面进行探讨。二、概述oracle 的内存可以按照共享和私有的角度分为系统全局区和进程全局区,也就是SGA 和PGA(process global area or private global area 。对于SGA 区域内的内存来说,是共享的全局的,在UNIX 上,必须为oracle 设置共享内存段(可以是一个或者多个,因为oracle 在UNIX 上是多进程;而在WINDOWS 上o

2、racle 是单进程(多个线程,所以不用设置共享内存段。PGA 是属于进程(线程私有的区域。在oracle 使用共享服务器模式下(MTS,PGA 中的一部分,也就是UGA 会被放入共享内存large_pool_size 中。对于SGA 部分,我们通过sqlplus 中查询可以看到:SQL select * from v$sga;NAME V ALUEFixed Size 454032Variable Size 109051904Database Buffers 385875968Redo Buffers 667648其中:Fixed Size:oracle 的不同平台和不同版本下可能不一样,但

3、对于确定环境是一个固定的值,里面存储了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 三部分内存。在9i 中包含db_cache_size 、db_keep_cache_size 、db_recycle_cache_size 、db_nk_cac

4、he_size 。Redo Buffers:指日志缓冲区,log_buffer 。在这里要额外说明一点的是,对于v$parameter 、v$sgastat 、v$sga 查询值可能不一样。v$parameter 里面的值,是指用户在初始化参数文件里面设置的值,v$sgastat 是oracle 实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以block 为最小单位进行分配的, v$sga 里面查询的值,是在oracle 分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小大约是11k(不同环境可能不一样。参考如下内容SQL select su

5、bstr(name,1,10 name,substr(value,1,10 value2 from v$parameter where name = log_buffer;NAME V ALUElog_buffer 524288SQL select * from v$sgastat ;POOL NAME BYTESfixed_sga 454032buffer_cache 385875968log_buffer 656384SQL select * from v$sga;NAME V ALUEFixed Size 454032Variable Size 109051904Database Buf

6、fers 385875968Redo Buffers 667648关于各部分内存的作用,参考oracle 体系结构,在此不再叙述。l 、SGA 的大小那么我们现在来考察内存参数的设置。实际上,对于特定的环境,总是存在着不同的最优设置的,没有任何一种普遍适用的最优方案。但为什么在这里我们还要来谈设置这个话题呢,那仅仅是出于一个目的,避免过度的犯错误。事实上,在任何一个生产系统正式投入使用之前,我们不拥有任何系统运行信息让我们去调整,这样就只有两种可能,一是根据文档推荐设置,另外一种就是根据经验设置。相对来说,根据经验的设置比根据文档的设置要可靠一些。尤其是那些24*7 的系统,我们更要减少错误的

7、发生。那么我们尝试去了解不同的系统不同的应用的具体设置情况,从而提供一个参照信息给大家。为了得出一个参照设置,我们就必须假定一个参照环境。以下所有设置我们基于这样一个假定,那就是硬件服务器上只考虑存在操作系统和数据库,在这个单一的环境中,我们来考虑内存的设置。在设置参数之前呢,我们首先要问自己几个问题1物理内存多大2操作系统估计需要使用多少内存3数据库是使用文件系统还是裸设备4有多少并发连接5应用是OLTP 类型还是OLAP 类型根据这几个问题的答案,我们可以粗略地为系统估计一下内存设置。那我们现在来逐个问题地讨论,首先物理内存多大是最容易回答的一个问题,然后操作系统估计使用多少内存呢?从经验

8、上看,不会太多,通常应该在200M 以内(不包含大量进程PCB。接下来我们要探讨一个重要的问题,那就是关于文件系统和裸设备的问题,这往往容易被我们所忽略。操作系统对于文件系统,使用了大量的buffer 来缓存操作系统块。这样当数据库获取数据块的时候,虽然SGA 中没有命中,但却实际上可能是从操作系统的文件缓存中获取的。而假如数据库和操作系统支持异步IO,则实际上当数据库写进程DBWR 写磁盘时,操作系统在文件缓存中标记该块为延迟写,等到真正地写入磁盘之后,操作系统才通知DBWR 写磁盘完成。对于这部分文件缓存,所需要的内存可能比较大,作为保守的估计,我们应该考虑在0.20.3 倍内存大小。但是

9、如果我们使用的是裸设备,则不考虑这部分缓存的问题。这样的情况下SGA 就有调大的机会。关于数据库有多少并发连接,这实际上关系到PGA 的大小(MTS 下还有large_pool_size。事实上这个问题应该说还跟OLTP 类型或者OLAP 类型相关。对于OLTP 类型oracle 倾向于可使用MTS,对于OLAP 类型使用独立模式,同时OLAP 还可能涉及到大量的排序操作的查询,这些都影响到我们内存的使用。那么所有的问题综合起来,实际上主要反映在UGA 的大小上。UGA 主要包含以下部分内存设置SQL show parameters area_sizeNAME TYPE V ALUEbitma

10、p_merge_area_size integer 1048576create_bitmap_area_size integer 8388608hash_area_size integer 131072sort_area_size integer 65536SQLOS 使用内存+SGA+并发执行进程数*(sort_area_size+hash_ara_size+2M show parameters sga_max_sizeNAME TYPE V ALUEsga_max_size unknown 193752940SQLSQL alter system set db_cache_size = 3

11、0000000;System altered.SQL alter system set shared_pool_size = 20480000;System altered.Lock_sga = true 的问题由于几乎所有的操作系统都支持虚拟内存,所以即使我们使用的内存小于物理内存,也不能避免操作系统将SGA 换到虚拟内存(SWAP。所以我们可以尝试使得SGA 锁定在物理内存中不被换到虚拟内存中,这样减少页面的换入和换出,从而提高性能。但在这里遗憾的是,windows 是无法避免这种情况的。下面我们来参考在不同的几个系统下怎么实现lock_sgalogon aix as rootcd /us

12、r/samples/kernel./vmtune (信息如下 v_pingshm已经是1./vmtune -S 1然后oracle 用户修改initSID.ora 中lock_sga = true重新启动数据库HP UNIXRoot 身份登陆Create the file /etc/privgroup: vi /etc/privgroupAdd line dba MLOCK to fileAs root, run the command /etc/setprivgrp -f /etc/privgroup:$/etc/setprivgrp -f /etc/privgrouporacle 用户修改

13、initSID.ora 中lock_sga=true重新启动数据库SOLARIS (solaris2.6 以上8i 版本以上数据库默认使用隐藏参数use_ism = true ,自动锁定SGA 于内存中,不用设置lock_sga, 如果设置lock_sga =true 使用非root 用户启动数据库将返回错误。WINDOWS 不能设置lock_sga=true, 可以通过设置pre_page_sga=true, 使得数据库启动的时候就把所有内存页装载,这样可能起到一定的作用。关于内存参数的调整关于参数调整,是oracle 的复杂性的一个具体体现。通常来讲,我们更倾向于让客户做statspack

14、 报告,然后告诉我们os 监控的状况,在这些的信息的基础上,再向客户索取具体的详细信息以诊断问题的所在。系统的调整,现在我们通常采用从等待事件入手的方法。因为一个系统感觉到慢,必然是在某个环节上出现等待,那么我们从等待最多的事件入手逐步诊断并解决问题。对于内存的调整,相对来说简单一些,我们首先可以针对数据缓冲区的大小来看。首先观察命中率数据缓冲区命中率SQL select value from v$sysstat where name =physical reads;V ALUE14764SQL select value from v$sysstat where name =physical

15、reads direct;V ALUE50SQL select value from v$sysstat where name =physical reads direct (lob;V ALUESQL select value from v$sysstat where name =consistent gets;V ALUE167763SQL select value from v$sysstat where name = db block gets;V ALUE14305这里命中率的计算应该是令x = physical reads direct + physical reads direc

16、t (lob 命中率=100 -( physical reads -x / (consistent gets + db block gets -x*100 通常如果发现命中率低于90%,则应该调整应用可可以考虑是否增大数据缓冲区共享池的命中率SQL select sum(pinhits-reloads/sum(pins*100 hit radio from v$librarycache;hit radio99.809291假如共享池的命中率低于95%,就要考虑调整应用(通常是没使用bind var 或者增加内存关于排序部分SQL select name,value from v$sysstat

17、 where name like %sort%;NAME V ALUEsorts (memory 67935sorts (disk 1sorts (rows 7070SQL假如我们发现sorts (disk/ (sorts (memory+ sorts (disk 的比例过高,则通常意味着sort_area_size 部分内存较小,可考虑调整相应的参数。关于log_bufferSQL select name,value from v$sysstatwhere name in(redo entries,redo buffer allocation retries;NAME V ALUEredo entries 2325719redo buffer allocation retries 10假如redo buffer allocation retries/ redo entries 的比例超过1%我们就可以考虑增大log_buffer 通常来说,内存的调整的焦点就集中在这几个方面,更多更详细的内容,建议从statspack 入手来一步一步调整。最后关于内存的调整,再强调这一点,一定要结合操作系统来衡量,任何理论都必须要实践来检验。在操作系统中观察page in/out 状况,发现问题严重,应该考虑调小SGA 。l 32bit 和64bit 的

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1