개발은 재밌어야 한다
article thumbnail
Published 2022. 1. 11. 16:18
[오라클 ORACLE] ASH란? RDBMS
반응형

ASH(Active Session History)

Ratio(비율) 기반 분석방법론과 대기이벤트 기반 분석방법론의 한계점은 문제가 있다고 진단했을때 그 원인을 찾아 실제 문제를 해결하는 데까지 많은 시간이 걸리는 데 있다고 합니다.

 

V$SESSION을 이용하여 실시간 세션에 대한 모니터링을 하고 있는데 이는 해당 시점에서의 걸리는 쿼리만을 볼 수 있다는 점입니다. 이를 끊임없이 EXCUTE(실행) 시키며 모니터링에는 한계가 있음

 

그래서 오라클 10g에서 부터 생겨난 기능이 ASH(Active Session History)기능입니다. ASH에서는 뷰의 명세를 보고 많은 정보를 찾을 수 있는 session의 활동 정보, SQL 수행빈도등을 통하여 문제점을 접근 할 수 있습니다.

======================================================================

ASH는 자동으로 1초 간격으로 Active Session만 채집하여 SGA의 Buffer Memory 내에 보관하고 있다가 가득차면 AWR Repository에 내려 쓰게 된다.

조회에 따른 별도의 Latch 경합이 없으며, 자동으로 최근 데이터부터 조회되므로 별도의 Order By가 불필요하다.

한 마디로 오라클이 제공하는 V$SESSION을 대체 할 수 있는, 가장 부하가 적은 새로운 실시간 + 성능 이력 분석이 가능한 모니터링 방법이다.

=====DBguide.net 원문 발쵀===============================================

 

ASH(활성 세션 히스토리)란?

  1. 현재 오라클 성능 문제를 분석하는데 있어서 가장 기본적이고 중요한 데이터
  2. 액티브 세션이란 ? CPU 점유/락, 래치, 파일, 네트워크와 같은 자원을 획득하기 위해 대기하는 세션
  3. 1초마다 액티브 세션의 정보를 수집하여 Shared Pool의 ASH(Active Session History) 버퍼 영역에 저장하여서 접속이 끊긴 세션 정보도 저장되어 있으므로 추후 문제 추적이 용이하게 끔 해준다.

 

ASH가 저장되는 방법

  1. 오라클은 현재 접속해서 활동 중인 Active 세션 정보를 1초에 한번씩 샘플링해서 ASH 버퍼에 저장합니다.
  2. SGA Shared Pool에서 CPU당 2MB의 버퍼를 할당받아 세션 정보를 기록하며, 1시간 혹은 버퍼의 2/3이 찰 때 마다 디스크로 기록한다. 즉 AWS(Automatic Workload Repository)에 저장을 하는 것입니다.
  3. V$ACTIVE_SESSION_HISTORY 뷰를 이용해 ASH 버퍼에 저장된 세션 히스토리 정보를 조회할 수 있습니다.

 

AWS(Automatic Workload Repository)란?

자동으로 DB에 대한 통계 및 성능자료 등을 수집해 스냅샷으로 만들어 일정기간 보관하고, 이를 활용할 수 있게 해주는 기능이다.

성능자료의 간단한 예로는 Buffer/CPU/Pin/Latch/Library 등의 히트율, 자원 사용률, Soft/Hard Parse 정도, 가장 느리게 돌았던 쿼리(Slow Query) 등이 있다.

위 자료들을 토대로 느린 쿼리들에 대해 튜닝을 할 수 있게 되고,

SAG영역의 값들을 AWR이 추천하는 값으로 변경하여 효율성을 높일 수 있게 되고,

현 운영 DB의 문제점들을 파악할 수 있다.

 

 

ASH 아키텍쳐 흐름

ASH 아키텍처( https://www.oracleride.com/active-session-history-ash/ )

  1. 매 초마다 각 활성화된 데이터베이스 세션을 샘플링(추출)합니다.
  2. 해당 데이터는 메모리의 버퍼에 보관됩니다.
  3. Oralce 커널에 v$session_active_session_history 보기를 통해 액세스됩니다.
  4. AWR 스냅샷에서는 ASH 버퍼의 10개 행 중 1개가 AWR 저장소에 배치됩니다.

 

ASH (Active Session History) 조회 쿼리

select

sample_id, sample_time -----------------------------------------------------------①
, session_id, session_serial#, user_id, xid -----------------------------------------②
, sql_id, sql_child_number, sql_plan_hash_value ----------------------------------③
, session_state ---------------------------------------------------------------------④
, qc_instance_id, gc_session_id ---------------------------------------------------⑤
, blocking_session, blocking_session_serial#, blocking_session_status ----------⑥
, event, event#, seq#, wait_class, wait_time, time_waited -----------------------⑦
, p1text, p1, p2text, p2, p3text, p3 -----------------------------------------------⑧
, current_obj#, current_file#, current_block# -------------------------------------⑨
, program, module, action, client_id ---------------------------------------------⑩
from V$ACTIVE_SESSION_HISTORY

select
		  sample_id, sample_time               --(1)

		, session_id, session_serial#, user_id, xid  --(2)

		, sql_id, sql_child_number, sql_plan_hash_value  --(3)

		, session_state    --(4)

		, qc_instance_id, qc_session_id  --(5)

		, blocking_session, blocking_session_serial#, blocking_session_status  --(6)

		, event, event#, seq#, wait_class, wait_time, time_waited  --(7)

		, p1text, p1, p2text, p2, p3text, p3  --(8)

		, current_obj#, current_file#, current_block#  --(9)

		, program, module, action, client_id   --(10)
from   V$ACTIVE_SESSION_HISTORY

① 샘플링이 일어난 시간과 샘플 ID

② 세션정보, User명, 트랜잭션ID

③ 수행 중 SQL 정보

④ 현재 세션의 상태 정보. 'ON CPU' 또는 'WAITING'

⑤ 병렬 Slave 세션일 때, 쿼리 코디네이터(QC) 정보를 찾을 수 있게 함

⑥ 현재 세션의 진행을 막고 있는(=블로킹) 세션 정보

⑦ 현재 발생 중인 대기 이벤트 정보

⑧ 현재 발생 중인 대기 이벤트의 파라미터 정보

⑨ 해당 세션이 현재 참조하고 있는 오브젝트 정보. V$session 뷰에 있는 row_wait_obj#, row_wait_file#, row_wait_block# 컬럼을 가져온 것임

⑩ 애플리케이션 정보

 

 

⑦과 ⑧번는 '대기 이벤트’ 정보

⑥번 '블로킹 세션' 정보, ⑨번 '현재 액세스 중인 오브젝트' 정보

위의 4개의 정보는 매우 유용하다. 블로킹 세션 정보를 통해 현재 Lock을 발생시킨 세션을 빨리 찾아 해소 할 수 있게 도와준다.

 

쿼리 조회 결과(DBeaver)

SGA(System Global Area) 시스템 전역 영역에서의 ASH buffer 정보 조회 쿼리

 

select * from v$sgastat where name = 'ASH buffers';

실행결과

 

오픈소스

오픈소스로는 ASH Viewer가 있습니다

https://github.com/akardapolov/ASH-Viewer

 

GitHub - akardapolov/ASH-Viewer: ASH Viewer provides a graphical view of active session history data within the Oracle and Postg

ASH Viewer provides a graphical view of active session history data within the Oracle and PostgreSQL DB - GitHub - akardapolov/ASH-Viewer: ASH Viewer provides a graphical view of active session his...

github.com

자바 Swing을 이용하여 ASH의 쿼리를 통해 질의 된 결과를 보기 쉽게 차트로 만든 오픈소스입니다.

ASH Viewer는 오라클 인스턴스 액티브 세션 히스토리 데이터 모니터링을 제공합니다. 링크를 통해 무료로 오픈소스기반 모니터링 툴을 다운받을 수 있습니다.

최근 ASH Viewer를 통해 실시간으로 Oracle 시스템을 모니터링하며 업무 진행하고 있습니다. V$ACTIVE_SESSION_HISTORY 데이터 기반으로 실시간으로 Oracle 시스템 현황을 모니터링 하는 툴입니다.

 

 

V$ACTIVE_SESSION_HISTORY 컬럼 정보 (참고:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/V-ACTIVE_SESSION_HISTORY.html#GUID-69CEA3A1-6C5E-43D6-982C-F353CD4B984C)

 

 

참고

https://jeongsu.tistory.com/231

https://hengki.net/98

http://wiki.gurubee.net/pages/viewpage.action?pageId=20742150

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hupers&logNo=70156421590

http://wiki.gurubee.net/display/STUDY/ASH(Active+Session+History)

https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/V-ACTIVE_SESSION_HISTORY.html#GUID-69CEA3A1-6C5E-43D6-982C-F353CD4B984C

 

반응형
profile

개발은 재밌어야 한다

@ghyeong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!