oracle 운영은 첨이라 하나하나가 새롭다. 일단 흔히들 보는 hotblock 경합부터.
select문에 의한 latch: cache buffer chain 경합이면 쿼리 튜닝해야 하는데. (SQL Server에서는 PAGELATCH:SH경합 되겠다)
일단 튀는 쿼리 찾는거는 아래 스크립트
SELECT session_id, sql_id,cnt, NVL((select sql_text FROM v$sqlarea b WHERE a.sql_id=b.sql_id),'<EMPTY>') sql_text
FROM (
SELECT session_id, sql_id, COUNT(*) cnt
FROM v$active_session_history
WHERE session_state = 'ON CPU'
AND sample_time > SYSDATE - (5 / (24 * 60 ))
AND sql_id is not null
GROUP BY session_id, sql_id
ORDER BY COUNT(*) DESC) a
WHERE ROWNUM <= 50 ;
FROM (
SELECT session_id, sql_id, COUNT(*) cnt
FROM v$active_session_history
WHERE session_state = 'ON CPU'
AND sample_time > SYSDATE - (5 / (24 * 60 ))
AND sql_id is not null
GROUP BY session_id, sql_id
ORDER BY COUNT(*) DESC) a
WHERE ROWNUM <= 50 ;
왠만하면 같은 쿼리가 주욱~ 나올건데, 일단 이넘을 잡자~
근데 이거하기전에 Front WAS는 거의 사망직전까지 간다. 진정시키려면 일단 경합이 일어난 블럭부터 찾자.
select sid,p1raw||', '||event||', '||p1text||', '||p1||', '||p2text||', '||p2||'
, '||p3text||', '||p3 as event
from v$session_Wait
where event not like '%SQL%' and event not like '%rdbms%'
and wait_class != 'Idle'
order by seconds_in_wait desc
, '||p3text||', '||p3 as event
from v$session_Wait
where event not like '%SQL%' and event not like '%rdbms%'
and wait_class != 'Idle'
order by seconds_in_wait desc
p1raw가 경합이 일어난 블럭주소당... 이 블럭에 어떤 오브젝트들이 있는지 찾으려면~
select hladdr,
obj,
(
select object_name
from dba_objects
where (data_object_id is null
and object_id=x.obj)
or data_object_id=x.obj
and rownum = 1) as object_name,
dbarfil,
dbablk,
tch
from x$bh x
where hladdr in ('C0000003177DC0D0')
order by hladdr, obj;
obj,
(
select object_name
from dba_objects
where (data_object_id is null
and object_id=x.obj)
or data_object_id=x.obj
and rownum = 1) as object_name,
dbarfil,
dbablk,
tch
from x$bh x
where hladdr in ('C0000003177DC0D0')
order by hladdr, obj;
여기에 p1raw값 넣으면 이 블럭에 있는 오브젝트들이 나온다. 여기서 터치카운트가 높은 인덱스나 테이블이 있을건데, 아까 전에 뽑은 쿼리에서 건드리는 인덱스 / 테이블일 가능성이 높다.
만약 인덱스라면...
1. 응급조치로 alter index ... 해서 storage를 keep_pool 로 바꿔버리자. 재수좋으면 일시적으로 hotblock 경합이 사라진다.
2. 이게 안되면 시간이 좀 걸리겠지만 pctfree를 충분히 (50?) 주고 index online rebuild
2. 이게 안되면 시간이 좀 걸리겠지만 pctfree를 충분히 (50?) 주고 index online rebuild
저렇게 해놓고 시간 벌어놓은 다음에 급하게 쿼리 튜닝해서 WAS 패치하자~
Posted by maceo

