

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# DB 인스턴스 모니터링
<a name="db-instance-monitoring"></a>

[https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.html)는 Amazon RDS의 기본 구성 요소입니다. 클라우드에 있는 격리된 데이터베이스 환경이기도 합니다. MySQL 및 MariaDB 데이터베이스의 경우 DB 인스턴스는 MySQL 서버라고도 하는 [mysqld](https://dev.mysql.com/doc/refman/8.0/en/mysqld.html) 프로그램입니다. 여기에는 SQL 구문 분석기, 쿼리 최적화 프로그램, 스레드/연결 핸들러, 시스템 및 상태 변수, 하나 이상의 플러그형 스토리지 엔진과 같은 여러 스레드와 구성 요소를 포함합니다. 각 스토리지 엔진은 특수 사용 사례를 지원하도록 설계되었습니다. 기본 및 권장 스토리지 엔진은 원자성, 일관성, 격리성, 내구성(ACID) 모델을 준수하는 트랜잭션 기반 범용 관계형 데이터베이스 엔진인 [InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html)입니다. InnoDB는 [인 메모리 구조](https://dev.mysql.com/doc/refman/8.0/en/innodb-in-memory-structures.html)(버퍼 풀, 변경 버퍼, 적응형 해시 인덱스, 로그 버퍼)와 [온디스크 구조](https://dev.mysql.com/doc/refman/8.0/en/innodb-on-disk-structures.html)(테이블스페이스, 테이블, 인덱스, 실행 취소 로그, 다시 실행 로그, 이중 쓰기 버퍼 파일)를 제공합니다. 데이터베이스가 ACID 모델을 면밀히 준수하도록 트랜잭션, 커밋, 롤백, 충돌 복구, 행 수준 잠금, 다중 버전 동시성 제어(MVCC) 등 [InnoDB 스토리지 엔진은 데이터를 보호하는 다양한 기능](https://dev.mysql.com/doc/refman/8.0/en/mysql-acid.html)을 구현합니다.

DB 인스턴스의 이러한 모든 내부 구성 요소는 함께 작동하여 데이터의 가용성, 무결성 및 보안을 예상되는 만족스러운 성능 수준으로 유지하는 데 도움이 됩니다. 워크로드에 따라 각 구성 요소와 기능은 CPU, 메모리, 네트워크 및 스토리지 하위 시스템에 리소스 수요를 부과할 수 있습니다. 특정 리소스에 대한 수요가 급증하여 프로비저닝된 용량 또는 해당 리소스에 대한 소프트웨어 제한(구성 파라미터 또는 소프트웨어 설계에 의해 부과됨)을 초과하는 경우 DB 인스턴스의 성능이 저하되거나 완전히 사용 불가능해지고 손상될 수 있습니다. 따라서 이러한 내부 구성 요소를 측정 및 모니터링하고, 정의된 기준 값과 비교하며, 모니터링된 값이 예상 값과 다른 경우 알림을 생성하는 것이 중요합니다.

앞서 설명한 대로 여러 [도구](monitoring-tools.md)를 사용하여 MySQL 및 MariaDB 인스턴스를 모니터링할 수 있습니다. 모니터링 및 알림에는 Amazon RDS Performance Insights 및 CloudWatch 도구를 사용하는 것이 좋습니다. 이 도구는 Amazon RDS와 통합되어 있고, 고해상도 지표를 수집하며, 최신 성능 정보를 거의 실시간으로 제공하고, 경보를 생성하기 때문입니다.

기본 모니터링 도구에 관계없이 MySQL 및 MariaDB DB 인스턴스에서 [성능 스키마를 켜는](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.EnableMySQL.html) 것이 좋습니다. [성능 스키마](https://dev.mysql.com/doc/refman/8.0/en/performance-schema.html)는 MySQL 서버(DB 인스턴스)의 작업을 낮은 수준에서 모니터링하기 위한 선택적 기능으로, 전체 데이터베이스 성능에 미치는 영향을 최소화하도록 설계되었습니다. `performance_schema` 파라미터를 사용하여 이 기능을 관리할 수 있습니다. 이 파라미터는 선택 사항이지만 Amazon RDS Performance Insights에서 수집하는 고해상도(1초) SQL당 지표, 활성 세션 지표, 대기 이벤트 및 기타 하위 수준의 세부 모니터링 정보를 수집하는 데 사용해야 합니다.

**Sections**
+ [DB 인스턴스에 대한 Performance Insights 지표](db-instance-performance-insights.md)
+ [DB 인스턴스에 대한 CloudWatch 지표](db-instance-cloudwatch-metrics.md)
+ [CloudWatch에 Performance Insights 지표 게시](publishing-performance-insights-to-cloudwatch.md)

# DB 인스턴스에 대한 Performance Insights 지표
<a name="db-instance-performance-insights"></a>

Performance Insights는 다음 섹션에서 설명한 대로 여러 유형의 지표를 모니터링합니다.

## 데이터베이스 부하
<a name="dbload"></a>

데이터베이스 로드(`DBLoad`)는 데이터베이스의 활동 수준을 측정하는 Performance Insights의 주요 지표입니다. 이 지표는 1초마다 수집되어 Amazon CloudWatch에 자동으로 게시됩니다. 이는 SQL 쿼리를 동시에 실행하는 세션 수에 해당하는 평균 활성 세션(AAS)에서 DB 인스턴스의 활동을 나타냅니다. `DBLoad` 지표는 5가지 차원(대기, SQL, 호스트, 사용자, 데이터베이스) 중 하나를 사용하여 해석할 수 있으므로 다른 시계열 지표와 다릅니다. 이러한 차원은 `DBLoad` 지표의 하위 범주입니다. 이를 범주별로 *구분*하여 데이터베이스 로드의 여러 특성을 나타낼 수 있습니다. 데이터베이스 로드를 계산하는 방법에 대한 자세한 설명은 Amazon RDS 설명서의 [데이터베이스 부하](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html)를 참조하세요.

다음 화면 그림에서는 Performance Insights 도구를 보여줍니다.

![\[Performance Insights 도구의 데이터베이스 로드\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/database-load.png)


## 측정 기준
<a name="dimensions"></a>
+ *대기 이벤트*는 데이터베이스 세션이 처리를 계속하기 위해 리소스나 다른 작업이 완료될 때까지 기다리는 조건입니다. SQL 문(예: `SELECT * FROM big_table`)을 실행하고 이 테이블이 할당된 InnoDB 버퍼 풀보다 훨씬 큰 경우 세션은 데이터 파일의 물리적 I/O 작업으로 인해 발생하는 `wait/io/file/innodb/innodb_data_file` 대기 이벤트를 기다릴 가능성이 큽니다. 대기 이벤트는 잠재적 성능 병목 현상을 나타내기 때문에 데이터베이스 모니터링에 중요한 차원입니다. 대기 이벤트는 세션 내에서 실행 중인 SQL 문이 가장 많은 시간을 기다리는 리소스 및 작업을 나타냅니다. 예를 들어 트랜잭션 수가 많은 데이터베이스 활동이 많을 때 `wait/synch/mutex/innodb/trx_sys_mutex` 이벤트가 발생하고, 스레드가 InnoDB 버퍼 풀에서 잠금을 획득하여 메모리의 페이지에 액세스하면 `wait/synch/mutex/innodb/buf_pool_mutex` 이벤트가 발생합니다. 모든 MariaDB 및 MySQL 대기 이벤트에 대한 자세한 내용은 MySQL 설명서의 [대기 이벤트 요약 테이블](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-wait-summary-tables.html)을 참조하세요. 계측 이름을 해석하는 방법을 이해하려면 MySQL 설명서의 [성능 스키마 장비 이름 지정 규칙](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-instrument-naming.html)을 참조하세요.
+ *SQL*에서는 총 데이터베이스 로드에 가장 많이 기여하는 SQL 문을 보여줍니다. Amazon RDS Performance Insights의 **데이터베이스 로드** 차트 아래에 있는 **상위 차원** 테이블은 대화형입니다. **대기별 로드(AAS)** 열의 막대를 클릭하여 SQL 문과 연결된 대기 이벤트의 세부 목록을 얻을 수 있습니다. 목록에서 SQL 문을 선택하면 Performance Insights는 **데이터베이스 로드** 차트에 연결된 대기 이벤트를 표시하고 **SQL 텍스트** 섹션에 SQL 문 텍스트를 표시합니다. SQL 통계는 **상위 차원** 테이블 오른쪽에 표시됩니다.
+ *호스트*에서는 연결된 클라이언트의 호스트 이름을 표시합니다. 이 차원은 데이터베이스로 대부분의 로드를 전송하는 클라이언트 호스트를 식별하는 데 도움이 됩니다.
+ *사용자*에서는 데이터베이스에 로그인한 사용자별로 DB 로드를 그룹화합니다.
+ *데이터베이스*에서는 클라이언트가 연결된 데이터베이스 이름을 기준으로 DB 로드를 그룹화합니다.

## 카운터 지표
<a name="counter-metrics"></a>

카운터 지표는 DB 인스턴스가 다시 시작될 때만 값이 증가하거나 0으로 재설정할 수 있는 누적 지표입니다. 카운터 지표 값은 이전 값으로 줄일 수 없습니다. 이러한 지표는 단순 증가하는 단일 카운터를 나타냅니다.
+ [기본 카운터](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.MySQL.Native)는 Amazon RDS가 아닌 데이터베이스 엔진에 의해 정의되는 지표입니다. 예제:
  + `SQL.Innodb_rows_inserted`는 InnoDB 테이블에 삽입된 행 수를 나타냅니다.
  + `SQL.Select_scan`은 첫 번째 테이블의 전체 스캔을 완료한 조인 수를 나타냅니다.
  + `Cache.Innodb_buffer_pool_reads`는 InnoDB 엔진이 버퍼 풀에서 검색할 수 없고 디스크에서 직접 읽어야 하는 논리적 읽기 수를 나타냅니다.
  + `Cache.Innodb_buffer_pool_read_requests`는 논리적 읽기 요청 수를 나타냅니다.

  모든 기본 지표의 정의는 MySQL 설명서에서 [서버 상태 변수](https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html)를 참조하세요.
+ [기본이 아닌 카운터 지표](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.MySQL.NonNative)는 Amazon RDS에 의해 정의됩니다. 특정 쿼리를 사용하여 이러한 지표를 확보하거나 계산에 둘 이상의 기본 지표를 사용하여 파생할 수 있습니다. 기본이 아닌 카운터 지표는 지연 시간, 비율 또는 적중률을 나타낼 수 있습니다. 예제:
  + `Cache.innoDB_buffer_pool_hits`는 InnoDB가 디스크를 활용하지 않고 버퍼 풀에서 검색할 수 있는 읽기 작업 수를 나타냅니다. 다음과 같이 기본 카운터 지표에서 계산됩니다.

    ```
    db.Cache.Innodb_buffer_pool_read_requests - db.Cache.Innodb_buffer_pool_reads
    ```
  + `IO.innoDB_datafile_writes_to_disk`는 디스크에 대한 InnoDB 데이터 파일 쓰기 작업 수를 나타냅니다. 데이터 파일에서의 작업만 캡처하며 이중 쓰기 또는 다시 실행 로깅 쓰기 작업은 캡처하지 않습니다. 다음과 같이 계산됩니다.

    ```
    db.IO.Innodb_data_writes - db.IO.Innodb_log_writes - db.IO.Innodb_dblwr_writes
    ```

Performance Insights 대시보드에서 직접 DB 인스턴스 지표를 시각화할 수 있습니다. 다음 그림과 같이 **지표 관리**를 선택하고 **데이터베이스 지표** 탭을 선택한 다음 관심 지표를 선택합니다.

![\[Performance Insights에서 DB 인스턴스 지표 선택\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/selecting-metrics.png)


다음 그림과 같이 **그래프 업데이트** 버튼을 선택하여 선택한 지표를 표시합니다.

![\[Performance Insights에서 DB 인스턴스 지표 보기\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/selecting-metrics-results.png)


## SQL 통계
<a name="sql-stats"></a>

Performance Insights는 쿼리가 실행 중인 동안 초당 SQL 쿼리 및 각 SQL 직접 호출에 대한 성능 관련 지표를 수집합니다. 일반적으로 Performance Insights는 명령문 및 다이제스트 수준에서 [SQL 통계](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.AnalyzeDBLoad.AdditionalMetrics.MySQL.html)를 수집합니다. 그러나 MariaDB 및 MySQL DB 인스턴스의 경우 통계는 다이제스트 수준에서만 수집됩니다.
+ 다이제스트 통계는 패턴이 동일하지만 결국 리터럴 값이 다른 모든 쿼리의 복합 지표입니다. 다이제스트는 특정 리터럴 값을 변수로 대체합니다. 예를 들어 다음과 같습니다.

  ```
  SELECT department_id, department_name FROM departments WHERE location_id = ?
  ```
+ 다이제스트된 각 SQL 문에 대해 *초당* 통계를 나타내는 지표가 있습니다. 예를 들어 `sql_tokenized.stats.count_star_per_sec`은 초당 직접 호출 수(즉, 초당 SQL 문이 실행된 횟수)를 나타냅니다.
+ Performance Insights에는 SQL 문에 대한 *직접 호출당* 통계를 제공하는 지표도 포함되어 있습니다. 예를 들어 `sql_tokenized.stats.sum_timer_wait_per_call`은 직접 호출당 SQL 문의 평균 지연 시간(밀리초)을 표시합니다.

SQL 통계는 Performance Insights 대시보드에 있는 **상위 차원**의 **상위 SQL** 탭에서 사용할 수 있습니다.

![\[SQL 통계\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/sql-stats.png)


# DB 인스턴스에 대한 CloudWatch 지표
<a name="db-instance-cloudwatch-metrics"></a>

Amazon CloudWatch는 Amazon RDS에서 자동으로 게시하는 지표도 포함합니다. `AWS/RDS` 네임스페이스에 상주하는 지표는 *인스턴스 수준 지표*이며, 엄격한 의미의 [mysqld](https://dev.mysql.com/doc/refman/8.0/en/mysqld.html) 프로세스에서 DB 인스턴스가 아닌 Amazon RDS(서비스) 인스턴스(즉, 클라우드에서 실행되는 격리된 데이터베이스 환경)를 나타냅니다. 따라서 이러한 [기본 지표](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html) 대부분은 엄격한 용어 정의에 따라 OS 지표 범주에 속합니다. 다른 예로는 `CPUUtilization`, `WriteIOPS`, `SwapUsage` 등이 있습니다. 하지만 MariaDB 및 MySQL에 적용할 수 있는 몇 가지 DB 인스턴스 지표도 있습니다.
+ `BinLogDiskUsage` - 바이너리 로그가 점유하는 디스크 공간의 양.
+ `DatabaseConnections` - DB 인스턴스에 대한 클라이언트 네트워크 연결 수.
+ `ReplicaLag` - 소스 DB 인스턴스 뒤에서 발생한 읽기 전용 복제본 DB 인스턴스의 지연 시간.

# CloudWatch에 Performance Insights 지표 게시
<a name="publishing-performance-insights-to-cloudwatch"></a>

Amazon RDS 성능 개선 도우미는 대부분의 DB 인스턴스 지표 및 차원을 모니터링하고 AWS Management Console의 [성능 개선 도우미 대시보드](https://console.aws.amazon.com/rds/home#performance-insights-v20206:)를 통해 사용할 수 있도록 합니다. 이 대시보드는 데이터베이스 문제 해결 및 근본 원인 분석에 적합합니다. 그러나 성능 관련 지표에 대해 Performance Insights에서 경보를 생성할 수는 없습니다. Performance Insights 지표를 기반으로 경보를 생성하려면 해당 지표가 CloudWatch에 있어야 합니다.

Performance Insights는 [CloudWatch에 지표를 자동으로 게시](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Cloudwatch.html)합니다. Performance Insights에서 동일한 데이터를 쿼리할 수 있지만 CloudWatch에 지표가 있으면 더 쉽게 CloudWatch 경보를 추가하고 기존 CloudWatch 대시보드에 지표를 추가할 수 있습니다. [카운터](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html)는 `os.memory.free` 또는 `db.Locks.Innodb_row_lock_time`과 같은 운영 체제 및 데이터베이스 성능 지표입니다. OS 지표 수집은 향상된 모니터링 설정에 따라 달라집니다. 향상된 모니터링이 꺼져 있는 경우 OS 지표는 1분마다 한 번씩 수집됩니다. 향상된 모니터링이 켜져 있는 경우 OS 지표는 선택한 기간에 수집됩니다. 자세한 내용은 Amazon RDS 설명서의 [향상된 모니터링 설정 및 해제](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.Enabling.html#USER_Monitoring.OS.Enabling.Procedure)를 참조하세요.

Performance Insights를 사용하면 DB 인스턴스에 대해 [사전 구성된 지표 또는 사용자 지정 지표 대시보드](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PI_metrics_export_CW.html)를 CloudWatch로 내보낼 수 있습니다. 지표 대시보드를 새 대시보드로 내보내거나 기존 CloudWatch 대시보드에 추가할 수 있습니다. Performance Insights 지표 대시보드를 CloudWatch 대시보드로 내보내면 DB 인스턴스 지표와 함께 EC2 인스턴스, Amazon Elastic File System(Amazon EFS) 리소스, Elastic Load Balancing(ELB) 리소스와 같은 시스템의 다양한 리소스와 연결된 지표의 개요를 제공하여 시스템 상태에 대한 포괄적인 통합 보기를 확인할 수 있습니다.

CloudWatch `DB_PERF_INSIGHTS` 지표 수학 함수를 사용하여 CloudWatch의 Performance Insights 지표를 기반으로 경보와 그래프를 쿼리하고 생성할 수 있습니다. Performance Insights 지표에 대한 경보를 생성하려면 [CloudWatch 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_alarm_database_performance_insights.html)의 지침을 따르세요. 예를 들어 DB 인스턴스에서 총 활성 트랜잭션 수가 특정 임계치에 도달할 때 경보를 트리거하려는 경우 해당 페이지의 지침을 따르고 `DB_PERF_INSIGHTS` 수학 표현식을 사용하고 **적용**을 선택합니다.

```
DB_PERF_INSIGHTS('RDS', 'db-BQ2TPYY7HG2GDFC7APMB3BVB3M', 'db.Transactions.active_transactions.avg')
```

여기서 `db-BQ2TPYY7HG2GDFC7APMB3BVB3M`은 DB 인스턴스의 리소스 ID입니다. 기간(예: 1분) 및 조건(예: 1,000 초과)을 지정합니다. 경보 생성을 완료하려면 경보 작업을 구성하고 이름과 설명을 추가한 다음 경보를 미리 보고 생성합니다.