从oracle 9201起,oracle根据不同的spin_count对latch进行了分类。
为什么要进行这样的分类了?
因为以前版本中,改一个latch的spin_count,会牵一发而动全身,让所有latch的spin_count都被同样地改变了。这种做法明显不太具有实际应用的可行性。所以oracle根据不同的spin_count对latch分成了8类,说明你可以把系统中的latch按它们的不同spin_count分成8类,但它们的系统默认值spin_count都是16000。
这样做有什么应用前景?
可以根据系统自身资源使用情况,针对不同latch不同资源使用特点,优化各个latch的spin_count.如某个latch的spin成功率很不高,而系统又给进程很多cpu time让它spin,这些cpu time就比较浪费。所以可以把spin_count减少,以优化资源使用。如果系统cpu资源非常充裕,那么完全可以增加重要latch的spin_count,以减少可能的sleep.
如何改变一个latch的spin_count值了?实验如下:
SQL> select indx, spin, yield, waittime from x$ksllclass;
INDX SPIN YIELD WAITTIME
---------- ---------- ---------- ----------
0 16000 0 1
1 16000 0 1
2 16000 0 1
3 16000 0 1
4 16000 0 1
5 16000 0 1
6 16000 0 1
7 16000 0 1
已选择8行。
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=2;
KSLLDNAM KSLLTNUM CLASS_KSLLT
------------------------------ ---------- -----------
process allocation 3 2
修改参数,重新启动数据库.
_latch_class_3 =10000
_latch_classes =154:2
SQL> select indx, spin, yield, waittime from x$ksllclass;
INDX SPIN YIELD WAITTIME
---------- ---------- ---------- ----------
0 16000 0 1
1 16000 0 1
2 10000 0 1
3 16000 0 1
4 16000 0 1
5 16000 0 1
6 16000 0 1
7 16000 0 1
已选择8行。
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=2;
KSLLDNAM KSLLTNUM CLASS_KSLLT
------------------------------ ---------- -----------
process allocation 3 2
shared pool 154 2
从这里可以看出shared pool latch已经是2类,而从前面可以看到2类的_spin_count是10000。不是默认的16000.
修改指定的latch的spin_count完成。
在oracle里还有一种分类。即把latch分为父子和独立。
何为独立,不是父也不是子不涉及父子关系的就是独立。
父子平等。
[@more@]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7248175/viewspace-918940/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7248175/viewspace-918940/