- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ORACLE内存结构研究
学 号: 2012131302 2012131307
课 程 设 计
课程名 大型数据库(Oracle)与实训 Oracle数据库内存结构研究 学 院 计信学院 专 业 金融信息化 班 级 2班 学生姓名 魏泽平 刘维燊 指导教师 刘波
2015 年 1 月 1 日 ORACLE内存结构研究
Oracle的内存,从总体上讲,可以分为两大块:共享部分(主要是SGA,系统全局
SGA
Share Pool
Buffer Cache
Redo Log Buffer
Java Pool
Stream Pool(10g)
Large Pool
PGA*n
Bitmap merge area
Sort Area
Hash Area
UGA*n
CUA*n
2.手动PGA内存管理
如果采用手动PGA内存管理,有些参数对PGA大小的影响最大,这是指PGA中除了会话为PL/SQL表和其他变量分配的内存以外的部分,这些参数如下:
SORT_AREA_SIZE:在信息换出到磁盘之前,用于对信息排序的RAM总量。
SORT_AREA_RETAINED_SIZE:排序完成后用于保存已排序数据的内存总量。也就是说,如果SORT_AREA_SIZE是512KB,SORT_AREA_RETAINED_SIZE是256 KB,那么服务器进程最初处理查询时会用512KB的内存对数据排序。等到排序完成时,排序区会“收缩”为256 KB,这256 KB内存中放不下的已排序数据会写出到临时表空间中。
HASH_AREA_SIZE:服务器进程在内存中存储散列表所用的内存量。散列联结时会使用这些散列表结构,通常把一个大集合与另一个集合联结时就会用到这些结构。两个集合中较小的一个会散列到内存中,散列区中放不下的部分都会通过联结键存储在临时表空间中。
Oracle将数据写至磁盘(或换出到磁盘)之前,数据排序或散列所用的空间量就由这些参数控制,这些参数还控制着排序完成后会保留多少内存段。SORT_AREA_SIZE~SORT_AREA_
RETAINED_SIZE这部分内存一般从PGA分配,SORT_AREA_RETAINED_SIZE这部分内存会在UGA中分配。通过查询一些特殊的Oracle V$视图,可以看到PGA和UGA内存的当前使用情况,并监视其大小的变化,这些特殊的V$视图也称为动态性能视图(dynamic performance view)。
例如,下面来运行一个小测试,这里会在一个会话中对大量数据排序,在第二个会话中,我们将监视第一个会话中UGA/PGA内存的使用。为了以一种可预测的方式完成这个工作,我们建立了ALL_OBJECTS表的一个副本,其中有大约45
000行,而且没有任何索引(这样就能知道肯定会发生排序):
sqlplus /as sysdba
create table T as select * from all_objects;
table created.
exec dbms_stats.gather_table_stats(user,T);
PL/SQL procedure successfully completed
为了消除最初硬解析查询所带来的副作用,我们将运行以下脚本,不过现在先不管它的输出。后面还会在一个新会话中再次运行这个脚本,查看受控环境中对内存使用的影响。我们会依次使用大小为64
KB、1 MB和1 GB的排序区:
create table T as select * from all_objects;
table created.
exec dbms_stats.gather_table_stats(user,T);
alter session set workarea_size_policy=manual;
alter session set sort_area_size=65536;
set termout off
select * from t order by 1,2,3,4;
set termout on
alter session set sort_area_size=1048576;
set termout off
select * from t order by 1,2,3,4;
set termout on
alter session sort_area_size=1073741820;
set termout off
select * from t order by 1,2,3,4;
set termout on
为了消除最初硬解析查询所带来的副作用,我们将运行以下脚本,不过现在先不管它的输出。后面还会在一个新会话中再次运行这个脚本,查
文档评论(0)