본문 바로가기

카테고리 없음

ORACLE v$sysstat v$sesstat v1.0

ORACLE 10g v$sysstat v$sesstat

 

from

 

1.    ORACLE PERFORMANCE VIEW

ORACLE 상태를 보는데 있어 VIEW 는 굉장히 유용하다. 이런 정보는 전체적으로 STAT 정보가 있고 EVENT 정보가 있다. 여기서는 STAT 정보를 가지고 이야기 하려 한다.

 

STAT STATISTIC 정보를 말하며 각 세션에 대해 혹은 시스템에 대해 수집된다. EVENT 정보와 다른 점은 EVENT 의 경우 발생중 조회가 가능하며 IDLE 상태일 때 볼수가 없는 반면 STATISTIC 정보는 SESSION 의 활동여부와 상관없이 조회할 수 있다.

 

STAT 을 볼 수 있는 대표적인 VIEW 로는 V$STATNAME V$SYSSTAT, V$SESSTAT 이 있다. v$sesstat session level statistic 정보이고 v$sysstat system level 의 정보이다. v$statname stat 의 고유번호에 대해 name 정보를 가지고 있다. v$sysstat name 을 가지고 있기 때문에 조인이 필요 없으나 v$sesstat name column 이 없기 때문에 v$statname 과 조인해야 한다.

 

STATISTIC 에 대한 VALUE 값을 볼 때 주의할 점이 있다. 그것은 해당 값이 누적값이라는 것이다. 그렇기에 실시간 모니터링용으로 스크립트를 만들려면 델타값(차이)을 구할 장치가 필요하다.

 

2.    대표적인 STATISTIC

어디까지나 개인적인 생각으로 다음과 같은 STATISTIC 정보가 유용하다고 생각한다.

 

-      SESSION LOGICAL READS

-      PHYSICAL READS

-      PARSE COUNT (HARD)

-      EXECUTE COUNT

 

STAT 에 대해 그 의미와 선택한 이유를 간단히 이야기 하면 아래와 같다.

 

<SESSION LOGICAL READS

SESSION 의 논리적 읽기 ( 메모리->CPU ) 를 알 수 있다. 이 값의 일정시간 당 델타값이 증가한 다는 것은 일량이 증가하고 있다고 해석하면 된다. 여기서 이상징후를 확인하면 해당 SID 에 대해 TRACE 라던가 수행 쿼리를 조회하는 행동으로 연계할 수 있다.

 

<PHYSICAL READS>

SESSION 의 물리적 읽기 ( 디스크->메모리 ) 를 알 수 있다. 이 값이 증가하면 증가할 수록 디스크의 I/O 가 많이 발생한다. 이와 관련해 I/O 관련 WAIT EVENT 들이 관측될 수 있다. SESSION LOGICAL READS 와 마찬가지로 많이 유발하는 SID 를 찾아 추가적인 조치를 취할 수 있다.

 

<PARSE COUNT (HARD)>

이것은 순전히 LITERAL SQL 수행을 잡아내기 위한 방편이다. 이 지표는 상황에 따라 SYSTEM  | SESSION LEVEL 로 조회해야 한다. 이를테면 순간적으로 세션을 맺고 LITERAL SQL 을 수행하고 빠지는 세션이 많은 경우엔 SYSTEM LEVEL 로 봐야 시스템에 HARD PARSING 이 많이 발생하고 있다는 것을 알 수 있을 것이다.

 

<EXECUTE COUNT>

이 지표는 SQL 을 수행한 수를 의미한다. (RECURSIVE CALL 제외) 시스템의 활동성을 의미한다. 보통 급증보다 급감하는 경우에 이슈가 있는 경우가 있다. (시스템이 IDLE 인 경우를 제외)

 

그밖에도 개인의 취향에 맞게 추가/제거 하면 된다. 하지만 지표가 너무 많아지면 가독성이 떨어지기 때문에 적당히 넣는게 좋다.

 

3.    v$sysstat

 

select

sum(decode(name, 'session logical reads',value,0)) sread,

sum(decode(name, 'physical reads',value, 0)) pread,

sum(decode(name, 'parse count (hard)',value, 0)) pcount,

sum(decode(name, 'execute count',value, 0)) exec,

sum(decode(name, 'seq',value, 0)) "db file seq",

sum(decode(name, 'scatt', value, 0)) "db file scatt"

from

(select name,value from v$sysstat

where name in ('session logical reads','physical reads','execute count','parse count (hard)','db file sequential reads')

union all

select 'seq',nvl(sum(seconds_in_wait),0) from v$session_wait

where event ='db file sequential read'

union all

select 'scat',nvl(sum(seconds_in_wait),0) from v$session_wait

where event ='db file scattered read')

/

 

아까 언급한 stat 4가지 정보에 wait 2가지를 추가했다. wait 에 대해서는 후일에 이야기 하겠다. wait event system level 의 정보가 없기 때문에 session level 에서 sum 하여 가져온다.

 

script 를 가지고 후에 개조 예정이다. 현재의 정보를 보면 delta 값을 구하기 위한 장치가 없다. 보통 이 부분을 쉽게 하는 것은 variable 을 사용해 구하는 방법이 있다.

 

select-list decode 를 사용한 것은 정보가 rows 로 늘어서 있으면 delta 값을 구할 때 골치아프기 때문이다.

 

4.    v$sesstat

 

col program for a20

col module for a20

col name for a20

 

prompt 1: logical reads(default)  2 : physical reads  3 : parse count (hard)  4 : execute count(exec)

 

select a.sid,

vss.program,

vss.module,

a.name,

value from (

select vst.sid,vst.value,vsn.name,vsn.statistic#

from v$statname vsn, v$sesstat vst

where vsn.statistic# = vst.statistic#

and vst.statistic# in (9, 54, 331, 334)

and vsn.name =

decode(nvl(&1, 1),

1, 'session logical reads',

2, 'physical reads',

3, 'parse count (hard)',

4, 'execute count',1)

order by vst.value desc) a, v$session vss

where a.sid = vss.sid

and rownum < 6

/

 

위 스크립트는 system level 로 이상징후를 포착 후 session level 로 다가선다는 흐름을 가정하고 만들었다. 이상이 있는 지표에 대해 선택할 수 있게 decode 를 사용해 filtering 하게 만들었다. 여기서 확인할 수 있는 정보는 특정 sid program, module 이 무엇이고 해당 stat 에 대해 얼마만큼의 누적치를 발생시켰는지이다.

 

참고로 여기서도 delta 값은 미구현 상태이다. 이에 대한 구현 방법은 v$sysstat 의 경우와 동일하다.

 

사실 이렇게 보는 것 보다 한번에 여러 스탯의 delta 치를 보여주는게 더 좋을 것 같기도 하다만 (요즘에는 active session 이 그리 많지가 않다.) 뭐 사용하면서 개선하는게 좋지 않을까 해서 그대로 진행해 보려 한다.

 

script 의 개조 이력에 대해서는 다른 글에서 다시 이야기 하겠다.