본문으로 건너뛰기

세션 히스토리

조회 기간 동안 수집된 세션 정보를 시간순으로 조회할 수 있는 화면입니다. 특정 시간대에 어떤 세션이 어떤 SQL을 수행했는지, 각 세션의 상태와 자원 사용량은 어떠했는지를 분석할 수 있습니다.

  • 5초 간격으로 수집된 액티브 세션 스냅샷을 기반으로 데이터를 제공합니다.

  • 세션 추이 차트를 통해 시간대별 세션 수 변화를 시각적으로 파악할 수 있습니다.

  • 필드 패널과 필터를 활용하여 특정 조건의 세션만 조회할 수 있습니다.

세션 히스토리 조회하기

상단 필터에서 조회 조건을 설정하고 필드 패널로 세션을 필터링한 뒤, 세션 추이 차트와 목록을 통해 시간대별 세션 변화와 상태를 확인할 수 있습니다.

기본 옵션

상단 필터 영역에서 시간, 대상 인스턴스, 필터 등을 설정할 수 있습니다.

  • 시간: 조회 시간 범위 선택 기본 10분 단위로 설정되며, 좌우 화살표로 이동할 수 있음

  • 인스턴스: 조회 대상 DB 인스턴스 선택 가능

  • 필터: 필드별 조건을 추가하여 데이터 필터링, 다중 조건 시 AND 로직이 적용됨

  • 뷰 모드: 테이블 뷰 또는 트리 뷰로 전환할 수 있음

  • 다운로드: CSV 형식으로 내보내기

필드 패널

화면 왼쪽의 필드 패널에서 필터 조건을 쉽게 추가할 수 있습니다.

  1. 필드명을 클릭하면 조건 입력 팝업이 나타납니다.

  2. 연산자와 값을 설정한 후 적용 버튼을 클릭하면 상단 필터에 조건이 추가됩니다.

  3. 상단 검색창으로 필드명을 검색할 수 있습니다. 필터 조건을 적용하면 조건에 만족하는 세션만 차트와 테이블에 표시됩니다.

    • 예를 들어 query 필드에 특정 키워드를 포함 조건으로 설정하면, 해당 키워드가 포함된 SQL을 수행하는 세션만 조회할 수 있습니다. 다중 조건 적용 시 AND 로직으로 동작합니다.

세션 추이 차트

조회 기간 동안의 액티브 세션 수와 락 대기 세션 수를 바 차트로 표시합니다. X축은 시간, Y축은 세션 수입니다. 최대 1시간 범위로 조회할 수 있습니다.

  • 전체 액티브 세션 수 중 락 대기(Lock Wait) 세션은 빨간색으로 구분하여 표시합니다.

  • 특정 시간대에 총 액티브 세션 수와 그중 락 대기 세션 비율을 시각적으로 파악할 수 있습니다.

  • 차트 영역을 마우스 드래그하면 해당 구간으로 드릴다운하여 상세 분석할 수 있습니다.

  • 차트의 특정 시간을 클릭하면 해당 시간대의 액티브 세션만 하단 테이블에 표시됩니다.

세션 목록 테이블

수집된 세션 정보를 시간순으로 표시합니다. 하단의 페이지네이션을 통해 페이지를 이동할 수 있으며, 페이지당 표시 건수를 설정할 수 있습니다.

컬럼 안내

각 컬럼의 지원 환경은 해당 컬럼의 데이터를 조회할 수 있는 조건을 의미합니다.

  • PostgreSQL: pg_stat_activity 뷰에서 수집합니다. PostgreSQL 버전에 따라 제공되는 컬럼이 다를 수 있습니다.

  • XOS: XOS 에이전트를 추가로 설치한 경우에만 조회할 수 있습니다.

  • 공통: DB 버전이나 에이전트 설치 여부와 관계없이 항상 제공됩니다.

기본 정보

컬럼설명지원 환경
time세션 정보가 수집된 시각공통
instanceDB 인스턴스 명공통
pid백엔드 프로세스 IDPostgreSQL
datname접속 중인 데이터베이스 명PostgreSQL
usename접속 사용자 명PostgreSQL
client_addr클라이언트 IP 주소PostgreSQL
client_hostname클라이언트 호스트 명PostgreSQL
client_port클라이언트 포트 번호PostgreSQL
application_name클라이언트 애플리케이션 명PostgreSQL

실행 정보

컬럼설명지원 환경
state세션의 현재 상태 (active, idle, idle in transaction 등)PostgreSQL
runtime현재 쿼리의 수행 시간 (초)PostgreSQL
xact_runtime현재 트랜잭션의 수행 시간 (초)PostgreSQL
wait_event현재 대기 중인 이벤트 명PostgreSQL
wait_event_type대기 이벤트의 타입 (Lock, LWLock, IO, IPC 등)PostgreSQL 9.6 이상
state_change마지막으로 상태가 변경된 시각PostgreSQL
query실행 중인 SQL 문PostgreSQL
query_paramSQL의 바인드 파라미터 값공통
query_hashSQL 해시값공통

시간 정보

컬럼설명지원 환경
xact_start현재 트랜잭션 시작 시각PostgreSQL
query_start현재 쿼리 시작 시각PostgreSQL
backend_start백엔드 프로세스 시작 시각PostgreSQL

백엔드 정보

컬럼설명지원 환경
backend_type백엔드 프로세스 타입 (client backend, autovacuum worker 등)PostgreSQL 10 이상
backend_xid백엔드의 현재 트랜잭션 IDPostgreSQL 9.4 이상
backend_xmin백엔드의 xmin horizonPostgreSQL 9.4 이상
query_id쿼리 IDPostgreSQL 14 이상

자원 사용량

컬럼설명지원 환경
cpuusageCPU 사용률XOS
cputimeCPU 사용 시간XOS
rssResident Set Size (물리 메모리 사용량)XOS
pssProportional Set Size (비례 메모리 사용량)XOS
vsize가상 메모리 크기XOS
ioreadI/O 읽기량XOS
iowriteI/O 쓰기량XOS

데이터 해석 가이드

주요 확인 포인트

컬럼의미해석 포인트
state세션의 현재 상태active: SQL 실행 중, idle in transaction: 트랜잭션 내 유휴 상태 → 장시간 유지 시 락 원인 가능
runtime현재 쿼리의 수행 시간높을수록 장시간 수행 중인 쿼리 → 튜닝 대상
xact_runtime현재 트랜잭션의 수행 시간높을수록 장시간 유지 중인 트랜잭션 → 락 경합, vacuum 지연 원인 가능
wait_event대기 중인 이벤트Lock 계열: 락 경합 발생, IO 계열: 디스크 I/O 병목
cpuusageCPU 사용률높으면 CPU 집약적 쿼리 → 쿼리 최적화 필요

이상 세션 식별

  • runtime이 비정상적으로 높은 세션: 장시간 실행 중인 쿼리 → 실행 계획 점검, 인덱스 튜닝

  • state가 idle in transaction이면서 xact_runtime이 긴 세션: 트랜잭션이 열린 채 유휴 상태 → 다른 세션의 락 대기 원인, vacuum 지연 유발

  • wait_event가 Lock 계열인 세션이 다수: 특정 테이블이나 Row에 대한 락 경합 → 트랜잭션 패턴 점검

  • wait_event_type이 IO인 세션: 디스크 I/O 병목 → 쿼리 최적화, shared_buffers 등 메모리 설정 점검

실전 활용 시나리오

시나리오 1. 특정 시간대의 세션 급증 분석

  1. 세션 추이 차트에서 세션 수가 급증한 구간 확인

  2. 해당 시간대의 세션 목록에서 state, wait_event 확인

  3. 동일한 query가 반복되는지, 특정 client_addr에서 집중되는지 분석

  4. 필터를 활용하여 state 또는 wait_event_type 기준으로 세션 분류

시나리오 2. 장시간 수행 세션 추적

  1. 필드 패널에서 runtime 필터를 추가하여 장시간 수행 세션 조회

  2. 해당 세션의 query를 확인하여 어떤 SQL이 오래 실행되었는지 파악

  3. wait_event를 확인하여 쿼리 수행 중인지, 락 대기 중인지 판단

  4. 필요 시 해당 SQL의 실행 계획(Plan) 확인

시나리오 3. idle in transaction 세션 점검

  1. 필드 패널에서 state 필터에 "idle in transaction" 조건 추가

  2. xact_runtime이 긴 세션을 확인하여 트랜잭션이 얼마나 오래 열려 있는지 파악

  3. 해당 세션의 application_nameclient_addr로 원인 애플리케이션 식별

  4. 장시간 유지되는 트랜잭션은 다른 세션의 락 대기와 vacuum 지연을 유발할 수 있으므로 주의

시나리오 4. 락 경합 원인 분석

  1. 세션 추이 차트에서 빨간색(락 대기) 비율이 높은 구간 확인

  2. 필드 패널에서 wait_event_type 필터에 "Lock" 조건 추가

  3. 대기 중인 세션들의 querydatname을 확인하여 경합 대상 파악

  4. xact_runtime이 긴 세션이 락을 점유하고 있는지 확인

추가 기능

필터 사용법

  1. 필터 추가 버튼을 클릭 또는 필드 패널에서 필드명 클릭하세요.

  2. 필터 키를 선택하세요.

    • 문자(String): = (포함), != (미포함)

    • 숫자(Number): == (같음), >= (크거나 같음), <= (작거나 같음)

  3. 값을 입력한 후 적용하세요.

  4. 다중 조건은 AND 로직을 적용하세요.

테이블 컬럼 설정

테이블 헤더의 컬럼 선택 기능을 통해 표시할 컬럼을 추가/삭제하고, 드래그로 순서를 변경할 수 있습니다.