ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [zt] 自动SGA内存管理

[zt] 自动SGA内存管理

原创 Linux操作系统 作者:tolywang 时间:2009-04-17 09:43:19 0 删除 编辑

test.__db_cache_size=33554432
test.__java_pool_size=4194304
test.__large_pool_size=4194304
test.__shared_pool_size=117440512
test.__streams_pool_size=0
*.audit_file_dest='D:\oracle\product\10.2.0\admin\test\adump'
*.background_dump_dest='D:\oracle\product\10.2.0\admin\test\bdump'
*.compatible='10.2.0.3.0'
*.control_files='D:\oracle\product\10.2.0\oradata\test\control01.ctl','D:\oracle\product\10.2.0\oradata\test\control02.ctl','D:\oracle\product\10.2.0\oradata\test\control03.ctl'
*.core_dump_dest='D:\oracle\product\10.2.0\admin\test\cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='test'
*.db_recovery_file_dest='D:\oracle\product\10.2.0\flash_recovery_area'
*.db_recovery_file_dest_size=1073741824
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=D:\oracle\product\10.2.0\oradata\archive'
*.log_archive_format='ARC%S_%R.%T'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=1105
*.sga_target=167772160
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='D:\oracle\product\10.2.0\admin\test\udump'
*.utl_file_dir='d:\oracle\product\10.2.0\oradata\test\logs_utl_file'

 

----------------------------------------------------------------------------------------------------------------------------------- 

自动SGA内存管理特征  :  双下划线的参数

 

自动SGA内存管理

与管理PGA内存有两种方法一样,从Oracle 10g开始,管理SGA内存也有两种方法:手动管理和自动管理。手动管理需要设置所有必要的池和缓存参数,自动管理则只需设置少数几个内存参数和一个SGA_TARGET参数。通过设置SGA_TARGET参数,实例就能设置各个SGA组件的大小以及调整它们的大小。

注意    Oracle9i及以前版本中只能用手动SGA内存管理不存在参数SGA_TARGET而且参数 SGA_MAX_SIZE只是一个上限而不是动态目标。

Oracle 10g中,与内存相关的参数可以归为两类:

q  自动调优的SGA参数:目前这些参数包括DB_CACHE_SIZESHARED_POOL_SIZELARGE_POOL_SIZEJAVA_POOL_SIZE

q  手动SGA参数:这些参数包括LOG_BUFFERSTREAMS_POOLDB_NK_CACHE_SIZEDB_KEEP_CACHE_SIZEDB_RECYCLE_CACHE_SIZE

Oracle 10g中,任何时候你都能查询V$SGAINFO来查看SGA的哪些组件的大小可以调整。

注意    要使用自动SGA内存管理,参数STATISTICS_LEVEL必须设置为TYPICALALL。如果不支持统计集合,数据库就没有必要的历史信息来确定大小。

采用自动SGA内存管理时,确定自动调整组件大小的主要参数是SGA_TARGET,这个参数可以在数据库启动并运行时动态调整,最大可以达到SGA_MAX_SIZE参数设置的值(默认等于SGA_TARGET,所以如果想增加SGA_TARGET,就必须在启动数据库实例之前先把SGA_MAX_SIZE设置得大一些)。数据库会使用SGA_TARGET值,再减去其他手动设置组件的大小(如DB_KEEP_CACHE_SIZEDB_RECYCLE_CACHE_SIZE等),并使用计算得到的内存量来设置默认缓冲区池、共享池、大池和Java池的大小。在运行时,实例会根据需要动态地对这4个内存区分配和撤销内存。如果共享池内存用光了,实例不会向用户返回一个ORA-04031Unable to allocate N bytes of shared memory”(无法分配N字节的共享内存)错误,而是会把缓冲区缓存缩小几MB(一个颗粒的大小),再相应地增加共享池的大小。

随着时间的推移,当实例的内存需求越来越确定时,各个SGA组件的大小也越来越固定。即便数据库关闭后又启动,数据库还能记得组件的大小,因此不必每次都从头再来确定实例的正确大小。这是通过4个带双下划线的参数做到的:__DB_CACHE_SIZE__JAVA_POOL_SIZE__LARGE_POOL_SIZE__SHARED_POOL_SIZE。如果正常或立即关闭数据库,则数据库会把这些值记录到存储参数文件(SPFILE)中,并在启动时再使用这些值来设置各个区的默认大小。

另外,如果知道4个区中某个区的最小值,那么除了设置SGA_TARGET外,还可以设置这个参数。实例会使用你的设置作为下界(即这个区可能的最小大小)

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-591970/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13471915