CloudWatch Database Insights에서 Amazon Aurora PostgreSQL에 대한 잠금 트리 분석 - Amazon CloudWatch

CloudWatch Database Insights에서 Amazon Aurora PostgreSQL에 대한 잠금 트리 분석

잠금으로 인한 성능 문제를 해결하기 위해 CloudWatch Database Insights에서 다음을 사용하여 Amazon Aurora PostgreSQL 데이터베이스의 잠금 트리를 분석할 수 있습니다.

  • 슬라이스된 기준 드롭다운 - 데이터베이스 로드 차트에서 객체 차단, 세션 차단 또는 SQL 차단 차원을 선택하여 시간이 지남에 따라 고유한 상위 블로커가 DB 로드에 어떻게 기여하는지 확인합니다. DB 로드 차트를 사용하면 상위 블로커가 일정한지 아니면 자주 변경되는지 분석할 수 있습니다. 그런 후에 블로커 문제를 해결할 수 있습니다.

    분할 기준 드롭다운에서 세션 차단이 선택된 상위 SQL 테이블
  • 분석 잠금 탭 - DB 로드 분석을 선택한 다음에 분석 잠금 탭을 선택하여 데이터베이스의 잠금 경합에 대한 내용을 봅니다.

    데이터베이스 로드 대시보드의 잠금 트리 테이블
참고

CloudWatch Database Insights는 모든 Aurora PostgreSQL 버전에 대한 분석 잠금을 지원합니다. 잠금 트리를 분석하려면 Database Insights 고급 모드가 활성화되어 있어야 합니다. 고급 모드를 켜는 방법에 대한 내용은 Amazon Aurora용 Database Insights의 고급 모드 켜기Amazon Relational Database Service용 Database Insights의 고급 모드 켜기를 참조하세요.

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

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

참고

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

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

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

잠금 트리를 분석하는 방법
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 인사이트를 선택합니다.

  3. Database Insights를 선택합니다.

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

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

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

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

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

  8. 스냅샷 기간을 선택하세요. 기본적으로 Database Insights는 세션이 가장 많이 차단된 스냅샷 기간을 선택합니다.

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

  10. 잠금 트리를 확장하려면 세션 ID 옆의 화살표를 선택하세요.

    잠금 트리 확장됨

잠금 스냅샷 데이터

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

열 이름 정의 기본 열 Notes

session_id

고유한 세션 식별자.

session_idHEX(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_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_activitypg_locks 보기의 값에 대한 자세한 내용은 PostgreSQL 설명서의 다음 주제를 참조하세요.