应用Oracle latch分类

隐含参数_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.
Database dismounted.
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版本,之前其他版本可能会有不同。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14284241/viewspace-374634/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14284241/viewspace-374634/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值