ORACLE 記憶體管理 之四 SGA

weifenghq發表於2007-01-05
1. 再看記憶體結構裡最重要的部分SGA

SGA的各種引數

SQL> show parameter xxxx

db_block_size integer 8192

sga_max_size big integer 420551900

java_pool_size big integer 25165824

large_pool_size big integer 50331648

shared_pool_reserved_size big integer 4194304

shared_pool_size big integer 83886080

db_cache_size big integer 243269632

log_buffer integer 524288

workarea_size_policy string AUTO

SQL> show sga

Total System Global Area 420551900 bytes

Fixed Size 453852 bytes

Variable Size 176160768 bytes

Database Buffers 243269632 bytes

Redo Buffers 667648 bytes

SQL> select * from v$sga;

NAME VALUE

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

Fixed Size 453852

Variable Size 176160768

Database Buffers 243269632

Redo Buffers 667648

  • 基本組成

Fixed Size 一般不大,而且我們無法控制,是SGA內部用來控制其它內部資訊的,比如控制其他SGA元件。比如它應該和java_pool_size + large_pool_size + shared_pool_size的大小有關係,而且還會和其他引數有關.

Redo Buffer 存放那些需要寫到online redo logs的東西.因為MEM TO MEM要比MEM TO DISK快很多, ORACLE這麼設定就是為了提高速度,所以資料不會在這裡存放很長時間就會被LGWR 寫到REDO LOG(three seconds,commit,one third full,1M).一般設定成128*cpu

Database Buffers (BUFFER CACHE)8以後就分成三個部分.

Default Pool

Keep Pool :

Recycle Pool

這三個部分的管理方法與淘汰方法都一樣,只是為了將熱的’(Default),’普通的’(Keep),’不需要關心是否要保持在CACHE’(Recycle)這三部分隔離開來, Recycle Pool 不需要很大,以便來去都快.這種設計增加了DBA的工作強度,實際上很多時候不需要考慮這麼細分buffer cache,儘量透過其他途徑比如修改SQL來調整效能.

Database Buffers 裡面有兩種資料,1,dirty ,會被DBWn寫入到資料檔案中,

2,dirty,用來讀.

8.0以前用LRU淘汰法,現在用’touch count’的演算法,這個演算法更符合實際.具體資訊可以在x$bh裡得到.

1 select tch||' '|| owner||' '|| object_name||' '|| object_type

2 from dba_objects,

3 (select *

4 from ( select tch, obj

5 from x$bh

6 order by tch desc

7 )

8 where rownum <= 5

9 ) hottest_blocks

10 where dba_objects.data_object_id = hottest_blocks.obj

11* order by tch desc

SQL> /

TCH||''||OWNER||''||OBJECT_NAME||''||OBJECT_TYPE

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

417 SBPOPT DE_RECEIVELOG TABLE

412 SBPOPT DE_RECEIVELOG TABLE

192 SBPOPT TI_REPAIR_DEED TABLE PARTITION

165 SYS C_USER# CLUSTER

165 SYS TSQ$ TABLE

165 SYS USER$ TABLE

X$BH裡就是在BUFFER CACHE裡的塊的資訊,TCH就是’touch count’,隨著頻繁的使用,TCH也會增加的.

select tch, file#, dbablk

from x$bh

where (dbablk,file#) in

(select dbms_rowid.rowid_block_number(rowid),

dbms_rowid.rowid_to_absolute_fno(rowid,'SYS','YOUR TABLE NAME')

from dual)

and state = 1

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/633084/viewspace-888423/,如需轉載,請註明出處,否則將追究法律責任。

相關文章