오라클 DB를 운영하다 문제가 생겨 성능 개선 포인트를 찾을 때 유용하게 사용되는 뷰가 있는
v$active_session_history (이하 ash) 입니다.
뷰의 명세를 보고서 많은 정보를 찾을 수 있는 session의 활동 정보, SQL 수행빈도 등을 통하여 문제점에 접근 할 수 있습니다.
ash에서 모든 쿼리를 볼 수 있는 것은 아니고, 누락이 되는 쿼리들이 있는데 이는 _ASH_SAMPLING_INTERVAL 숨김 파라미터에서 지정한 주기로 (기본 값 1초) 활동 중인 세션들 중 샘플을 추출하여 공유 풀에 위치한 ASH 버퍼에 저장하기 때문에 누락이 생기고 파라미터 조정을 통하여 더욱 많은 쿼리를 샘플링 할 수 있습니다.
<ASH 파라미터>
파라미터 | 의미 | 기본값 |
_ASH_DISK_WRITE_ENABLE | ASH 정보를 디스크에 내려쓸지 여부 지정 | TRUE |
_ASH_DISK_FILTER_RATIO | 메모리에 있는 ASH 정보를 디스크로 내려쓸 비율 지정 | 10 |
_ASH_EFLUSH_TRIGGER | ASH 정보를 디스크로 내려쓰는 주기 지정, ASH 버퍼의 사용률이 이 파라미터에서 지정한 값 이상 사용되면 ASH 정보를 디스크로 내려씀 | 66 |
_ASH_ENABLE | ASH 정보를 수집하고 디스크에 내려쓸지 여부 결정 | TRUE |
_ASH_SAMPLE_ALL | 모든 접속 세션을 ASH 정보로 저장할지 지정 | FALSE |
_ASH_SAMPLING_INTERVAL | ASH 정보 수집 주기 지정(단위: 1/1000초) | 1000 |
ASH 버퍼 즉, 메모리 상에 기록되어 DBMS 재기동 시에 해당 정보는 사라지게 되고, 메모리 용량이 가득차면 오래된 데이터 부터 순차적으로 삭제 되게 됩니다.
<버퍼 사이즈 확인 하기>
SQL> select * from v$sgastat where name = 'ASH buffers'; POOL NAME BYTES ------------ -------------------------- ----------- shared pool ASH buffers 32505856 |
<v$active_session_history 의 자주 보는 정보>
SAMPLE_ID |
NUMBER |
sample ID |
SAMPLE_TIME |
TIMESTAMP(3) |
샘플이 표본화된 시간 |
IS_AWR_SAMPLE |
VARCHAR2(1) |
해당 sample이 AWR에 Flush 되었거나, 될 예정인지 또는 되지 않았는지를 나타내는 지표 (Y) or not (N) |
SESSION_ID |
NUMBER |
Session id , V$SESSION.SID 와 조인 가능 |
SESSION_SERIAL# |
NUMBER |
Session serial 번호, V$SESSION의 SID와 조인 가능 |
SESSION_TYPE |
VARCHAR2(10) |
Session type:
|
FLAGS |
NUMBER |
앞으로 사용 위해 예약 |
USER_ID |
NUMBER |
Oracle user 식별자, V$SESSION의 USER#와 조인 가능 |
SQL_ID |
VARCHAR2(13) |
SQL 문장의 식별자 |
IS_SQLID_CURRENT |
VARCHAR2(1) |
SQL_ID column 에 속한 SQL 식별자가 수행되었는가에 대한 지표 (Y) or not (N) |
SQL_CHILD_NUMBER |
NUMBER |
Session의 SQL 문장의 Child number |
SQL_OPCODE |
NUMBER |
SQL 문장이 어떤 작업의 단계에 속해 있는지를 나타내는 지표, V$SESSION의 COMMAND와 조인 가능
|
SQL_OPNAME |
VARCHAR2(64) |
SQL command 이름 |
FORCE_MATCHING_SIGNATURE |
NUMBER |
CURSOR_SHARING parameter 를 FORCE로 setting 했을 때 사용되는 Signature |
TOP_LEVEL_SQL_ID |
VARCHAR2(13) |
top level SQL 문장의 식별자 |
TOP_LEVEL_SQL_OPCODE |
NUMBER |
top level SQL 문장이 어떤 작업의 단계에 속해 있는지를 나타내는 지표 |
SQL_PLAN_HASH_VALUE |
NUMBER |
Cursor에 대한 SQL 실행 계획의 숫자적인 표현 이 정보는 모든 Session Sample에 대해서 사용이 가능하지 않을 수 있지만, V$SESSION은 이 정보를 포함하고 있지 않음 |
SQL_PLAN_LINE_ID |
NUMBER |
SQL plan line ID |
SQL_PLAN_OPERATION |
VARCHAR2(30) |
Plan operation 이름 |
SQL_PLAN_OPTIONS |
VARCHAR2(30) |
Plan operation options |
SQL_EXEC_ID |
NUMBER |
SQL 실행 식별자 |
SQL_EXEC_START |
DATE |
SQL이 수행된 시간 |
EVENT |
VARCHAR2(64) |
SESSION_STATE = WAITING 인 경우 Session의 Event는 표본화 되는 시간을 기다림. SESSION_STATE = ON CPU인 경우 이 Column은 NULL |
EVENT_ID |
NUMBER |
대기하고 있거나, 마지막으로 대기한 Session의 Resource나 Event의 식별자 |
EVENT# |
NUMBER |
대기하고 있거나, 마지막으로 대기한 Session의 Resource나 Event의 Number |
WAIT_CLASS |
VARCHAR2(64) |
Session이 기다리는 Event의 Wait class 이름, V$SESSION의 WAIT_CLASS와 조인 가능 |
WAIT_TIME |
NUMBER |
대기한 총 WAIT Time, 이 값이 0일 경우 Session은 표본화를 기다리는 중으로 간주 |
SESSION_STATE |
VARCHAR2(7) |
Session 상태:
|