1 計算redo block size的大小
LGWR以block為單位把redo寫入磁碟,redo block size是Oracle原始碼中固定的,與作業系統相關。
通常的作業系統都是以512 bytes為單位,如:Solaris, AIX, Windows NT/2000, Linux 等
這個Log size可以從Oracle的內部視圖中獲得:
SQL> select max(lebsz) from x$kccle; MAX(LEBSZ) ---------- 512 |
也可以從v$sysstat中的統計資訊中通過計算粗略得到.
以下幾個統計資訊如:
redo size------------redo資訊的大小
redo wastage---------浪費的redo的大小
redo blocks written--LGWR寫出的redo block的數量
額外的資訊,每個redo block header需要佔用16 bytes.
由此可以粗略的計算redo block size如下
SQL> select name,value from v$sysstat 2 where name in ('redo size','redo wastage','redo blocks written'); NAME VALUE ---------------------------------------------------------------- ---------- redo size 2242628 redo wastage 63904 redo blocks written 4657 SQL> select ceil(16 + (2242628 + 63904)/4657) rbsize from dual; RBSIZE ---------- 512 |
2 查看登陸系統的警報檔案
show parameter background_dump_dest 3 oracle 10g的自動記憶體管理
在Oracle10g中,不必再如從前一樣用下列各個參數分別指定SGA的每個部分的大小.也就是說不需要首先評估SGA各組件的大小,並且在init<SID>.ora初始參數檔案中分組件指定.(當然某些組件如果不不使用是可以不指定的.比如java_pool_size).
shared_pool_size
java_pool_size
large_pool_size
db_cache_size
在10g中可用一個新參數SGA_TARGET來設定實列所需的SGA最大值,並替代以上參數.
假設,將SGA_TARGET設定為152M,則表明SGA最大為152M. 所有SGA組件如shared pool, buffer cache,large pool, java pool都需從其中分配. Oracle會自動為各組件指定初始值,並在運行過程中動態地調整各組件的
大小.毋須人工幹預.
這樣,只要設定了SGA_TARGET, 就毋須顯式地定義shared pool,buffer pool,large pool和java pool的大小.
例如:定義SGA_TARGET=152M(block size為8k).
SQL> show parameter db_block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
SQL> show parameter sga_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 152M
Oracle會自動將記憶體配置給各組件:
SQL> show sga
Total System Global Area 159383552 bytes
Fixed Size 1218268 bytes
Variable Size 67111204 bytes
Database Buffers 88080384 bytes
Redo Buffers 2973696 bytes
使用sga_target參數有幾點需要注意:
1. 當使用sga_target時, 若未設定sga_max_size,或設定了小於sga_target,則sga_max_size將等於sga_target.
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 152M
sga_target big integer 152M
2. 當sga_target是可動態調整的,但其值不能大於sga_max_size.
在sga_target為非零情況下,啟用自動sga管理,但是有些組件是不能自動管理的,包括三部分:
nk buffer;log buffer;keep&recycle buffer;
這些非自動管理組件必須手工設定,而且這部分記憶體的大小也在sga_target管理範圍內,實際上參與自動分配的記憶體是要sga_target
減去這部分的大小。可以理解為實際上sga的大小是由sga_target(動態參數)指定,且不能大於sga_max_size指定的大小,
而sga_max_size是在執行個體啟動時同作業系統打交道的一個參數(靜態參數!)
而如果指定了share_pool_size等以前用的參數時,就作為這些動態組件的一個下限來使用(其實這個特徵也很重要。)
nK Buffer:
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
3 等待事件
分為空白閑非空閑,主要關注非空閑事件.比較重要的有
v$session,v$session_wait,v$system_event
其中v$session_wait在10g中變的作用不大了,主要看v$session了,
比如可以
select sid,event,p1,p1text from v$session_wait;
還有一個叫v$session_wait_history視圖,記錄session最近10次等待事件
select event,p1text,p1,p2text,p2,p3text,p3,wait_time form v$session_wait_history where sid=120;