Tom 的 Expert one on one 的一个Bug

Tom 的 Expert one on one: Oracle 的一个Bug. 第三章讲到DML所的时候 Tom 用了一个脚本:

tkyte@TKYTE816> select username,
  2         v$lock.sid,
  3         trunc(id1/power(2,16)) rbs,
  4         bitand(id1,to_number('ffff','xxxx'))+0 slot,
  5         id2 seq,
  6         lmode,
  7         request
  8  from v$lock, v$session
  9  where v$lock.type = 'TX'
 10    and v$lock.sid = v$session.sid
 11    and v$session.username = USER
 12  /
    
USERNAME        SID        RBS       SLOT        SEQ      LMODE    REQUEST
-------- ---------- ---------- ---------- ---------- ---------- ----------
TKYTE             8          2         46        160          6          0

产品库上最好别直接用这个脚本,很慢很慢的.

解决的办法是加上一个Hint:

SELECT /*+ rule */ username, v$lock.SID, TRUNC (id1 / POWER (2, 16)) rbs,
       BITAND (id1, TO_NUMBER ('ffff', 'xxxx')) + 0 slot, id2 seq, lmode,
       request
  FROM v$lock, v$session
 WHERE v$lock.TYPE = 'TX'
   AND v$lock.SID = v$session.SID
   AND v$session.username = USER
/
| | TrackBacks (0) | | Edit

Generator | Trampoline


自定义搜索

本文相关评论|Comments(4)

jametong 的评论:

需要看optimzer_mode参数的设置了:)

Fenng 的评论:

考虑不周就是Bug了阿

oldwain 的评论:

fenng这次有点过于严以律人了。

tom的例子是帮助我们理解技术的,不是给dba做管理脚本用的。

另外像这种join多个v$表的情况,在不同版本的数据库上可能有不同的性能表现。像你那样加上hint,可能在其它版本中未必好。

总不能让他在书中写这段脚本的时候这样写吧?- 在8.1.x下用select /*+ hint1 */....., 在9.0.x下...., 在9.2.x下.....
:)


btw: tom好像不提倡在产品应用中使用hint。

老和尚 的评论:

总体上讲,这个SQL没有用途,所以我跳过去了...

添加评论

关于这篇文章

这篇文章由 Fenng 于 April 23, 2005 1:16 AM 发布

上一篇:ORA-02248

下一篇:V$Session_LONGOPS

回到首页查看最近的文章或者是查看所有归档文章

DBA notes 的订阅数量,点击则可进行订阅