Oracle 10g内存结构之排序区和Java池的相关知识简介_Oracle_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > Oracle > Oracle 10g内存结构之排序区和Java池的相关知识简介

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

 2013/8/10 1:21:41    程序员俱乐部  我要评论(0)
  • 摘要:之前我们介绍了:Oracle10g内存结构之共享池的相关知识及使用简介,本文我们接着介绍一下剩余的部分,包括:程序全局区、排序区、Java池等的相关知识,接下来我们就开始介绍这部分内容。程序全局区程序全局区是包含单个用户或服务器数据和控制信息的内存区域。程序全局区是用户进程连接到oracle数据库并创建一个会话时,由oracle自动分配的。与sga不同,pga并非共享区,主要用于用户在编程时存储变量和数组。该区域中STACKSPACE是用于存储用户会话的变量和数组的存储区域
  • 标签:ORA 简介 Java Oracle 内存

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

程序全局区

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

排序区

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

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

参数文件:

    class="dp-xml">
  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池的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获。

发表评论
用户名: 匿名