내용으로 건너뛰기

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

6분 분량
0

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

해결 방법

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

CloudWatch 지표

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

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

또한 다음 지표를 검토하여 워크로드에 변화가 있었는지와 임계값을 넘었는지 확인합니다.

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

참고: 이러한 요인으로 인해 CPU 사용률이 급증할 수 있습니다.

자세한 내용을 보려면 인스턴스 상태 보기를 참조하십시오.

향상된 모니터링 지표

향상된 모니터링은 DB 인스턴스가 실행되는 운영 체제에 대한 지표를 실시간으로 제공합니다.

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

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

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

평균 로드 1분, 평균 로드 5분, ** 평균 로드 15분** 그래프는 CPU 시간을 요청한 프로세스의 수를 보여줍니다. CPU 시간은 마지막 1분 동안 계산됩니다. 이 그래프에는 지난 5분과 지난 15분도 표시됩니다. 평균 로드가 vCPU 수보다 크면 인스턴스에 CPU 병목 현상이 발생할 수 있습니다.

OS 프로세스를 보려면 모니터링 드롭다운 목록에서 OS 프로세스 목록을 선택합니다. 그런 다음 CPU 사용량이 가장 많은 프로세스를 식별하려면 CPU% 값을 기준으로 목록을 정렬합니다. 자세한 내용은 Aurora 및 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. Aurora 및 RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. 모니터링할 데이터베이스를 선택합니다.
  4. 모니터링 탭을 선택합니다.
  5. 모니터링 드롭다운 목록에서 향상된 모니터링을 선택합니다.
  6. 향상된 모니터링 보기에서 그래프 관리를 선택합니다.
  7. 보려는 그래프를 선택합니다.
  8. 저장을 선택합니다.

다음 예제 그래프를 선택하여 볼 수 있습니다.

메모리

  • 사용 가능한 메모리
  • 캐시된 메모리
  • 버퍼링된 메모리
  • 총 메모리
  • 더티 메모리
  • 활성 메모리
  • 슬래브 메모리

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

스왑

  • 스왑
  • 무료 스왑

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

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

CPU

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

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

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

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

Amazon RDS Performance Insights 지표

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

성능 개선 도우미 지표를 보려면 다음 단계를 완료하십시오.

  1. Aurora 및 RDS 콘솔을 엽니다.
  2. 탐색 창에서 성능 개선 도우미를 선택합니다.
  3. 모니터링하려는 DB 인스턴스를 선택합니다.
  4. 기본적으로 성능 개선 도우미 대시보드에는 지난 1시간 동안의 통계가 표시됩니다. 분석하는 기간에 대해 상대적 또는 절대를 선택합니다.
  5. 데이터베이스 로드 그래프에서 CPU 사용량이 급증한 시간을 확인합니다.
  6. 상위 대기 탭을 선택합니다.
    참고: 급증 기간 동안의 상위 대기 이벤트를 확인합니다.
  7. 상위 SQL 탭을 선택합니다.
  8. 급증에 기여한 SQL 문을 검토하고 최적화합니다.

성능 개선 도우미 비용에 대한 자세한 내용은 성능 개선 도우미 요금을 참조하십시오.

Statspack

Oracle 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 웹 사이트의 Oracle Statspack을 참조하십시오.

AWR

Automatic Workload Repository는 특정 기간 동안 성능 지표를 제공하는 Oracle 성능 보고 도구입니다. 자세한 내용은 Oracle 웹 사이트의 Automatic Workload Repository를 참조하십시오.

참고: 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 이상 버전에서는 Automatic Database Diagnostic Monitor(ADDM) 및 Active Session History(ASH) 보고서가 AWR 보고서에 포함됩니다.

참고: 4개를 초과하는 연속 스냅샷 ID에 대해 AWR 보고서가 생성되는 경우 일부 ADDM 및 ASH 보고서가 포함되지 않습니다.

ADDM

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

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

ADDM을 사용하여 AWR 데이터를 분석하려면 다음 단계를 완료하십시오.

  1. CPU 부하가 높았던 기간의 시작 및 종료 스냅샷 ID를 식별하려면 다음 샘플 쿼리를 실행합니다.

    SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
  2. ADDM 보고서를 생성합니다.

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

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

ADDM 보고서에 대한 자세한 내용은 Oracle 웹 사이트의 FAQ: Automatic Workload Repository (AWR) Reports (Doc ID 1599440.1)를 참조하십시오.

ASH

Active Session History는 활성 세션 정보를 수집하는 진단 도구입니다. ASH를 사용하여 일시적인 성능 문제를 해결하려면 다음 단계를 완료하십시오.

  1. CPU 로드가 높았던 기간에 대한 ASH 보고서를 생성합니다.
    참고: ASH는 진단 팩 라이선스가 필요하며 Oracle 엔터프라이즈 에디션에서만 사용할 수 있습니다.
  2. ASH 보고서를 다운로드합니다.
  3. 상위 이벤트가 포함된 상위 SQL 섹션을 검토합니다.

ASH 보고서에 대한 자세한 내용은 Oracle 웹 사이트의 Analyzing Sampled Data를 참조하십시오.

Oracle SQLT

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

특정 SQL 문에 대한 보고서를 생성하려면 Oracle 웹 사이트의 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)를 사용하여 성능 보고서 생성

Oracle을 실행하는 Amazon RDS DB 인스턴스의 성능 통계를 확인하려면 어떻게 해야 합니까?