天天看點

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;

繼續閱讀