ITPub博客

首页 > 数据库 > Oracle > latch分类

latch分类

原创 Oracle 作者:lvqiao2009 时间:2007-06-15 10:31:54 0 删除 编辑

从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博客 ” ,链接:https://blog.itpub.net/7248175/viewspace-918940/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: latch的层次概念
下一篇: 浅论ORA-01555
请登录后发表评论 登录
全部评论
  • 博文量
    19
  • 访问量
    167021