성능 모니터링의 중요성
성능 문제가 발생하기 전에 미리 감지하고 대응하는 것은 안정적인 데이터베이스 운영의 핵심입니다. 오라클 데이터베이스는 이러한 proactive monitoring을 위해 다양한 경고(alert) 메커니즘을 제공합니다. 경고에 신속하고 정확하게 대응하기 위해서는 경고의 종류와 의미를 이해하고, 각 상황에 맞는 적절한 해결 방법을 숙지해야 합니다.
자동 데이터베이스 진단 모니터(ADDM) 활용
오라클 ADDM은 데이터베이스 성능 문제를 진단하고 권장 사항을 제시하는 강력한 도구입니다. ADDM은 Automatic Workload Repository (AWR) 데이터를 기반으로 잠재적인 성능 병목 지점을 식별하고, 이를 해결하기 위한 조치를 제안합니다.
ADDM 분석 결과 검토
ADDM 분석 결과는 다음과 같은 주요 정보를 포함합니다.
- 증상 정보(Symptom Information): 성능 문제의 징후를 나타냅니다. 예를 들어, 과도한 CPU 사용량, I/O 병목 현상, 또는 래치 경합 등이 있습니다.
- 문제 식별 정보(Problem Identification): ADDM은 성능 저하의 근본 원인을 파악합니다. 예를 들어, 비효율적인 SQL 쿼리, 부적절한 초기화 매개변수 설정, 또는 하드웨어 문제 등이 있습니다.
- 권장 조치(Recommendation): ADDM은 identified 문제를 해결하기 위한 최적의 조치를 제안합니다. 여기에는 SQL 튜닝, 초기화 매개변수 변경, 데이터베이스 구성 변경, 또는 하드웨어 업그레이드 등이 포함될 수 있습니다.
예제 1: SQL 튜닝 권고
ADDM이 특정 SQL 쿼리가 과도한 리소스를 사용하고 있다고 판단하면, SQL 튜닝 권고 사항을 제시합니다. 예를 들어 다음과 같습니다.
Finding 1: SQL statements sharing a large amount of time
Impact: 31% of total database time
Recommendation 1: Tune high-load SQL statements (see details in findings section below)
Object ID SQL_ID Plan Hash Value Action
---------- ------------- --------------- -----------------------------------------------------------
476 SQL_ID 1234567890 Consider tuning this SQL statement. The optimizer chose a plan that
might not perform optimally.
Validation results
The SQL profile was tested by executing both its plan and the original plan. A plan
with SQL profile shows a great difference with improved benefit.
위 권고 사항은 특정 SQL 문 (SQL_ID)이 데이터베이스 시간의 상당 부분을 차지하고 있음을 나타냅니다. ADDM은 해당 SQL 문에 대한 튜닝을 권장하며, SQL 프로파일을 적용할 경우 성능이 크게 향상될 것으로 예측합니다.
초기화 매개변수 조정 권고
ADDM은 데이터베이스의 초기화 매개변수 설정이 성능에 부정적인 영향을 미칠 수 있다고 판단되면, 해당 매개변수 변경을 권장합니다. 다음은 그 예시입니다.
Finding 2: Size of log files inadequate
Impact: 10% of total database time
Recommendation 2: Increase the size of the redo logs. This can reduce the amount of wait time.
Check the redologs in V$LOG.
위 권고 사항은 redo log 파일 크기가 부족하여 wait time을 증가시키고 있음을 나타냅니다. ADDM은 redo log 파일 크기 증가를 통해 성능 향상을 기대할 수 있다고 제안합니다.
실시간 SQL 모니터링 활용
오라클의 실시간 SQL 모니터링(Real-Time SQL Monitoring) 기능은 실행 중인 SQL 문의 성능 통계를 실시간으로 제공합니다. 이를 통해 장시간 실행되는 SQL 문이나 병렬 처리 중인 SQL 문의 성능을 면밀히 감시할 수 있습니다.
실시간 SQL 모니터링 활성화
실시간 SQL 모니터링은 STATISTICS_LEVEL
초기화 파라미터가 TYPICAL
(기본값) 또는 ALL
로 설정되어 있을 때 기본적으로 활성화됩니다. 특정 SQL 문에 대해서만 실시간 모니터링을 강제로 활성화하거나 비활성화하려면 다음과 같은 힌트를 사용합니다.
- 모니터링 활성화:
/*+ MONITOR */
- 모니터링 비활성화:
/*+ NO_MONITOR */
예제 2: SQL 모니터링 힌트 사용
SELECT /*+ MONITOR */ prod_id, cust_id, SUM(amount_sold)
FROM sales
WHERE time_id BETWEEN TO_DATE('2000-12-01', 'YYYY-MM-DD') AND TO_DATE('2000-12-31', 'YYYY-MM-DD')
GROUP BY prod_id, cust_id;
위 SQL 문은 MONITOR
힌트를 포함하여 실시간 모니터링이 활성화됩니다.
V$SQL_MONITOR 뷰를 통한 성능 통계 확인
실시간 SQL 모니터링으로 수집된 성능 통계는 V$SQL_MONITOR
뷰를 통해 확인할 수 있습니다. 이 뷰는 SQL 문의 SQL_ID, 데이터베이스 시간(elapsed time), CPU 시간, I/O 요청 수 등의 정보를 제공합니다.
예제 3: V$SQL_MONITOR 뷰 조회
SELECT sql_id, elapsed_time, cpu_time, iowaits, reads, writes
FROM V$SQL_MONITOR
WHERE sql_id = 'SQL_ID';
위 쿼리는 특정 SQL_ID
를 가진 SQL 문의 경과 시간, CPU 시간, I/O 대기, 읽기, 쓰기 횟수를 보여줍니다.
SQL Monitor 보고서 생성
실시간 SQL 모니터링 데이터를 기반으로 SQL Monitor 보고서를 생성하여 상세한 성능 분석을 수행할 수 있습니다. DBMS_SQL_MONITOR
패키지를 사용하여 보고서를 생성합니다.
예제 4: SQL Monitor 보고서 생성
VARIABLE my_rpt CLOB;
EXEC DBMS_SQL_MONITOR.REPORT_SQL_MONITOR (sql_id => 'SQL_ID', report_level => 'ALL', format => 'HTML', report => :my_rpt);
print my_rpt;
위 PL/SQL 블록은 특정 SQL_ID
의 모든 정보를 HTML 형식으로 담은 SQL Monitor 보고서를 생성하고, my_rpt
변수에 저장합니다.
결론
오라클 데이터베이스는 다양한 성능 모니터링 및 진단 도구를 제공합니다. ADDM 및 실시간 SQL 모니터링과 같은 도구를 효과적으로 활용하여 성능 문제를 사전에 예방하고, 발생 시 신속하게 해결할 수 있습니다.