

# CloudWatch Database Insights에서 Amazon Aurora PostgreSQL 및 Amazon RDS for PostgreSQL에 대한 잠금 트리 분석
<a name="Database-Insights-Lock-Analysis"></a>

잠금으로 인한 성능 문제를 해결하기 위해 CloudWatch Database Insights에서 다음을 사용하여 Amazon Aurora PostgreSQL 및 Amazon RDS for PostgreSQL 데이터베이스의 잠금 트리를 분석할 수 있습니다.
+ **슬라이스된 기준** 드롭다운 - **데이터베이스 로드** 차트에서 **객체 차단**, **세션 차단** 또는 **SQL 차단** 차원을 선택하여 시간이 지남에 따라 고유한 상위 블로커가 DB 로드에 어떻게 기여하는지 확인합니다. DB 로드 차트를 사용하면 상위 블로커가 일정한지 아니면 자주 변경되는지 분석할 수 있습니다. 그런 후에 블로커 문제를 해결할 수 있습니다.  
![\[분할 기준 드롭다운에서 세션 차단이 선택된 상위 SQL 테이블\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/images/DBInsights_TopSQLBlocking.png)
+ **분석 잠금** 탭 - **DB 로드 분석**을 선택한 다음에 **분석 잠금** 탭을 선택하여 데이터베이스의 잠금 경합에 대한 내용을 봅니다.  
![\[데이터베이스 로드 대시보드의 잠금 트리 테이블\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/images/DBInsights_LoadLockAnalysis.png)

**참고**  
CloudWatch Database Insights는 모든 Aurora PostgreSQL 버전에 대한 분석 잠금을 지원합니다. 잠금 트리를 분석하려면 Database Insights 고급 모드가 활성화되어 있어야 합니다. 고급 모드를 켜는 방법에 대한 내용은 [Amazon Aurora용 Database Insights의 고급 모드 켜기](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_DatabaseInsights.TurningOnAdvanced.html)와 [Amazon Relational Database Service용 Database Insights의 고급 모드 켜기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DatabaseInsights.TurningOnAdvanced.html)를 참조하세요.

잠금 분석 탭에서는 데이터베이스의 잠금 경합에 대한 정보를 제공합니다. 잠금 트리 시각화에서는 서로 다른 세션에서 잠금 요청 간 관계와 종속성을 보여줍니다.

Database Insights는 15초마다 스냅샷을 캡처합니다. 스냅샷은 특정 시점에 데이터베이스에 대한 잠금 데이터를 표시합니다.

**참고**  
CloudWatch가 높은 잠금을 감지하면 CloudWatch에 **분석 잠금** 탭에 대한 **높은 잠금 감지됨** 배너가 표시됩니다. CloudWatch가 연속 15분 동안 15초 간격으로 잠금 스냅샷을 생성하는 경우 CloudWatch는 높은 잠금을 감지합니다.

트리의 각 노드는 특정 세션을 나타냅니다. 상위 노드는 하위 노드를 차단하는 세션입니다.

잠금 트리를 분석하려면 다음 절차를 사용합니다.

**잠금 트리를 분석하는 방법**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. **인사이트**를 선택합니다.

1. **Database Insights**를 선택합니다.

1. **데이터베이스 인스턴스** 보기를 선택합니다.

1. DB 인스턴스를 선택합니다.

1. **DB 로드 분석** 탭을 선택하세요.

1. **분석 잠금** 탭을 선택합니다.

   DB 인스턴스의 잠금 데이터를 보려면 1일 이하의 기간을 선택하세요.

1. 스냅샷 기간을 선택하세요. 기본적으로 Database Insights는 세션이 가장 많이 차단된 스냅샷 기간을 선택합니다.  
![\[잠금 분석 테이블\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/images/dbi_lock-analysis.png)

1. 스냅샷의 잠금 데이터를 보려면 Database Insights가 스냅샷을 생성한 시간을 선택하세요.

1. 잠금 트리를 확장하려면 세션 ID 옆의 화살표를 선택하세요.  
![\[잠금 트리 확장됨\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/images/dbi_lock-analysis-expand.png)

## 잠금 스냅샷 데이터
<a name="Database-Insights-Lock-Analysis-snapshot-data"></a>

Database Insights는 각 잠금 요청에 대해 다음 정보를 제공합니다. 기본적으로 활성화되지 않은 열을 보려면 **트리 잠금** 테이블의 **설정** 아이콘을 선택하고 다른 열을 활성화합니다.


| 열 이름 | 정의  | 기본 열 | 참고 | 
| --- | --- | --- | --- | 
|  `session_id`  | 고유한 세션 식별자. |  예  | `session_id`는 `HEX(pg_stat_activity.backend_start).HEX(pg_locks.pid)`에서 파생됩니다. | 
|  `pid`  | 이 백엔드의 PID. |  예  | `pg_locks.pid` | 
|  `blocked_sessions_count`  | 이 잠금으로 차단된 세션 수. |  예  | `blocked_sessions_count`는 이 잠금으로 차단된 세션 ID 수에서 파생됩니다. | 
|  `last_query_executed`  | 이 세션에서 실행한 마지막 쿼리. 블로커의 경우 차단 잠금을 보류하는 쿼리가 아닐 수 있습니다. |  예  | `pg_stat_activity.query` | 
|  `wait_event`  | 백엔드가 현재 대기 중인 경우 대기 이벤트 이름. 그렇지 않은 경우 값은 NULL입니다. |  예  | `pg_stat_activity.wait_event` | 
|  `blocking_time_(In Seconds)`  | 이 잠금이 시작된 이후 시간(초). |  예  | `blocking_time_(In Seconds)`는 첫 번째 대기자에 대한 대기 트랜잭션(`pg_locks.waitstart`)의 시작 시간에서 파생됩니다. | 
|  `blocking_mode`  | 차단 세션이 보류한 잠금 모드. |  아니요  | `pg_locks.mode` | 
|  `waiting_mode`  | 대기 세션에서 요청한 잠금 모드. |  아니요  | `pg_locks.mode` | 
|  `application`  | 이 백엔드에 연결된 애플리케이션 이름. |  아니요  | `pg_stat_activity.application_name` | 
|  `blocking_txn_start_time`  | 활성 트랜잭션이 없는 경우 차단 트랜잭션의 시작 시간 또는 null. |  아니요  | `pg_stat_activity.xact_start` | 
|  `waiting_start_time`  | 대기 중인 사용자 세션이 이 잠금을 기다리기 시작한 시간 또는 잠금이 보류된 경우 null. |  아니요  | `pg_locks.waitstart` | 
|  `session_start_time`  | 사용자 세션이 시작된 시간. |  아니요  | `pg_stat_activity.backend_start` | 
|  `state`  | 백엔드 상태. |  아니요  | `pg_stat_activity.state` | 
|  `wait_event_type`  | 이 세션이 대기 중인 대기 이벤트 유형. |  아니요  | `pg_stat_activity.wait_event_type` | 
|  `last_query_exec_time`  | 마지막 쿼리가 시작된 시간. |  아니요  | `pg_stat_activity.query_start` | 
|  `user`  | 이 백엔드에 로그인한 사용자 이름. |  아니요  | `pg_stat_activity.usename` | 
|  `host`  | `client_addr`의 역방향 DNS 조회에서 보고한 연결된 클라이언트의 호스트 이름. 이 필드는 IP 연결의 경우 그리고 [log\$1hostname](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-HOSTNAME)이 활성화된 경우에만 null이 아닙니다. |  아니요  | `pg_stat_activity.client_hostname` | 
|  `port`  | 이 백엔드와의 통신에 클라이언트가 사용 중인 TCP 포트 번호 또는 Unix 소켓이 사용되는 경우 `-1`. 이 필드가 null이면 내부 서버 프로세스임을 나타냅니다. |  아니요  | `pg_stat_activity.client_port` | 
|  `client_address`  | 이 백엔드에 연결된 클라이언트의 IP 주소. 이 필드가 null이면 클라이언트가 서버 시스템에서 Unix 소켓을 통해 연결되었거나 autovacuum과 같은 내부 프로세스임을 나타냅니다. |  아니요  | `pg_stat_activity.client_addr` | 
|  `granted`  | 잠금이 보류된 경우 값은 true이고 잠금이 대기 중인 경우 false입니다. |  아니요  | `pg_locks.granted` | 
|  `waiting_tuple`  |  페이지 내 잠금이 대상으로 지정한 튜플 번호 또는 대상이 튜플이 아닌 경우 null.  |  아니요  | `pg_locks.tuple` | 
|  `waiting_page`  | 관계 내에서 잠금이 대상으로 지정한 페이지 번호 또는 대상이 관계 페이지나 튜플이 아닌 경우 null. |  아니요  | `pg_locks.page` | 
|  `waiting_transaction_id`  | 잠금이 대상으로 지정한 트랜잭션의 ID 또는 대상이 트랜잭션 ID가 아닌 경우 null. |  아니요  | `pg_locks.transactionid` | 
|  `waiting_relation`  | 잠금이 대상으로 지정한 관계의 OID 또는 대상이 관계나 관계의 일부가 아닌 경우 null. |  아니요  | `pg_locks.relation` | 
|  `waiting_object_id`  | 시스템 카탈로그 내 잠금 대상의 OID 또는 대상이 일반 데이터베이스 객체가 아닌 경우 null. |  아니요  | `pg_locks.objid` | 
|  `waiting_database_id`  | 잠금 대상이 있는 데이터베이스의 OID, 대상이 공유 객체인 경우 0 또는 대상이 트랜잭션 ID인 경우 null. |  아니요  | `pg_locks.database` | 
|  `waiting_database_name`  | 잠금 테이블이 있는 데이터베이스의 이름. |  아니요  | `pg_stat_activity.datname` | 
|  `waiting_locktype`  | 잠금 가능한 객체 유형: relation, extend, frozenid, page, tuple, transactionid, virtualxid, spectoken, object, userlock, advisory, or applytransaction. |  아니요  | `pg_locks.locktype` | 
|  `is_fastpath`  | 이 값은 빠른 경로로 잠금을 수행한 경우 true, 기본 잠금 테이블에서 잠금을 가져온 경우 false입니다. |  아니요  | `pg_locks.fastpath` | 

`pg_stat_activity` 및 `pg_locks` 보기의 값에 대한 자세한 내용은 PostgreSQL 설명서의 다음 주제를 참조하세요.
+ [pg\$1locks](https://www.postgresql.org/docs/current/view-pg-locks.html)
+ [pg\$1stat\$1activity](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW)