728x90

1. 오래 실행 중인 SQL 확인 (활성 세션 기준)

 
SELECT
  s.sid,
  s.serial#,
  s.username,
  s.status,
  s.osuser,
  s.machine,
  s.program,
  s.sql_id,
  s.event,
  s.seconds_in_wait,
  s.state,
  q.sql_text
FROM
  v$session s
JOIN
  v$sql q ON s.sql_id = q.sql_id
WHERE
  s.status = 'ACTIVE'
  AND s.username IS NOT NULL
ORDER BY s.seconds_in_wait DESC;

 

  • seconds_in_wait가 클수록 대기 시간이 긴 세션
  • eventstate를 보면 대기 이유 확인 가능

2. CPU, 논리 읽기 등 리소스를 많이 쓰는 SQL TOP 10

 

 

SELECT *
FROM (
  SELECT
    sql_id,
    executions,
    elapsed_time,
    cpu_time,
    buffer_gets,
    disk_reads,
    rows_processed,
    sql_text
  FROM v$sql
  WHERE executions > 0
  ORDER BY cpu_time DESC
)
WHERE ROWNUM <= 10;

 

 

  • CPU 또는 I/O 기준으로 리소스를 많이 쓰는 쿼리 찾기
  • ORDER BY 기준을 elapsed_time, buffer_gets, disk_reads 등으로 바꿔서 분석 가능

3. 오랫동안 실행 중인 쿼리 (현재 실행 중)

SELECT
  s.sid,
  s.serial#,
  s.username,
  s.status,
  s.sql_id,
  s.last_call_et AS seconds_running,
  q.sql_text
FROM
  v$session s
JOIN
  v$sql q ON s.sql_id = q.sql_id
WHERE
  s.status = 'ACTIVE'
  AND s.username IS NOT NULL
  AND s.last_call_et > 60  -- 60초 이상 실행 중
ORDER BY s.last_call_et DESC;

 

4. 락을 잡고 있는 세션 확인 (병목의 원인 가능)

SELECT
  l.session_id,
  s.username,
  s.osuser,
  s.program,
  s.machine,
  l.locked_mode,
  o.object_name,
  o.object_type
FROM
  v$locked_object l
JOIN
  dba_objects o ON l.object_id = o.object_id
JOIN
  v$session s ON l.session_id = s.sid;

 

728x90

+ Recent posts