exemONE PostgreSQL Database 성능 분석 기능 상세 설명
exemONE의 Performance Analysis > Database > PostgreSQL 메뉴에서는 4가지 주요 분석 영역을 제공합니다:
- Performance Analysis (성능 분석) - Trend Analysis, Parameter History
- SQL Analysis (SQL 분석) - Top-N Analysis, Search SQL
- Session Analysis (세션 분석) - Search Session
- DataSpace Analysis (데이터 공간 분석) - Object Size
참고: PostgreSQL 개편 버전에서는 조회 기간이 확대되고, Database Name 컬럼이 추가되는 등 기능이 강화되었습니다. 아래에서는 개편 버전 기준으로 설명합니다.
1. Performance Analysis (성능 분석)
1-1. Trend Analysis (트렌드 분석)
참고 문서: https://app.clickup.com/25540965/v/dc/rbeb5-416338/rbeb5-3168558
날짜별, 시간별 성능 추이 확인이 가능한 화면으로, 특정 시점의 정밀한 성능 분석 기능을 제공합니다.

Search Panel

| 항목 | 내용 |
|---|---|
| Reset | 검색 조건을 초기화합니다. |
| Instance | 인스턴스를 선택합니다. |
| Time | 기간 설정 최대 범위: 90일, 최소 범위: 1일. 2일 이상인 경우 하단 탭 데이터 조회 제한이 있습니다. |
Trend Chart

- Chart: 조회 대상 및 기간에 맞춰 차트를 표시하며, 인디케이터와 날짜/시간 툴팁을 제공합니다.
- Stat Change: 각 차트명 우측 상단 아이콘 클릭으로 표시할 지표를 변경할 수 있습니다.

하단 Grid (9가지 분석 탭)
하단에는 선택된 시간 범위에서 다양한 관점의 장애 원인을 분석할 수 있습니다.
1) Backends

클릭 시점에 수집된 Backend Process 정보를 확인합니다.
| 컬럼 | 설명 |
|---|---|
| PID | Backend Process ID |
| Username | 사용자 이름 |
| Database Name | 데이터베이스 이름 |
| App Name | APP 이름 |
| Client Address | Client 주소 |
| Client Host Name | Client Host 이름 |
| Backend Start | Backend Process 시작 시간 |
| Elapsed Time (sec) | SQL 실행시간 |
| SQL Text | SQL Text |
| Wait Event | 대기한 이벤트 |
| Wait Event Type | 대기 이벤트 유형 |
| State | Backend Process 상태 |
| Xact Start | 트랜잭션 시작 시간 |
| Query Start | Query 시작 시간 |
| State Change | 상태 변경 시간 |
2) Lock Tree

| 컬럼 | 설명 |
|---|---|
| Collect Time | 수집 시간 |
| PID | Backend 프로세스 ID |
| Lock Status | Lock 상태 |
| Holder PID | Holder의 PID |
| User Name | 사용자 이름 |
| Database Name | 데이터베이스 이름 |
| Statement | 수행 쿼리 |
| Elapsed Time (sec) | SQL 실행시간(초) |
| Query Start | 쿼리 시작 시간 |
3) Top SQL

Order By 조건: Calls, Mean Time, Shared Blks Hit, Shared Blks Read, Total Execution Time, Disk Blks Written
| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| SQL ID | SQL ID |
| User Name | 사용자 이름 |
| Database Name | 데이터베이스 이름 |
| Query | 수행 쿼리 |
| Calls | 실행 횟수 |
| Shared Blks Hit | 메모리에서 읽은 총 shared block 수 |
| Shared Blks Read | Disk에서 읽은 총 shared block 수 |
| Disk Blks Written | Disk에 쓴 총 block 수 |
| Mean Time (sec) | 실행에 소요된 평균 시간 |
| Total Execution Time (sec) | 총 수행시간 |
4) Scan Ratio

| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| Database Name | 데이터베이스 이름 |
| Schema Name | 스키마 이름 |
| Object Name | Object 이름 |
| Object Type | Object 유형 |
| Total Size | Object 총 사이즈 |
| Diff Size | 사이즈 변화량 |
| Scan | Full scan 횟수 |
| Scan Ratio | Index scan 대비 full scan 비율 |
5) Top Object

| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| Database Name | 데이터베이스 이름 |
| Object Name | 오브젝트 이름 (클릭 시 디테일 창 연계) |
| Object Type | 오브젝트 타입 (Table, Index) |
| Total Size | 총 사이즈 |
| Diff Size | 사이즈 변화량 |
| Age(Current) | 최근 age |
6) Top Event

| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| Event Name | Event 이름 |
| Count | Event 발생 횟수 |
| Ratio | Event 발생 비율 |
7) Long Active Backends

| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| PID | Backend Process ID |
| User Name | 사용자 이름 |
| Database Name | 데이터베이스 이름 |
| Application Name | Application 이름 |
| Query | SQL Text |
| Elapsed Time (sec) | 총 수행시간 |
| Query Start Time | Query 시작 시간 |
| Query Last Time | Query 마지막 실행 시간 |
8) Application Ratio

| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| Application Name | Application 이름 |
| Count | 해당 application으로 수집된 세션 스냅샷 수 |
| Elapsed Time (sec) | 총 수행시간 |
| Elapsed Ratio | 전체 대비 해당 application 수행시간 비율 |
9) User Ratio

| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| User Name | 사용자 이름 |
| Count | 수집된 세션 스냅샷 수 |
| Elapsed Time (sec) | 총 수행시간 |
| Elapsed Ratio | 전체 대비 해당 user 수행시간 비율 |
10) Alert

| 컬럼 | 설명 |
|---|---|
| Time | 수집 시간 |
| Alert Type | Alert 유형 |
| Alert Name | Alert 이름 |
| Level | Alert Level |
| Value | Alert 값 |
| Description | Alert 설명 |
1-2. Parameter History (파라미터 히스토리)
참고 문서: https://app.clickup.com/25540965/v/dc/rbeb5-416338/rbeb5-3168498
파라미터 조회를 통해 장애 시점과 정상 시점의 파라미터 비교 분석이 가능합니다. 특정 파라미터의 변경 이력 등 상세 히스토리를 확인할 수 있으며, 장애 발생 시 효과적인 분석이 가능합니다.

Search Panel

| 항목 | 내용 |
|---|---|
| Reset | 검색 조건 초기화 |
| Instance | 인스턴스 선택 |
| Base Date | 기준 날짜 선택 (Today 버튼 제공). 선택한 날짜 기준 마지막 시점의 값을 표시 |
| Compare Date | 비교 날짜 선택 (Yesterday 버튼 제공). Base Date와 동일 날짜 선택 불가 |
| Filters | Parameter Name (대소문자 구분 없음, 일부 일치 검색), Different (True/False 체크박스) |
Parameter List

Base Date와 Compare Date의 파라미터를 비교했을 때 변경된 파라미터는 파란색(True)으로 표시하여 상단에 출력합니다.
| 컬럼 | 설명 |
|---|---|
| Parameter Name | Parameter 명 (클릭 시 Parameter Detail Slide 오픈) |
| Base Date | 기준 날짜 값 |
| Compare Date | 비교 날짜 값 |
| Different | 값 차이 여부 (False: 변동 없음, True: 변경 됨) |
2. SQL Analysis (SQL 분석)
2-1. Top-N Analysis (Top-N 분석)
참고 문서: https://app.clickup.com/25540965/v/dc/rbeb5-416338/rbeb5-3168538
Stacked Area Chart를 활용하여 특정 기간 동안의 Top SQL을 조회하는 기능을 제공합니다.

Search Panel

| 항목 | 내용 |
|---|---|
| Instance | 인스턴스 선택 |
| Time | 최대 범위: 31일, 최소 범위: 30분 |
| Group By | Query ID (Default), User, Database |
| Order By | Total Time (Default), Shared Blks Hit, Call, Shared Blks Read, Temp Read, Disk Blks Written |
| Top | 최소 1, 최대 300 |
Chart

마우스 오버 시 툴팁과 인디케이터를 보여줍니다.
Top SQL Grid

| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| Database Name | 데이터베이스 이름 |
| User Name | 쿼리를 실행한 사용자 이름 |
| SQL ID | SQL ID (클릭 시 SQL Detail Slide 오픈) |
| Query | 쿼리 텍스트 |
| Calls | 실행 횟수 변화량 |
| Shared Blks Hit | shared block 캐시 hit 수 변화량 |
| Shared Blks Hit (Avg) | shared block 캐시 hit 수 평균 변화량 |
| Shared Blks Read | 읽은 총 shared block 수 변화량 |
| Shared Blks Read (Avg) | 읽은 총 shared block 수 평균 변화량 |
| Temp Read | 임시 테이블/파일 수 변화량 |
| Temp Read (Avg) | 임시 테이블/파일 수 평균 변화량 |
| Disk Blks Written | 쓴 disk block 수 변화량 |
| Total Time (sec) | 총 소요 시간 |
| Mean Time (sec) | 평균 소요 시간 |
| Max Time (sec) | 최대 소요 시간 |
| Max Time Delta | 최대 시간 변화량 |
| Ratio (%) | 총 시간 비율 |
Top-5 User (Group By=User 시)

사용자별 Calls, Shared Blks Hit, Shared Blks Read, Temp Read, Total Time, Disk Blks Written 및 각 비율(%)을 제공합니다.
Top Database (Group By=Database 시)

데이터베이스별 동일한 지표와 비율(%)을 제공합니다.
2-2. Search SQL (SQL 검색)
참고 문서: https://app.clickup.com/25540965/v/dc/rbeb5-416338/rbeb5-3168578
데이터베이스에서 특정 SQL의 통계정보와 과거 수행 이력 등을 확인하는 화면입니다.

Search Panel

| 항목 | 내용 |
|---|---|
| Instance | 인스턴스 선택 |
| Time | 최대 범위: 12일, 최소 범위: 30분 |
| Filters | Database Name (일부 일치), SQL ID (전체 일치), Query ID (전체 일치), SQL Text (일부 일치) |
Search SQL List

- Total Time 기준 Top-1 SQL이 자동 선택
- 우측 상단 토글 버튼으로 합계/평균 전환 가능
| 컬럼 | 설명 |
|---|---|
| No | 순번 |
| User Name | 사용자 이름 |
| Database Name | 데이터베이스 이름 |
| SQL ID(Query ID) | Query ID |
| SQL Text | SQL Text |
| Calls | 총 실행 횟수 |
| Total Time (sec) | 총 수행시간 |
| Shared Blocks Hit (cache hit) | 메모리에서 읽은 총 shared block 수 |
| Local Blocks Hit (cache hit) | 메모리에서 읽은 총 temp table/index block 수 |
| Shared Blocks Read (disk read) | Disk에서 읽은 총 shared block 수 |
| Local Blocks Read (disk read) | Disk에서 읽은 총 temp Table/Index block 수 |
| Temp Blocks Read (disk read) | Disk에서 읽은 총 temp block 수 |
| Shared Blocks Written (disk written) | Disk에 쓴 총 shared block 수 |
| Local Blocks Written (disk written) | Disk에 쓴 총 temp table/index block 수 |
| Temp Blocks Written (disk written) | Disk에 쓴 총 temp block 수 |
| Rows | 출력 또는 영향 받은 row 수 |
| Block Read Time (sec) | Block 읽기 총 시간 |
| Block Write Time (sec) | Block 쓰기 총 시간 |
| Max Execution Time | 최대 실행 시간 |
| Min Execution Time | 최소 실행 시간 |
Trend

선택한 SQL의 3가지 주요 지표를 차트 형태로 제공합니다:
- Time: SQL의 Time 추이
- Blocks: SQL의 Blocks 추이
- Calls: SQL의 Calls 추이
History

SQL의 시간별 History를 Grid 형태로 제공하며, Calls, Total Time, Shared/Local/Temp Blocks Hit/Read/Written, Rows, Block Read/Write Time, Max/Min Execution Time을 시간별로 확인합니다.
Full Text

- Formatting: 텍스트 서식 정렬
- Copy: SQL 전체 텍스트 복사
Plan

| 컬럼 | 설명 |
|---|---|
| # | 단위 SELECT 쿼리별 식별자 값 |
| Query Plan | 통계정보 기반 옵티마이저가 수립하는 작업 절차 |
3. Session Analysis (세션 분석)
3-1. Search Session (세션 검색)
참고 문서: https://app.clickup.com/25540965/v/dc/rbeb5-416338/rbeb5-3168478
조건 입력을 통해 사용자가 원하는 세션 값을 제공하며, 5초 단위로 세션 정보를 필터링하여 특정 시점의 세션 성능 문제를 분석하는 화면입니다.

Search Panel

| 항목 | 내용 |
|---|---|
| Instance | 인스턴스 선택 |
| Time | 최대 범위: 1일, 최소 범위: 1초 (Yesterday, Today 버튼 제공) |
| Filters | PID, User Name, Database Name, App Name, Client Address, SQL Text, Wait Event, Wait Event Type, Query Start |
Search Session Grid
| 컬럼 | 설명 |
|---|---|
| Time | Backend Session 수집 시간 |
| PID | Backend Process ID |
| User Name | 사용자 이름 |
| Database Name | 데이터베이스 이름 |
| App Name | APP 이름 |
| Client Address | Client 주소 |
| Client Host Name | Client Host 이름 |
| Backend Start | Backend Process 시작 시간 |
| SQL ID(Query ID) | SQL ID (클릭 시 SQL Detail Slide 오픈) |
| Elapsed Time (sec) | SQL 실행시간 |
| SQL Text | SQL Text |
| Wait Event | 대기한 이벤트 |
| Wait Event Type | 대기 이벤트 유형 |
| State | Backend Process 상태 |
| Xact Start | 트랜잭션 시작 시간 |
| Query Start | Query 시작 시간 |
| State Change | 상태 변경 시간 |
4. DataSpace Analysis (데이터 공간 분석)
4-1. Object Size (오브젝트 사이즈)
참고 문서: https://app.clickup.com/25540965/v/dc/rbeb5-416338/rbeb5-3168518
데이터베이스, 오브젝트에 대한 사용량을 확인하고 특정 날짜에 대해서 비교 분석이 가능합니다.

Search Panel

| 항목 | 내용 |
|---|---|
| Instance | 인스턴스와 오브젝트 선택. Object Name을 All 선택 시 Database 탭만 표시, 개별 선택 시 Database/Object 탭 모두 표시 |
| Time | 최대 범위: 32일, 최소 범위: 1일 (Last Month, Last Week, Yesterday, Today 버튼 제공) |
Database Size Trend

- 일자별로 Database/Object의 사용량(Used Size) 및 여유 공간(Free Size) 추이를 제공
- 1일 이하: Start Time / End Time 표시
- 2일 이상: Start Date / End Date 표시
- 마우스 오버 시 툴팁과 인디케이터 표시

Database Size Info

| 컬럼 | 설명 |
|---|---|
| Database Name | 데이터베이스 이름 |
| Start Time Size | 조회 기간 처음 일자의 Database Size |
| End Time Size | 조회 기간 마지막 일자의 Database Size |
| Diff Size | Size 변화량 (End Size - Start Size) |
Top-30 Object

정렬 기준 (라디오 버튼): Start All Size, End All Size, Diff All Size
| 컬럼 | 설명 |
|---|---|
| Rank | 순위 |
| Database Name | 데이터베이스 이름 |
| Object Name | Object 이름 (클릭 시 Object Detail Slide 오픈) |
| All Size | Object 총 Size |
| Data Size | Object Data Size |
| Index Size | Object Index Size |
Object Detail Slide

Object Detail Slide에서 확인 가능한 오브젝트 Value 항목:
- Age(Current) (default), Dead Tuples(Current), Dead Tuple Ratio(Current), Dead Tuples Size(Current), Live Tuples(Current)
- Insert Tuples, Update Tuples, Delete Tuples
- Table Size(Current), Index Size(Current)
- Table Scan Count, Index Scan Count, Table Scan Count Ratio
- Changed Tuples Since Last Analyze(Current), Tuples Hot Updated
- Table Blocks Fetched, Index Blocks Fetched, Table Blocks Hit, Index Blocks Hit
- Table Tuples Read, Index Tuples Read, Table Tuples Fetched, Index Tuples Fetched
- Object History: 오브젝트 데이터를 1시간 간격으로 표시
기능별 조회 기간 요약
| 분석 기능 | 최대 조회 기간 | 최소 조회 기간 |
|---|---|---|
| Trend Analysis | 90일 | 1일 |
| Parameter History | 날짜 비교 방식 | 날짜 비교 방식 |
| Top-N Analysis | 31일 | 30분 |
| Search SQL | 12일 | 30분 |
| Search Session | 1일 | 1초 |
| Object Size | 32일 | 1일 |
주의사항 및 참고
- PostgreSQL 성능 분석을 사용하기 위해서는 사전에 DB Agent 설치 및 PostgreSQL 인스턴스 등록이 필요합니다.
- Top SQL 관련 기능은 PostgreSQL의 pg_stat_statements 확장이 활성화되어 있어야 정상적으로 데이터가 수집됩니다.
- 개편 버전에서는 기존 버전 대비 Database Name 컬럼이 추가되어 다중 데이터베이스 환경에서의 분석이 용이해졌으며, 조회 기간이 확대(Trend Analysis: 2일 → 90일, Search SQL: 32일 → 12일(최적화), Top-N: 32일 → 31일)되었습니다.
- Group By 조건에 Database가 추가되어 데이터베이스별 SQL 분석이 가능합니다.