天天看点

sga_target memory_target 调整大小

http://space.itpub.net/13177610/viewspace-671812

sga_target是动态参数,可以调整后马上生效的

但是前提是当前分配的sga_max_size下必须能够承载分配的内存量

这个参数的值只有0和非零两种选择,非零时时和sga_max_size大小保持一致的

所以如果要吧sga_target改成大于sga_max_size的值就必须按照静态参数的改法,重新启动实例

重启后默认的sga_max_size会自动调整到和sga_target一样大小的

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

版本

SQL> select * from

v$version;

BANNER

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

Oracle

Database 10g Enterprise Edition

Release10.1.0.2.0 - Prod

PL/SQL Release

10.1.0.2.0 - Production

CORE    10.1.0.2.0      Production

TNS for 32-bit

Windows: Version 10.1.0.2.0 - Production

NLSRTL Version 10.1.0.2.0 -

Production

使用spfile

SQL> show parameter spfile

NAME                      

          TYPE                   VALUE

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

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

spfile                

              string             

   F:\ORACLE\PRODUCT\10.1.0\DB_1\

调整前

SQL> set wrap off

SQL> set linesize 159

SQL> show

parameter sga

NAME                                 TYPE                  

VALUE

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

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

lock_sga                             boolean 

              FALSE

pre_page_sga                         boolean             

  FALSE

sga_max_size                         big integer          

 300M

sga_target                           big integer          

调整为小于sga_max_size值

SQL> alter system set sga_target=200m;

System

altered.

SQL> show parameter sga

NAME                         

       TYPE                   VALUE

lock_sga             

               boolean                FALSE

pre_page_sga                   

     boolean                FALSE

sga_max_size                         big

integer            300M

sga_target                           big integer    

       300M

调整为大于sga_max_size值

SQL> alter system set sga_target=500m;

alter system set

sga_target=500m

*

ERROR at line 1:

ORA-02097: parameter cannot be

modified because specified value is invalid

ORA-00823: Specified value of

sga_target greater than sga_max_size

按照静态参数的方式调整

SQL> alter system set sga_target=500m

scope=spfile;

System altered.

SQL> show parameter

sga

重启验证

SQL> shutdown immediate

Database closed.

Database

dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance

started.

Total System Global Area  524288000 bytes

Fixed Size       

           789672 bytes

Variable Size             145486680 bytes

Buffers          377487360 bytes

Redo Buffers                 524288

bytes

Database mounted.

Database opened.

 500M

http://blog.csdn.net/fw0124/article/details/6757368

Oracle9i引入pga_aggregate_target,可以自动对PGA进行调整;

Oracle10引入sga_target,可以自动对SGA进行调整。

Oracle11g则对这两部分进行综合,引入memory_target,可以自动调整所有的内存,这就是新引入的自动内存管理特性。

下面我们通过以下的几个命令来让大家清楚memory_target

的设置与PGA与SGA的关系:

SQL> alter system set memory_target=200m

SQL> alter system set sga_target=0

SQL> alter system set

pga_aggregate_target=0 scope=spfile;

SQL> shutdown

immediate;

Database dismounted.

ORACLE instance shut

down.

ORACLE instance started.

Total System

Global Area 209235968 bytes

Fixed Size 1298920 bytes

Variable Size

150998552 bytes

Database Buffers 54525952 bytes

Redo Buffers 2412544

opened.

设置memory_target参数后,实际上Oracle会自动设置并调整以下两个参数来分配SGA和PGA的内存,这和Oracle10g自动设置sga_target后分配db_cache_size和shared_pool_size的机制是一样的

SQL>

select a.ksppinm name,b.ksppstvl value

2 from x$ksppi a,x$ksppcv b

3 where

a.indx=b.indx

4 and (a.ksppinm like '%sga_target%'

5 or a.ksppinm like

'%pga_aggregate_target%');

NAME

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

sga_target 0

__sga_target

125829120

pga_aggregate_target 0

__pga_aggregate_target

79691776

下面我们了解一下ORA-00845的由来与解决方案:

如果memory_max_target/memory_target设置过大,可能导致instance无法启动,报ORA-00845错误

alter system set memory_max_target=300m scope=spfile;

SQL> shutdown immediate;

ORA-00845:

MEMORY_TARGET not supported on this

system

这个错误有点误导,实际上这并不是说该平台版本上不支持AMM特性,只是设置的memory_max_target超过了系统中设置的share

memory(/dev/shm)而已。在Oracle11g for linux中似乎使用了一种新的机制来管理共享内存段,而不是传统的sys

/dev/shm了。在alert.ora中可以找到更准确的错误描述

解决这个问题的办法之一是增加tmpfs文件系统的容量。

修改/etc/fstab中tmpfs对应的行,

将原来的

tmpfs /dev/shm tmpfs defaults 0 0

改成 tmpfs /dev/shm tmpfs defaults,size=1024M

0 0 ,这样tmpfs增大为1G

size参数也可以用G作单位:size=1G。

重新mount /dev/shm使之生效:

# mount

-o remount /dev/shm

马上可以用"df

-h"命令检查变化。

修改实例的MEMORY_TARGET参数。(这个在数据库关着的时候是行不能通的,用上面的那种比较彻底)

这个方法用alter

system set memory_target=200M;

继续阅读