Q & A

Lock Tree 쿼리가 느립니다.

Date2014.11.25 / Hit : 5831

지금 사용 중인 버전은 6.0.0(Build:5) 입니다.

 

사용중인 DB가 RAC 이어서 옵션에서 GV$ 뷰로 조회 하도록 설정해 놓고 조회하니 느려서 어떤 쿼리를 수행하는지 살펴보니

아래의 쿼리가 수행 됩니다.

 

SELECT /*+ ordered */ s.inst_id,
       decode(lk.lmode, 0, to_char(s.sid), ' ') lock_sid,
       s.sid,
       s.serial#,
       decode(lk.type, 'TD', decode(u.name, '', '', u.name||'.'||o.name), 'TM', decode(um.name, '', '', um.name||'.'||om.name), 'RW', 'FILE#=' || substr(lk.id1, 1, 3) || ' BLOCK#=' || substr(lk.id1, 4, 5) || ' ROW=' || lk.id2, 'TX', 'RBS#=' || FLOOR(lk.id1/65536) || ' SLOT#='|| MOD(lk.id1, 65536) || ' WRP#=' || lk.id2, 'WL', 'REDO LOG FILE#=' || lk.id1, 'RT', 'THREAD=' || lk.id1, 'TS', decode(lk.id2, 0, 'ENQUEUE', 'NEW BLOCK ALLOCATION'), decode(lk.id1, '', '', 'ID1='||lk.id1||' ID2='||lk.id2)) locked_object,
       lk.type,
       lk.id1,
       lk.id2,
       decode(lk.lmode, 0, 'none', 1, 'null (NULL)', 2, 'row-s (SS)', 3, 'row-x (SX)', 4, 'share (S)', 5, 'S/Row-X (SSX)', 6, 'exclusive (X)', 'unknown') LMODE,
       decode(lk.request, 0, 'none', 1, 'null (NULL)', 2, 'row-s (SS)', 3, 'row-x (SX)', 4, 'share (S)', 5, 'S/Row-X (SSX)', 6, 'exclusive (X)', 'unknown') Request,
       lk.ctime,
       nvl(s.username, decode(s.type, 'USER', decode(bgp.name, NULL, 'UNDEFINED '))) USERNAME,
       p.spid,
       s.machine,
       substr(s.module, 1, 48) module,
       substr(s.action, 1, 32) action,
       substr(s.program, 1, 48) program
  FROM sys.gv_$lock lk,
       sys.gv_$session s,
       sys.gv_$process p,
       sys.gv_$bgprocess bgp,
       sys.obj$ o,
       sys.user$ u,
       sys.obj$ om,
       sys.user$ um
 WHERE EXISTS (SELECT id1
          FROM sys.v_$lock
         WHERE lmode = 0
           AND id1 = lk.id1
           AND id2 = lk.id2 )
   AND s.inst_id = p.inst_id(+)
   AND s.paddr = p.addr(+)
   AND s.inst_id = bgp.inst_id(+)
   AND s.paddr = bgp.paddr(+)
   AND s.inst_id = lk.inst_id
   AND s.sid = lk.sid
   AND s.row_wait_obj# = o.obj#(+)
   AND o.owner# = u.user#(+)
   AND lk.id1 = om.obj#(+)
   AND om.owner# = um.user#(+)
   AND s.type <> 'BACKGROUND'
 order by lk.id1, lk.id2, lk.lmode desc ;

 

살펴보니 이상한 것이 " FROM sys.v_$lock"  이 부분 입니다.

이전버전에서 사용중인 쿼리를 별도로 저장해놓은 부분과 비교하니 예전버전에서는 sys.gv_$lock 으로 조회하는데

지금 사용중인 버전에서는 gv$ 를 사용하도록 설정하였는데도 다른 뷰는 gv_$ 뷰를 조회 하는데 lock 뷰만 v_$lock 으로 조회합니다.

 

이부분으로 문의 드립니다.

 

 

 

 

 

  • 대표전화
    1660-1675

  • 기술 문의
    02-6931-1734

  • 오렌지 문의
    070-8666-8175

  • 라이선스 문의
    02-6931-1728