- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle数据库共享池的空间管理调优
Oracle数据库共享池的空间管理调优
摘 要: Oracle数据库是当前使用最为广泛的大型数据库之一。共享池存储数据库所运行的可执行程序代码和相关数据字典提供,是Oracle数据库体系中最复杂的内存组件之一。由于缺乏对共享池内部运行机制的了解,当数据库在运行过程中显示共享池中空闲空间较多,报ORA?4031错误提示共享池空间不足时,往往束手无策。通过导出Oracle数据库共享池的内存数据的方法,总结并分析共享池空间管理的内部管理机制,找到空闲空间较多而报ORA?4031错误的原因,给出了错误检测方法和相对应的解决方法。
关键词: 共享池; 空间管理; 调优; Oracle数据库
中图分类号: TN919?34; TP311 文献标识码: A 文章编号: 1004?373X(2015)04?0069?04
0 引 言
内存管理是Oracle数据库体系结构中重要的组成部分,也是Oracle数据库性能优化的主要方面。共享池是Oracle数据库内存管理中最重要的组件之一,如果不了解共享池空间内部管理机制,就不能指导应用开发人员设计出高效的SQL语句,也不能设置正确解决ORA?0431问题。有些DBA当发现共享池出现性能问题时,只简单的把共享池设置的非常“大”。而共享池过大或过小都会降低性能,严重的情况下还会挂起数据库。因此,研究Oracle数据库共享池空间内部管理机制对于共享池调优是非常必要的。
1 共享池组成
共享池是SGA的一部分,用于缓存不同类型的程序数据,例如编译的SQL和PL/SQL代码、系统参数、数据字典等,包含Library Cache,Data Dictionary Cache,Reservered Pool,Server Result Cache等组件[1]。从10gR2版本之后,Oracle将共享池的组件分的更加详细,很多组件大小是固定的,并且在实例启动时就已经分配好空间。
使用V$SGASTAT视图查看共享池所包含的组件和各组件的大小:
尽管随着版本的发展,共享池提供更多的服务功能。功能越多,空间管理复杂度就越高。只有清楚共享池空间管理内部机制,才能理解空间不足报错的原因,进而真正解决问题,而不是一味地增加共享池的空间。
2 共享池结构
2.1 子池
为了避免shared pool latch竞争,从9i开始引入了共享池子池(Shared Pool Sub?pool),每个子池都有freelist和LRU list,这样减少了很多竞争。通过下面因素自动确定子池的个数:
每4颗CPU对应一个子池;
每个子池至少512 MB(10g以后的版本);
最多可以有7个子池。
可以通过查询X$KGHLU视图,查看子池个数。在11g中,Oracle又把每个子池分为4个子子池(sub?sub?pool),也叫Duration。根据不同类型的请求在相应Duration中分配空间,每个Duration由若干个extent(extent等于SGA基本单位granule)组成。使用下面的语句可以将共享池的结构导出到跟踪文件中:
Oradebug setmyid
Oradebug dump heapdump 2
跟踪文件显示结果为:
HEAP DUMP heap name=sga heap(1,0) desc=380050c30
EXTENT 0 addr=3ae400000
EXTENT 1 addr=3ae800000
………………
HEAP DUMP heap name=sga heap(1,1) desc=380052488
EXTENT 0 addr=3a5000000
EXTENT 1 addr=3a8000000
………………
sga heap(1,0)代表sub?pool 1的Duration 0,sga heap(1,1)代表sub?pool 1的Duration 1。Duaration地址空间是连续的,是granule的倍数。由此可以得到共享池中子池的结构图,如图2所示。
Duration 1缓存Data Dictionary Cache;Duration 2缓存游标的Heap 0;Duration 3缓存游标的执行计划;Duration 0比其他Duration都大,主要用户缓存数据库启动时所需缓存的固定组件,也会为其分配足够的extents,当其他Duration空间不足时,会从此Duration向其他Duration动态分配extent。每个Duration的大小会根据数据库负载动态调整,当Duration空闲空间不足时,可以向Durat
原创力文档


文档评论(0)