Amazon RDS for Oracle 데이터베이스의 높은 CPU 사용률 문제를 해결하려면 어떻게 해야 합니까?

7분 분량
0

Oracle DB 인스턴스용 Amazon Relational Database Service(RDS)의 CPU 사용률이 높습니다.

간략한 설명

RDS for Oracle 데이터베이스의 CPU 사용량이 많은 경우 다음 도구를 조합하여 원인을 파악합니다.

  • Amazon CloudWatch 지표
  • 향상된 모니터링 지표
  • 성능 인사이트 지표
  • Oracle Statspack
  • Automatic Workload Repository(AWR)
  • Automatic Database Diagnostic Monitor(ADDM)
  • Active Session History(ASH)
  • Oracle SQLT

해결 방법

높은 CPU 사용률과 관련된 문제를 진단할 때는 문제가 발생한 기간을 확인합니다.

CloudWatch 지표

Amazon RDS는 각 활성 데이터베이스에 대해 1분마다 CloudWatch로 지표를 전송합니다. Amazon RDS에 대한 다음의 CloudWatch 지표를 검토하여 장기간에 걸친 CPU 패턴을 식별합니다.

  • CPUUtilization
  • CPUCreditUsage(T2 또는 T3 인스턴스를 사용하는 경우)
  • CPUCreditBalance(T2 또는 T3 인스턴스를 사용하는 경우)

또한 다음 지표를 검토하여 워크로드에 변화가 있었는지와 임계값을 넘었는지 확인합니다. 이러한 요인으로 인해 CPU 사용률이 급증할 수 있습니다.

  • DatabaseConnections
  • DiskQueueDepth
  • FreeableMemory
  • ReadIOPS
  • ReadLatency
  • WriteIOPS
  • WriteLatency

자세한 내용은 Amazon CloudWatch를 사용한 Amazon RDS 지표 모니터링인스턴스 상태 및 권장 사항 보기를 참조하십시오.

향상된 모니터링 지표

향상된 모니터링은 DB 인스턴스가 실행되는 운영 체제에 대한 지표를 실시간으로 제공합니다. CloudWatch는 하이퍼바이저로부터 CPU 사용률 지표를 가져오지만, 향상된 모니터링은 DB 인스턴스의 에이전트로부터 이러한 지표를 가져옵니다. 향상된 모니터링 지표는 CloudWatch 지표보다 더 세분화되어 있습니다. 향상된 모니터링 지표는 CloudWatch 로그에 30일 동안 저장됩니다.

지표의 수집 간격을 1초에서 1분까지 정의할 수 있습니다. 비즈니스에 중요한 애플리케이션의 경우 세분성을 1초 또는 5초로 설정하는 것이 가장 좋습니다. 이러한 세분성을 통해 지표는 성능 문제를 분석하기 위한 애플리케이션의 부하에 대한 더욱 정확한 정보를 제공합니다.

CPU 사용률이 급증한 기간을 보려면 다음을 수행합니다.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. 모니터링할 데이터베이스를 선택합니다.
  4. 모니터링 탭을 선택합니다.
  5. 모니터링 드롭다운 목록에서 향상된 모니터링을 선택합니다.
  6. 인스턴스가 다중 AZ 배포인 경우 향상된 모니터링 보기에서 기본을 선택하여 기본 인스턴스의 OS 메트릭을 확인하세요. 보조를 선택하여 대기 복제본에 대한 지표를 봅니다.
  7. 날짜 및 시작 시간을 선택합니다.
  8. 오른쪽 모서리에서 기간을 선택합니다. 5분, 15분, 30분 또는 1시간을 선택할 수 있습니다.

**CPU 합계 ** 그래프는 CPU 사용률이 증가한 기간을 나타냅니다.

로드 평균 1분, 로드 평균 5분로드 평균 15분 그래프는 각각 마지막 1분, 마지막 5분 및 마지막 15분 동안 CPU 시간을 요청한 프로세스의 수를 보여줍니다. 부하 평균이 vCPU 수보다 크면 인스턴스에 CPU 병목 현상이 발생할 수 있습니다.

OS 프로세스를 보려면 모니터링 드롭다운 목록에서 OS 프로세스 목록을 선택합니다. 그런 다음 CPU% 값을 기준으로 목록을 정렬하여 CPU 사용량이 가장 많은 프로세스를 식별합니다.

예시:

이름VIRTRESCPU%MEM%VMLIMIT
oracleORCL [27074]ᵗ6.07GiB1,007.24MB44.7212.78무제한
oracleORCL [27076]ᵗ6.07GiB1,010.02MB44.6412.82무제한

위 예시의 열에 대한 자세한 내용은 RDS 콘솔에서 OS 지표 보기를 참조하십시오.

CPU 사용률이 가장 높은 프로세스를 식별한 후 다음 쿼리를 실행하여 프로세스 ID를 데이터베이스의 세션에 매핑할 수 있습니다.

SET LINESIZE 120;
SET PAGES 200;
COL OSUSER FOR a20;
COL USERNAME FOR a20;
COL MACHINE FOR a20;
SELECT a.sid, a.serial#, a.osuser, a.username, a.machine, a.sql_id, c.sql_text FROM v$session a, v$process b, v$sql c
WHERE a.paddr=b.addr AND b.spid=&spid AND a.sql_id=c.sql_id(+);

기본적으로 모든 향상된 모니터링 그래프는 향상된 모니터링 대시보드에 표시되지 않습니다. CPU 사용률이 급증한 시점의 워크로드를 확인하려면 다음을 수행하여 추가 그래프를 활성화하세요.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. 모니터링할 데이터베이스를 선택합니다.
  4. 모니터링 탭을 선택합니다.
  5. 모니터링 드롭다운 목록에서 향상된 모니터링을 선택합니다.
  6. 향상된 모니터링 보기에서 그래프 관리를 선택합니다.
  7. 보려는 그래프를 선택합니다.
  8. 저장을 선택합니다.

보도록 선택할 수 있는 그래프 예시:

메모리

  • 무료
  • 캐시됨
  • 버퍼링됨
  • 합계
  • 오손
  • 활성
  • 슬래브

참고:지표와 관련된 지표는/proc/meminfo 파일에서 검색됩니다.

교체

  • 교체
  • 무료

디스크 I/O 및 물리 장치 I/O

  • IO/s 읽기
  • IO/s 쓰기
  • 평균 대기열 크기
  • 대기

CPU

  • 사용자
  • 합계
  • 시스템
  • 대기
  • 유휴
  • 양호함

사용 가능한 지표 목록은 향상된 모니터링 개요를 참조하세요.

향상된 모니터링에 대한 자세한 내용은 향상된 모니터링을 통한 OS 지표 모니터링을 참조하세요.

향상된 모니터링 비용에 대한 자세한 내용은 향상된 모니터링 비용을 참조하세요.

성능 인사이트 지표

Amazon RDS 성능 개선 도우미 대시보드를 사용하면 데이터베이스 로드를 시각화하고 대기, SQL 문, 호스트 또는 사용자별로 로드를 필터링할 수 있습니다.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 성능 인사이트를 선택합니다.
  3. 모니터링하려는 DB 인스턴스를 선택합니다.
  4. 이력 보기에서 원하는 기간을 선택합니다.
  5. 데이터베이스 로드 그래프에서 CPU 사용량이 급증한 시간을 확인합니다.
  6. 상위 대기 탭을 선택합니다.
    급증 기간 동안의 상위 대기 이벤트를 기록합니다.
  7. 상위 SQL 탭을 선택합니다.
    급증에 기여한 SQL 문을 검토하고 최적화하세요.

성능 인사이트 비용에 대한 자세한 정보는 성능 인사이트 요금을 참조하세요.

Oracle Statspack

Statspack은 특정 기간 동안 데이터베이스의 성능 지표를 제공하는 성능 보고 도구입니다.

Statspack을 사용하여 인스턴스의 CPU 사용률을 검토하려면 다음을 수행합니다.

  1. 문제가 발생한 기간에 대한 statspack 보고서를 생성하세요.
  2. 높은 CPU 부하를 초래하는 쿼리를 검토하고 최적화하세요.
  3. 상위 대기 이벤트를 검토합니다.

Statspack 보고서에서 발췌한 예시:

-> Total DB CPU (s):           3,345
-> Captured SQL accounts for   91.3% of Total DB CPU
-> SQL reported below exceeded  1.0% of Total DB CPU
    CPU                  CPU per            Elapsed                     Old
  Time (s)   Executions  Exec (s)  %Total   Time (s)    Buffer Gets  Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
   3043.36      598,100       0.01   91.0    3356.81     994,096,212  219593194

Module: JDBC Thin Client
SELECT tt.ORDER_TOTAL, tt.SALES_REP_ID, tt.ORDER_DATE, customers.CUST_FIRST_NAME, customers.CUST_LAST_NAME FROM   
(SELECT orders.ORDER_TOTAL, orders.SALES_REP_ID, orders.ORDER_DATE, orders.customer_id, rank() Over (ORDER BY orders.O

자세한 내용은 Oracle Statspack에 대한 Oracle 설명서를 참조하세요.

AWR

AWR(Oracle 웹 사이트)은 특정 기간 동안 성능 지표를 제공하는 Oracle 성능 보고 도구입니다.

**참고:**AWR에는 진단 팩 라이선스가 필요하며 Oracle 엔터프라이즈 에디션에서만 사용할 수 있습니다.

AWR을 사용하여 CPU 부하의 원인을 식별하려면 다음을 수행합니다.

1.    다음과 비슷한 쿼리를 실행하여 CPU 로드가 높은 기간의 시작 및 종료 스냅샷 ID를 식별합니다.

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    AWR 보고서를 생성합니다.

3.    AWR 보고서를 다운로드합니다.

4.    AWR 보고서의 CPU 시간 기준 SQL 정렬 섹션에 나열된 쿼리를 검토하고 최적화합니다.

5.상위 대기 이벤트를 검토합니다.

Oracle 12c 이상 버전에서는 ADDM 및 ASH 보고서가 AWR 보고서에 포함되어 있습니다.

참고: 4개 이상의 연속 스냅샷 ID에 대해 AWR 보고서가 생성되는 경우 모든 ADDM 및 ASH 보고서가 포함되지 않습니다. 이러한 추가 보고서를 생성하려면 다음 섹션의 지침을 따르세요.

ADDM

ADDM은 AWR 데이터를 분석하고 성능 병목 현상을 식별하며 권장 사항을 제공하는 진단 도구입니다.

**참고:**ADDM에는 진단 팩 라이선스가 필요하며 Oracle 엔터프라이즈 에디션에서만 사용할 수 있습니다.

1.    다음과 비슷한 쿼리를 실행하여 CPU 로드가 높은 기간의 시작 및 종료 스냅샷 ID를 식별합니다.

SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;

2.    ADDM 보고서를 생성합니다.

3.    ADDM 보고서를 다운로드합니다.

4.    ADDM 보고서의 권장 사항을 검토합니다.

ASH

ASH(Oracle 웹 사이트)는 활성 세션 정보를 수집하는 진단 도구입니다. ASH를 사용하여 일시적인 성능 문제를 해결하려면 다음을 수행합니다.

**참고:**ASH에는 진단 팩 라이선스가 필요하며 Oracle 엔터프라이즈 에디션에서만 사용할 수 있습니다.

1.    CPU 로드가 높았던 기간에 대한 ASH 보고서를 생성합니다.

2.    ASH 보고서를 다운로드합니다.

3.    상위 이벤트가 포함된 상위 SQL 섹션을 검토합니다.

AWR, ADDM 및 ASH 보고서의 해석에 대한 자세한 내용은 Oracle 지원 문서 ID FAQ에 대한 오라클 지원 설명서를 참조하세요. Automatic Workload Repository(AWR) 보고서(Doc ID 1599440.1).

Oracle SQLT

아마존 RDS는 SQLT 옵션을 사용하여 Oracle SQLTXPLAIN(SQLT)을 지원합니다. SQLT는 제대로 작동하지 않는 SQL 문을 진단하는 데 사용하는 도구입니다.

특정 SQL 문에 대한 보고서를 생성하려면 Oracle SQLT를 참조하세요.

SQLT를 사용할 때 다음 오류가 발생하는 경우:

Error: ORA-20106: SQLT parameter connect_identifier must be set when running SQLT from a remote client.

추출을 실행하기 전에 다음 명령 중 하나를 실행합니다.

EXEC sqltxadmin.sqlt$a.set_sess_param(‘connect_identifier’, ‘@SID’);
EXEC sqltxadmin.sqlt$a.set_param(‘connect_identifier’, ‘@example-hostname:example-port/example-sid’);

관련 정보

Amazon RDS의 모니터링 지표 개요

Automatic Workload Repository(AWR)를 사용한 성능 보고서 생성

ADDM 보고서 생성

ASH 보고서 생성

Oracle을 실행하는 Amazon RDS DB 인스턴스에 대한 성능 통계를 확인하려면 어떻게 해야 하나요?