본문 바로가기
IT/AWR-ASH

ASH 데이터를 이용한 멀티테넌트 데이터베이스 분석: Oracle Multitenant 환경에서 ASH 활용법.

by free-inf 2025. 2. 23.

서버 이관 프로젝트를 진행하는 과정에서 데이터베이스 환경의 변화는 성능 최적화와 운영 효율성에 직접적인 영향을 미친다. 특히, Oracle의 멀티테넌트(Multitenant) 아키텍처를 활용하는 경우, 데이터베이스의 리소스 사용과 성능 분석 방식이 기존의 단일 데이터베이스 환경과 달라질 수 있다.

 

Oracle Multitenant 환경에서는 하나의 컨테이너 데이터베이스(Container Database, CDB) 아래에 여러 개의 플러거블 데이터베이스(Pluggable Database, PDB)를 운영할 수 있다. 이 방식은 리소스를 효율적으로 공유하면서도 개별 데이터베이스를 독립적으로 운영할 수 있는 장점을 제공하지만, 여러 개의 PDB가 동일한 서버 리소스를 공유하기 때문에 특정 PDB의 성능 저하가 전체 데이터베이스 성능에 영향을 미칠 수 있다.

 

이러한 환경에서 ASH(Active Session History) 데이터를 활용하면, 멀티테넌트 환경에서 PDB별 성능 분석을 수행하고, 특정 PDB의 리소스 사용 현황을 실시간으로 모니터링할 수 있다. 이를 통해 서버 이관 후 새로운 멀티테넌트 환경에서 예상치 못한 성능 문제를 효과적으로 감지하고 해결할 수 있도록 한다.

 

본 글에서는 ASH 데이터를 활용하여 Multitenant 환경에서 PDB별 성능 분석을 수행하는 방법과, 이를 최적화하는 전략을 상세히 설명한다.


Oracle Multitenant 환경에서 ASH의 필요성

1. PDB별 리소스 사용량 분석

  • 모든 PDB가 동일한 CPU, 메모리, 디스크 I/O 리소스를 공유하기 때문에 특정 PDB가 과도한 리소스를 사용할 경우, 다른 PDB의 성능이 저하될 수 있다.
  • ASH 데이터를 활용하면 각 PDB의 세션 정보를 추적하여, 어느 PDB가 가장 많은 리소스를 사용하고 있는지 확인할 수 있다.

2. 특정 PDB에서 실행되는 SQL 분석

  • 다수의 PDB가 존재하는 환경에서는 어떤 SQL이 성능 저하를 유발하는지 파악하기 어려울 수 있다.
  • ASH 데이터를 활용하면 PDB별로 실행된 SQL을 조회하고, 성능을 최적화할 수 있다.

3. PDB 간 리소스 경쟁 감지

  • 여러 개의 PDB가 동일한 컨테이너 데이터베이스(CDB) 내에서 CPU와 I/O를 공유하기 때문에, 특정 PDB가 과도한 리소스를 점유하면 다른 PDB의 성능이 저하될 수 있다.
  • ASH 데이터를 통해 PDB 간의 리소스 사용 패턴을 분석하고, 필요하면 리소스 컨트롤(Resource Management)을 적용할 수 있다.

4. PDB별 대기 이벤트 분석

  • 특정 PDB에서 디스크 I/O 대기, CPU 대기, 세션 블로킹 등의 문제가 발생할 경우, 이를 신속하게 감지하고 해결해야 한다.
  • ASH 데이터를 활용하면 각 PDB에서 발생하는 주요 대기 이벤트(WAIT EVENT)를 분석하여 성능 문제를 진단할 수 있다.

ASH 데이터를 활용한 멀티테넌트 환경 성능 분석 방법

1. PDB별 세션 활동 조회

특정 PDB에서 실행된 세션을 조회하려면, ASH 데이터를 활용하여 해당 PDB의 활성 세션을 분석할 수 있다.

 
SELECT 
  con_id, 
  pdb_name, 
  COUNT(*) AS active_sessions 
FROM 
  v$active_session_history ash 
  JOIN v$pdbs pdb ON ash.con_id = pdb.con_id 
WHERE 
  sample_time >= SYSDATE - (10 / 1440) -- 최근 10분간 조회 
GROUP BY con_id, pdb_name ORDER BY active_sessions DESC;
  • con_id → 해당 PDB의 컨테이너 ID.
  • pdb_name → PDB의 이름.
  • active_sessions → 해당 PDB에서 실행 중인 활성 세션 수.

이 데이터를 활용하면 어떤 PDB가 가장 많은 세션을 생성하고 있는지 확인할 수 있으며, 과부하가 발생하는 PDB를 식별할 수 있다.


2. PDB별로 실행된 SQL 조회

특정 PDB에서 실행된 SQL을 분석하려면 ASH 데이터를 활용하여 해당 PDB의 SQL 실행 내역을 조회할 수 있다.

SELECT 
  con_id, 
  pdb_name, 
  sql_id, 
  COUNT(*) AS execution_count 
FROM 
  v$active_session_history ash 
  JOIN v$pdbs pdb ON ash.con_id = pdb.con_id 
WHERE 
  sample_time >= SYSDATE - (30 / 1440) -- 최근 30분간 조회 
GROUP BY con_id, pdb_name, sql_id 
ORDER BY execution_count DESC;
  • sql_id → 실행된 SQL의 ID.
  • execution_count → 해당 SQL이 실행된 횟수.

이 데이터를 활용하면 특정 PDB에서 실행 빈도가 높은 SQL을 분석하고, 실행 계획을 최적화하여 성능을 개선할 수 있다.


3. PDB별 CPU 사용량 분석

PDB별 CPU 사용량을 분석하려면 세션 상태가 'ON CPU'인 데이터를 추출하여 해당 PDB의 CPU 점유율을 확인할 수 있다.

SELECT 
  con_id, 
  pdb_name, 
  COUNT(*) AS cpu_usage 
FROM 
  v$active_session_history ash 
  JOIN v$pdbs pdb ON ash.con_id = pdb.con_id 
WHERE 
  session_state = 'ON CPU' 
  AND sample_time >= SYSDATE - (30 / 1440) -- 최근 30분간 조회 
GROUP BY con_id, pdb_name ORDER BY cpu_usage DESC;
  • cpu_usage → 해당 PDB에서 CPU를 사용한 세션의 개수.

이 데이터를 활용하면 어떤 PDB가 과도한 CPU를 점유하고 있는지 확인할 수 있으며, 필요하면 PDB별 CPU 리소스 제한을 적용할 수 있다.


4. PDB별 대기 이벤트 분석

PDB에서 성능 저하를 유발하는 대기 이벤트를 분석하려면, ASH 데이터를 활용하여 특정 PDB에서 발생하는 주요 대기 이벤트를 조회할 수 있다.

SELECT 
  con_id, 
  pdb_name, 
  event, 
  COUNT(*) AS wait_count 
FROM 
  v$active_session_history ash 
  JOIN v$pdbs pdb ON ash.con_id = pdb.con_id 
WHERE 
  session_state = 'WAITING' 
  AND sample_time >= SYSDATE - (30 / 1440) 
GROUP BY 
  con_id, 
  pdb_name, 
  event 
ORDER BY 
  wait_count DESC;
 
  • event → 특정 PDB에서 발생한 주요 대기 이벤트.
  • wait_count → 해당 이벤트가 발생한 횟수.

이 데이터를 활용하면 각 PDB에서 가장 많이 발생하는 대기 이벤트를 식별하고, 이를 해결하기 위한 최적화 작업을 수행할 수 있다.


멀티테넌트 환경에서 ASH를 활용한 성능 최적화 전략

  1. PDB별 리소스 사용량 모니터링 및 조정
    • PDB 간 리소스 사용량을 주기적으로 분석하고, 필요하면 PDB Resource Manager를 활용하여 리소스 제한을 적용.
    • 특정 PDB가 과도한 리소스를 사용하면 CPU, I/O 할당량을 조정하여 리소스 경쟁을 방지.
  2. SQL 최적화 및 실행 계획 조정
    • 자주 실행되는 SQL을 분석하고, 실행 계획을 최적화하여 CPU 및 I/O 부하를 줄인다.
    • 인덱스 추가 및 파티셔닝을 활용하여 SQL 성능을 개선.
  3. 대기 이벤트 분석 및 병목 해결
    • 대기 이벤트가 많이 발생하는 PDB를 식별하고, 블로킹 세션 및 트랜잭션 충돌을 최소화.
    • 락(Lock) 대기를 줄이기 위해 트랜잭션 크기를 조정하고, 락이 자주 발생하는 테이블에 적절한 인덱스를 추가.

ASH 데이터를 활용하면 Oracle Multitenant 환경에서 PDB별 성능을 분석하고, 리소스 사용량, SQL 실행 빈도, 대기 이벤트 등을 효과적으로 모니터링할 수 있다.

 

특히, PDB 간 리소스 경합을 방지하고, 성능 저하를 예방하기 위해서는 지속적인 ASH 데이터 분석이 필수적이다. 이를 통해 서버 이관 후 데이터베이스 성능을 최적화하고, 안정적인 운영 환경을 유지할 수 있을 것이다.