Oracle 10g内存结构之排序区和Java池的相关知识简介

数据库 Oracle
本文我们主要介绍了Oracle 10g内存结构之程序全局区、排序区和Java池的相关知识,以及手动内存管理转到自动内存管理的方法,希望能够对您有所帮助。

之前我们介绍了:Oracle 10g内存结构之共享池的相关知识及使用简介,本文我们接着介绍一下剩余的部分,包括:程序全局区排序区Java池等的相关知识,接下来我们就开始介绍这部分内容。

程序全局区

程序全局区是包含单个用户或服务器数据和控制信息的内存区域。程序全局区是用户进程连接到oracle数据库并创建一个会话时,由oracle自动分配的。与sga不同,pga 并非共享区,主要用于用户在编程时存储变量和数组。该区域中 STACK SPACE 是用于存储用户会话的变量和数组的存储区域,USER SESSION DATA 是用户会话使用的附加区域。用户会话结束pga 释放。

排序区

Sort  Area 是为有排序请求的sal 语句提供内存空间,系统使用专用的内存区域进行数据排序,这部分空间就称为排序区,用户数据的排序可以分为两个一个是内存排序区,另外一个是磁盘临时段。系统优先使用内存排序区进行排序。如果内存不够,oracle自动使用磁盘临时段表空间进行排序。

要了解排序区的大小,可以查看 sort_area_size 方法如下:

参数文件:

  1. ….  
  2. Compatible = 8.1.0  
  3. Sort_area_size = 65536 
  4. Sort_area_retained_size = 65536 
  5. ….. 

方法二:

  1. SQL>select name,value from v$parameter where name like ‘%size’; 

方法三:

  1. SQL> show parameter sort_area_size 

如果要了解数据库中排序区的使用情况,确认在内存排序量与磁盘排序量,可以查询数据字典v$sysstat

SQL> select name,value from v$sysstat where name like ‘%sort%’;

大池

大池(large pool)用于数据库备份工具—恢复管理器(rman)

大池的参数由large_pool_size 确定。

查询该值的方法有三,这里介绍其中一个方法:

SQL> show parameter large_pool_size

Java 池

参数java_pool_size  大小应该不小于20M。

Oracle10g自动共享内存管理

在oracle 中 将参数STSTISTICS_LEVEL 设置为 TYPICAL(默认)或ALL,使用新参数SGA_TARGET 指出SGA内存分配总大小即可,不需要定义SHAR_POOL_SIZE DB_CACHE_SIZE 等参数,数据库服务器会自动根据需要动态分配。 注意如果没有sga_targe ,则自动共享内存管理功能被禁止,仍然可以设置每个参数。在设置了SGA_TARGET 后,其他参数默认设置为0。

自动恭喜内存管理时设置内存参数的最小值限制:如果数据库管理员了解某一个应用所需的内存大小,就可以为内存组件指定最小值。最小值可以用相应的参数进行设置,例如:

  1. SGA_TARGET256m 
  2. SHARE_POOL_SIZE32M 
  3. DB_CACHE_SIZE = 100M 

即在自动分配时,共享池及数据缓冲区的值不得小于32m 和 100m ,其余的124m 内存将分配给其他组件。可以查询数据字典 v$sga_dynamic_components 了解各个组件的分配值。

当启动自动共享内存管理的功能后,对于自动设置的参数也可以手动设置,例如SHARE_POOL_SIZE 如果为sga 组件参数设置了比较小的值,则不会立即起作用,例如:如果设置参数SGA_TARGET = 512M ,SHARE_POOL_SIZE = 256M 而当前共享池为284M,如果dba 动态减少SHARE_POOL_SIZE的值,使之低于256M或更低的值时将不起作用。如果参数值超过当前组件值,则组件的值也随之增加,如果SHARE_POOL_SIZE的值为300M,则共享池增加到300M。

在自动管理内存时,当参数的取值增加时,则用于自动调整地额外内存就减少,反之亦然。

此外,一些sga参数必须由数据库管理员设置,系统将不进行自动调整。这些参数包括:

  •  LOG_BUFFER
  •  DB_KEEP_CACHE_SIZE
  •  DB_RECYCLE_CACHE_SIZE
  •  DB_nK_CACHE_SIZE
  •  STREAMS_POOL_SIZE

这些参数设置后将影响到其他参数的自动分配,(可用内存变化)。

手动内存管理转到自动内存管理

如果要从手动内存管理转到自动内存管理,只需要增加参数SGA_TARGET即可。首先,计算出SGA各个参数的取值,再加上16M(fixed SGA overhead),即可得到SGA总大小。然后从参数文件中将内存各个组件的值取消。例如:

  •  SHARE_POOL_SIZE = 256M
  •  DB_CACHE_SIZE = 512M
  •  LARGE_POOL_SIZE = 256M
  •  LOG_BUFFER  = 16M

 则SGA_TARGET = 256+512+256+16+16 =1056M,也可以查询数据字典得到:

  1. SQL> select ( ( select sum(value) from v$sga ) – (select current_size from v$ sga_dynamic_free_memory ) ) “sga_target” from dual; 

又例如:如果一个手动管理的实例SGA_MAX_SIZE = 1200M 其中

  1. SHARE_POOL_SIZE = 200M 
  2. DB_CACHE_SIZE = 500M 
  3. LARGE_POOL_SIZE = 200M 

查询结果如下:

  1. SQL> select sum(value) from v$sga  ;  结果为1200m  
  2. SQL> select current_size from v$sga_dynamic_free_memory ;   

结果为208M。

则SGA_TARGET =1200 – 208 = 902M。

从参数文件取消SHARE_POOL_SIZE DB_CACHE_SIZE LARGE_POOL_SIZE

在自动内存管理方式下,如果数据库适用spfile ,那么数据库关闭后,系统激昂上一次数据库关闭时的状态记录下来,经过调整后的内存参数的各个组件的值将保存在参数文件中,所以如果使用自动内存管理,最好使用spfile。

关于Oracle 10g内存结构之排序区和Java池的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获。

【编辑推荐】

  1. Oracle 11g R2数据库示例用户安装说明
  2. Oracle 11g数据库审计功能应用实例解析
  3. Oracle 11g数据库默认审计选项说明详解
  4. Oracle 11g数据库使用XML Table的BUG解决
  5. PowerDesigner15连接Oracle出错的解决方案
责任编辑:赵鹏 来源: 火魔网
相关推荐

2011-08-23 14:47:29

Oracle 10g内共享池

2011-08-23 14:23:25

Oracle 10g内系统全局区

2010-03-31 09:56:46

Oracle10g

2009-10-20 18:32:25

Oracle 10g

2010-04-14 16:09:51

Oracle 10g归

2010-04-16 15:57:54

Oracle 10g

2010-03-30 19:31:25

Oracle 10g

2011-05-13 11:21:51

linuxoracle 10g安装

2011-03-25 16:10:58

oraclenagios

2011-03-29 10:09:41

Oracle 10g虚拟数据库

2011-08-17 16:11:02

Oracle 10g正REGEXP_LIKE

2009-10-23 16:03:40

Oracle 10g系内存管理

2010-05-07 09:35:25

Oracle 10g

2011-04-15 09:53:37

Oracle 10gSQL优化

2010-04-07 09:39:18

Oracle 10G

2009-04-27 13:26:41

Oracle 10gRAC链接错误

2010-04-26 10:32:55

Oracle 10g

2010-04-13 10:07:19

Oracle 10G

2009-11-19 10:32:41

Oracle 10g服

2011-08-17 14:19:43

Oracle 10gShrink Tablshrink spac
点赞
收藏

51CTO技术栈公众号