隱含參數_SPIN_COUNT用來控制進程在獲取latch失敗的時候,CPU spin和重試的次數。較大的_SPIN_COUNT值會降低latch獲取時的MISSES和SLEEPS值,當然這是以犧牲CPU時間爲代價的。有時候,我們可能因爲某一個特定的latch需要調整_SPIN_COUNT值。在Oracle9i2之前的版本中,這一改變會應用到所有的latches上,而這一_SPIN_COUNT值並不一定適合其他的latch,甚至可能會造成嚴重的負面影響。從Oracle9iR2開始,Oracle允許對latch進行分類,每一類可以有不同的_SPIN_COUNT,YIELD,WAITTIME值。如此一來,設置某個特定latch的_SPIN_COUNT值,可以完全不影響到其他latch。
下面是一個latch分類的簡單實例。
SQL> select indx, spin, yield, waittime
2 from x$ksllclass;
INDX SPIN YIELD WAITTIME
---------- ---------- ---------- ----------
0 20000 0 1
1 20000 0 1
2 20000 0 1
3 20000 0 1
4 20000 0 1
5 20000 0 1
6 20000 0 1
7 20000 0 1
8 rows selected.
系統默認的8個latch分類,每一個分類對應一個隱含的初始化參數_LATCH_CLASS_n,可以通過修改這些參數來設置各個分類的_SPIN_COUNT值。假設我們需要設置cache buffers chains latch的_SPIN_COUNT=10000。
首先通過V$LATCHNAME視圖,得到cache buffers chains的LATCH#。
SQL> select latch#, name
2 from v$latchname
3 where name = 'cache buffers chains';
LATCH# NAME
--------- --------------------------------------------------
122 cache buffers chains
其次,創建init.ora文件(假設初始使用spfile),並修改。
SQL> create pfile from spfile;
File created.
SQL> shutdown immediate
Database closed.
ORACLE instance shut down.
vi $ORACLE_HOME/dbs/initrandy.ora
/*添加如下兩行內容*/
_latch_class_1="10000"
_latch_classes="122:1"
SQL> startup pfile='/u01/oracle/product/10.2.0/dbs/initrandy.ora'
這樣,就將cache buffers chains從默認的0類修改到1類,並設置1類的_SPIN_COUNT=10000。
最後,我們可以來驗證一下。
SQL> select indx, spin, yield, waittime
2 from x$ksllclass;
INDX SPIN YIELD WAITTIME
---------- ---------- ---------- ----------
0 20000 0 1
1 10000 0 1
2 20000 0 1
3 20000 0 1
4 20000 0 1
5 20000 0 1
6 20000 0 1
7 20000 0 1
8 rows selected.
SQL> select a.kslldnam, b.kslltnum, b.class_ksllt
2 from x$kslld a, x$ksllt b
3 where a.kslldadr = b.addr
4 and b.class_ksllt > 0;
KSLLDNAM KSLLTNUM CLASS_KSLLT
-------------------------------------------------- ---------- -----------
process allocation 3 2
cache buffers chains 122 1
SQL> select a.kslldnam, b.kslltnum, b.class_ksllt
2 from x$kslld a, x$ksllt b
3 where a.kslldadr=b.addr and a.kslldnam='cache buffers chains';
KSLLDNAM KSLLTNUM CLASS_KSLLT
-------------------------------------------------- ---------- -----------
cache buffers chains 122 1
以上測試來自Oracle10gR2版本,之前其他版本可能會有不同。