V$SYSSTAT
(1) V$SYSSTAT란?
- 인스턴스 기동시 현재까지 누적된 수행 통계치를 시스템 레벨로 확인하고자 할 때 사용하는 뷰이다.
- V$SYSSTAT 값은 누적된 값으로 두 구간 사이의 변화량을 구해 SQL 수행 도준에 내부적으로 어떤 일들이 발생했는지 판명해야 한다.
1. 통계 뷰 종류
- 시스템 레벨 단위 ::
V$SYSSTAT
- 개별 세션별 단위 ::
V$SESSTAT
- 본인 세션 단위 ::
V$MYSTAT
2. [예시] AutoTrace의 Statistics 옵션에서 사용했던 통계 항목 조회하기
SQL> SELECT NAME, VALUE
FROM V$SYSSTAT
WHERE STATISTIC
============================================================================
NAME VALUE
user calls 53079
physical read total bytes 473201664
physical write total bytes 287825920
spare statistic 3 0
commit cleanout failures: cannot pin 0
TBS Extension: bytes extended 10485760
total number of times SMON posted 18
SMON posted for undo segment recovery 0
SMON posted for dropping temp segment 0
segment prealloc tasks 0
============================================================================
(2) Ratio 기반으로 성능 분석하기
Buffer NoWait %
: 버퍼블록을 읽으려 할 때, buffer busy waits 대기 없이 곧바로 읽기에 성공한 비율이다.
Redo NoWait %
: Redo 로그를 기록할 공간을 요청하지 않고 곧바로 Redo 엔트리를 기록한 비율이다.
- 이 비율이 낮으면 로그 스위칭이 느리거나 너무 자주 발생함을 의미한다.
Buffer Hit %
: 디스크 읽기를 수반하지 않고 버퍼캐시에서 블록찾기에 성공한 비율이다.
Latch Hit %
: 래치 경합없이 첫번째 시도에서 곧바로 래치를 획득한 비율이다.
- `Library Hit %ㅊ
- 라이브러리 캐시에 이미 적재된 SQL커서를 실행할 때 커서가 Heap영역에서 찾아질 때의 Hit 성공 비율이다.
- 라이브러리 캐시에 이미 적재된 오브젝트 정보를 읽으려할 때 오브젝트 정보가 Heap영역에서 찾아질 때의 Hit 성공 비율이다.
- 이 때 hit율은 Get hit율과 Pin hit율로 나누어진다.
- Get hit율은 Parse 단계와 관련이 있으며 이 수치가 낮다면 하드파싱 또는 최초 로드가 발생한 경우이다.
Soft Parse %
: 실행계획이 라이브러리 캐시에서 찾아져 하드파싱을 일으키지 않고 SQL을 수행한 비율이다.
Execute to Parse %
: Parse Call없이 곧바로 SQL을 수행한 비율이다.
- 즉, 커서를 애플리케이션에서 캐싱한 채 반복 수행한 비율로 n-Tier에서 이 값이 일반적으로 값이 낮게 나타난다.
Parse CPU to Parse Elapsd %
: 파싱 총 소요 시간 중 CPU time이 차지한 비율이다.
- 파싱에 소요된 시간 중 실제 일을 수행한 시간 비율이다.
- 이 값이 낮으면 대기 시간이 많았다는 의미로서 Shared Pool과 라이브러리 캐시 경합이 많았다는 것을 의미하며 대개 하드파싱 부하때문이다.
- 초당 하드파싱 횟수가 거의 나타나지 않는 상황에 이 Ratio가 낮은 수치를 기록한다면 Parse Call 자체가 많아 발생하는 경합이다.
% Non-Parse CPU
: SQL을 수행하면서 사용한 전체 CPU time중 파싱 이외의 작업이 차지한 비율 이다.
- 이 비율이 낮으면 파싱에 소비되는 CPU Time이 많은 것이다.따라서 파싱부하를 줄이도록 애플리케이션을 개선해야한다.
In-memory Sort %
:: 전체 소트 수행 횟수에서 In-Memory 방식으로 소트한 비율이다.
Memory Usage %
:: Shared Pool내에서 현재 사용중인 메모리 비중이다.
% SQL with executions>1
: 전체 SQL 개수에서 두번이상 수행된 SQL이 차지하는 비중이다.
- 이 비율이 낮으면 Literal 상수값을 이용하는 쿼리 수행 빈도가 높다는 것을 의미한다.
% Memory for SQL w/exec>1
: 전체 SQL이 차지하는 메모리 중 두번이상 수행된 SQL이 차지하는 메모리 비중이다.
- 이 비율이 낮으면 Literal 상수값을 사용하는 쿼리에 의해 Shared Pool이 낭비되고 있음을 의미한다.