데이터베이스 기술/POSTGRESQL

PostgreSQL성능진단표준가이드

(주)비트나인 2023. 8. 29. 10:48

1. 목적 : Postgresql 기반 DBMS 솔루션의 성능 진단 표준 가이드 제공

OpenSource Postgresql은 출시된지 30년 가까이 되어 지속적으로 Released 되면서 현재 On Premise, Cloud, docker 등 플랫폼 상관없이 다양한 형태의 Postgres 기반 솔루션들이 Product 환경에서 사용되고 있다.

[참조] PostgreSQL derived databases(https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases)

그에 따라 DBMS의 필수 요소인 성능 진단과 튜닝 분야 또한 다양한 방법론 및 솔루션들이 존재한다. 

아래의 내용들은 이를 필요로 하는 DBA 또는 개발자들에게 기본적인 표준 가이드를 제공하고자 한다. 

 

2. 개요

성능 이슈가 발생했을 때 일반적인 성능 개선 방법은 크게 서버 튜닝, 어플리케이션애플리케이션 튜닝, 쿼리 튜닝을 말한다. DBMS는 서버 상에서 실행되는 일종의 애플리케이션이고, 궁극적으로는 데이터베이스에 저장되어 있는 데이터를 질의하는 쿼리를 통해 성능 측정을 하기 때문이다. 실제로도 시스템의 성능 문제의 원인은 하드웨어(CPU, 메모리, 네트워크 등) 자원 부족, DBMS 설계, SQL 비효율 등이 대부분이다. 

   

   

 

결론적으로 최적의 성능 진단을 위해서는 서버, 어플리케이션, 쿼리 관련 데이터를 효율적으로 수집하여 다양한 방법을 통해 분석, 활용할 수 있어야 한다. 

PostgreSQL DB 서버에서는 어떤 방식으로 이를 수행할 수 있는지 살펴보자.

 

3. OS 모니터링

윈도우 또는 리눅스 같은 OS들은 CPU, 메모리, 네트워크, 디스크 등의 상태를 체크하는 다양한 기본 명령어 또는 유틸리티를 제공한다.

전통적으로 유닉스 계열에서는 기본 제공되는 OS 명령어를 Shell Script를 crontab에 등록하여 주기적인 모니터링을 진행했으나, 최근에는 다양한 서버 모니터링 확장 유틸리티들이 존재한다. 

범위 기본 확장  
 
주요 정보 서버 리소스, 프로세스 정보 사용자UI / Repository 제공
(glance / sar )
 
적용 범위 개발/운영 개발/운영  
적용방법 OS 명령어 수행 패키지 매니저 명령어로 설치
(yum / rpm / apt 등)
 
모니터링 방법 1. 명령어 수행을 통한 실시간 확인
2. history 로그 파일 확인
1. 명령어 수행을 통한 실시간 확인
2. history 로그 파일 확인
 
모니터링 최적화 Shell Script(or Python) 활용 -  
통계수집 시작 지점 명령어 수행 시점 명령어 수행 시점  

아래의 표는 리눅스 기준 주요 OS모니터링 Tools이다.

영역 구분 default유무 주요 명령어 설명
User w 기본 w [ username ] 현재 시스템에 로그인한 사용자와 프로세스를 표시
Total vmstat 기본 vmstat [3]
vmstat -m
시스템 작업, 하드웨어 및 시스템 정보. 프로세스, 메모리, 페이징, 블록 IO, 트랩 및 cpu 작업에 관한 정보를 표시
Total top 기본 top linx kernel 통하여 관리되는 프로세스의 태스크 리스트들의 정보인 CPU, MEM, Process 상태정보등을 확인
단축키 : t (요약정보), m (메모리정보), A (시스템 자원 소모 프로세스 정렬), k (kill 명령어 실행)
Total iostat 기본 iostat [-x]
iostat 3
CPU 통계 및 장치, 파티션, 네트워크 파일시스템(NFS)의 입출력 통계를 보고
Total glances 확장 pip install glances
glances
Linux 터미널 인터페이스를 제공하는 성능 모니터링 도구
(python3 버전에서 실행됨)
Total netdata 확장 bash <(curl -Ss https://my-netdata.io/kickstart.sh)
http://192.168.1.11:19999/
리눅스 시스템, 응용 프로그램, SNMP 장치에 대한 성능 모니터링 (초당) 실시간으로 제공하고 절대적를 분석하기 위해 브라우저를 통해 수집 모든 값을 렌더링하여전체 대화 차트를 보여주는 매우 최적화 리눅스 유틸리티
Process ps 기본 ps -ef
ps --AlF (자세한 출력 표시)
ps axjf (프로세스 트리 표시)
현재 프로세스의 상태 표시
Process pmap 확장 pmap -d PID 프로세스의 메모리 지도를 표시한다. 이 명령어를 사용하여 메모리 병목현상의 원인을 찾기 위해 사용
OS uptime 기본 uptime 얼마나 오래 서버가 운영되고 있는지 알기 위해 사용된다. 현재 시스템이 얼마나 운영되고 있는지, 몇 명의 사용자가 로그인하고 있는지 과거 1, 5, 15분 동안의 시스템 평균 부하를 표시
Network netstat 기본 netstat 네트워크 상태 모니터링. 현재 시스템에 연결된 네트워크 상태, 라우팅 테이블, 인터페이스 상태 등을 확인
Memory free 기본 free 메모리 사용량
Disk df 기본 df
df -h
현재 디스크의 전체 용량 및 남은 용량을 확인
Disk du 기본 du -h
du -h --max-depth=1
 
CPU sar 확장 sar -n DEV | more (네트워크 카운터 확인)
sar 4 5 (실시간 사용량 출력)
시스템 활동 수집 및 보고
CPU mpstat 확장 mpstat -P ALL Multiprocessor 사용량

 

4. PostgreSQL 모니터링(Log File 기준)

 

Data Cluster가 기동 되면, DB에서 발생되는 주요 이벤트 정보들이 DB 파라미터에 지정된 디렉터리 안에 파일 형태로 실시간 업데이트된다. DB 성능 진단 및 튜닝에 있어 가장 기본이 되는 수집 데이터로 postgresql.conf 파라미터 옵션에 따라 다양한 정보들을 확인할 수 있다.   

범위 기본 확장  
pg_log log_min_duration_statement auto_explain.log_min_duration  
주요 정보 DB Event 로그/Wal 로그 SQL 내용 및 수행시간 SQL 내용 실행계획  
적용 범위 개발/운영 개발/운영 개발  
적용방법 postgresql.conf 파라미터 적용
logging_collector=on
log_directory='pg_log'
log_filename = 'agensgraph-%Y-%m-%d_%H%M%S.log
postgresql.conf 파라미터 적용
log_min_duration_statement=2s
postgresql.conf 파라미터 적용
auto_explain.log_min_duration=2s
 
모니터링 최적화 csvlog 출력시
DB관리 용이
Shell Script(or Python) 활용 Shell Script(or Python) 활용  
통계수집 시작 지점 DB 기동 활성화 이후 활성화 이후  
off 기능 logging_collector=off log_min_duration_statement=-1   auto_explain.log_min_duration=-1  

 

5. PostgreSQL 모니터링(pg_catalog 기준)

 

모든 DBMS는 기동 이후부터 데이터베이스에서 발생되는 오브젝트의 변동 내역, 트랜잭션 내역, 통계 정보,  메모리/디스크 사용률, SQL 수행 내역 등 가히 모든 데이터들을 수집한다. PostgreSQL도 마찬가지로 pg_catalog라는 시스템 카탈로그 정보를 통해 그 내용들을 확인할 수 있다. 그리고 다양한 extensions들을 통해 그 수집 범위를 더욱 확장시킬 수 있다.

명칭 pg_catalog View pg_stat_statements pg_store_plans
주요 정보 DB / Object 통계
(옵티마이저 실행계획 수립의 근거 데이터가 )
SQL 실행 통계 SQL 실행 계획 통계
적용 범위 개발/운영 개발/운영 개발/운영
적용방법 기본 제공 1) extension 설치
2) shared_preload_libraries 적용
3) create extension
1) tool 설치
2) shared_preload_libraries 적용
모니터링 방법 SQL SQL SQL
통계수집 시작 지점  DB 기동시 pg_stat_statements.save=on 경우, DB 종료되더라도 저장됨. off 지정시 DB재실행시 초기화됨  
수동 데이터 초기화 SELECT pg_stat_reset();
--수행안됨
select pg_stat_statements_reset();  
off 기능 해당안됨 drop extension drop extension
스키마 pg_catalog pg_catalog pg_catalog
주요 View pg_stat_activity
pg_stat_all_indexes
pg_stat_all_tables
pg_stat_archiver
pg_stat_bgwriter
pg_stat_database
pg_stat_database_conflicts
pg_stat_progress_vacuum
pg_stat_replication
pg_stat_ssl
pg_stat_subscription
pg_stat_sys_indexes
pg_stat_sys_tables
pg_stat_user_functions
pg_stat_user_indexes
pg_stat_user_tables
pg_stat_wal_receiver
pg_stat_xact_all_tables
pg_stat_xact_sys_tables
pg_stat_xact_user_functions
pg_stat_xact_user_tables
pg_statio_all_indexes
pg_statio_all_sequences
pg_statio_all_tables
pg_statio_sys_indexes
pg_statio_sys_sequences
pg_statio_sys_tables
pg_statio_user_indexes
pg_statio_user_sequences
pg_statio_user_tables
pg_stat_statements pg_store_plans

 

6. PostgreSQL 모니터링(추가 스키마)

 

Postgresql의 특정 Extensions의 경우, 별도의 스키마를 생성하여 해당 스키마에 성능 진단에 필요한 다양한 오브젝트를 생성하여 시계열 데이터 저장을 지원한다. 대표적으로  pg_statsinfo, pg_awr이 있으며 여기서는 pg_statsinfo에 대해 소개한다. pg_statsinfo는 pg_stats_reporter라는 확장 유틸리티를 통해 UI 및 Report를 제공하는데, 아래 표는 Report에서 제공하는 내용이다.

 

보고서 유형 카테고리 이름 표제 함유량
Summary Summary Database System ID 데이터베이스 클러스터 고유 ID
Host 호스트 이름
Port PostgreSQL 가동 포트 번호
PostgreSQL Version PostgreSQL 버전
Snapshot Begin 보고 기간의 시작 날짜
Snapshot End 보고 기간의 날짜
Snapshot Duration 보고 기간의 간격
Total Database Size 전체 데이터베이스의 크기
Total Commits 전체 데이터베이스의 커밋 트랜잭션
Total Rollbacks 전체 데이터베이스 롤백 트랜잭션
Alert DateTime 스냅 시간
Message 경고 메시지
Database Statistics Database Statistics Database Name 데이터베이스 이름
Database Size 데이터베이스 크기 [MiB]
Database Size Increase 데이터베이스 크기의 분량 [MiB]
Commit/s 초당 커밋 트랜잭션
Rollback/s 초당 롤백 트랜잭션
Cache Hit Ratio 캐시 적중률
Block Read/s (disk+cache) 초당 디스크와 캐시로부터 읽어 들인 블록
Block Read/s (disk) 초당 디스크에서 읽은 블록
Rows Read/s 초당에 테이블 + 인덱스로부터 읽어 들인
Temporary Files 임시 파일의 파일
Temporary Bytes 임시 파일의 파일 크기 [MiB]
Deadlocks 교착 상태의
Block Read Time 데이터 파일을로드하는 걸린 시간 [석사]
Block Write Time 데이터 파일 쓰기에 걸린 시간 [석사]
Transaction Statistics DateTime 스냅 시간
Database 데이터베이스 이름
Commit/s 초당 커밋 트랜잭션
Rollback/s 초당 롤백 트랜잭션
Database Size DateTime 스냅 시간
Database 데이터베이스 이름
Size 데이터베이스 크기 [MiB]
Recovery Conflicts Database 데이터베이스 이름
Conflict Tablespace 테이블 스페이스 삭제와 충돌하여 쿼리 취소
Conflict Lock 경합에 의한 쿼리 취소
Conflict Snapshot VACUUM과의 경쟁에 의한 쿼리 취소

(쿼리가 참조중인 행을 VACUUM 제거 경우
Conflict Bufferpin VACUUM과의 경쟁에 의한 쿼리 취소

(쿼리가 사용중인 페이지를 VACUUM 제거 경우
Conflict Deadlock 교착 상태와 충돌하여 쿼리 취소
Instance Activity WAL Statistics (1) WAL Write Total WAL 출력량 [MiB]
WAL Write Speed 초당 WAL 출력량 평균 [MiB / s]
WAL Archive Total 아카이브에 성공한 WAL 파일의
WAL Archive Failed 아카이브에 실패한 횟수
WAL Statistics (2) DateTime 스냅 시간
Location WAL 기입 위치 (LSN)
Segment File WAL 세그먼트 파일 이름
Write Size WAL 출력량 [MiB]
Write Size/s 초당 WAL 출력량 [MiB / s]
Last Archived WAL 마지막으로 아카이브 WAL 파일 이름
Instance Processes DateTime 스냅 시간
Idle 대기 (명령 대기 상태) 백엔드 프로세스의 비율
Idle In Xact 트랜잭션에서 대기중인 (명령 대기 상태) 백엔드 프로세스의 비율
Waiting 잠금 대기 상태의 백엔드 프로세스의 비율
Running 트랜잭션 실행중인 백엔드 프로세스의 비율
BGWriter Statistics Written Buffers By BGWriter (Average) 백그라운드 라이터가 초당에 보낸 버퍼 수의 평균치
Written Buffers By BGWriter (Maximum) 백그라운드 라이터가 초당에 보낸 버퍼의 최대
Written Buffers By Backend (Average) 백엔드가 초당에 보낸 버퍼 수의 평균치
Written Buffers By Backend (Maximum) 백엔드가 초당에 보낸 버퍼의 최대
Backend Executed fsync (Average) 백엔드가 초당 실행 fsync 평균 개수
Backend Executed fsync (Maximum) 백엔드가 초당 실행 fsync 최대
OS Resource Usage CPU usage + Load Average DateTime 스냅 시간
User 사용자 모드에서 CPU 소비 시간의 비율
System 시스템 모드에서 CPU 소비 시간의 비율
Idle 작업 대기 CPU 소비 시간의 비율
IOwait 입출력의 완료 대기 CPU 소비 시간의 비율
Loadavg1 지난 1 분간의로드 애버리지
Loadavg5 지난 5 분간의 평균 부하
Loadavg15 과거 15 분간의로드 애버리지
IO usage Device 장치 이름
Including TableSpaces 장치에 포함 테이블 공간
Total Read 읽어 들인 크기 [MiB]
Total Write 크기 [MiB]
Total Read Time 읽기에 걸린 시간 [석사]
Total Write Time 쓰기에 걸린 시간 [석사]
Current IO Queue 현재 실시중인 I / O (큐잉 )
Total IO Time 입출력에 걸린 시간 [석사]
IO usage DateTime 스냅 시간
Device 장치 이름
Read Size/s (Peak) 초당에 가져온 크기와 최대 [KiB]
Write Size/s (Peak) 초당에 크기와 최대 [KiB]
Read Time Rate 초당에로드하는 걸린 시간의 비율
Write Time Rate 초당 쓰기에 걸린 시간의 비율
Memory Usage DateTime 스냅 시간
Memfree 사용 가능한 메모리 크기 [MiB]
Buffers 버퍼 캐시 크기 [MiB]
Cached 페이지 캐시에서 버퍼 캐시를 제외한 크기 [MiB]
Swap 스왑 사용량 [MiB]
Dirty 더티 페이지 크기 [MiB]
Disk Usage per Tablespace Tablespace 테이블 공간 이름
Location 테이블 공간 저장 디렉토리 이름
Device 테이블 공간 저장 디렉토리 장치 (디스크) 장치 번호
Used 테이블 공간 저장 디렉토리 장치의 사용 크기 [MiB]
Avail 테이블 공간 저장 디렉토리 장치의 사용 가능한 크기 [MiB]
Remain 테이블 공간 저장 디렉토리의 장치에서 사용 가능한 공간의 비율
Disk Usage per Table Database 데이터베이스 이름
Schema 스키마 이름
Table 테이블 이름
Size 테이블 크기 [MiB]
Table Reads 테이블 블록 추출 요청에서 디스크로부터 읽어 들인 블록
Index Reads 인덱스 블록 추출 요청에서 디스크로부터 읽어 들인 블록
Toast Reads TOAST 테이블의 블록 추출 요청에서 디스크로부터 읽어 들인 블록
Long Transactions PID 트랜잭션 백엔드 프로세스의 PID
Client Address 트랜잭션 백엔드 프로세스의 연결 소스 (클라이언트) 주소
Xact Start 트랜잭션의 시작 날짜
Duration 트랜잭션의 존속 기간 []
Query 트랜잭션의 소개 문장
Notable Tables Heavily Updated Tables Database 데이터베이스 이름
Schema 스키마 이름
Table 테이블 이름
INSERT Rows 테이블에 삽입
UPDATE Rows 테이블에서 업데이트 (HOT 업데이트 포함)
DELETE Rows 테이블에서 삭제
Total Rows 테이블에 삽입 / 업데이트 / 삭제 수의 합계
HOT Ratio(%) 테이블에서 업데이트 HOT 업데이트 행의 비율
Heavily Accessed Tables Database 데이터베이스 이름
Schema 스키마 이름
Table 테이블 이름
Seq Scans 순차적 검사 실행 횟수
Read Rows 순차 검색을 통해 읽은
Read Rows/Scan 순차 검색 1 회당 읽은
Cache Hit Ratio(%) 캐시 적중률
Low Density Tables Database 데이터베이스 이름
Schema 스키마 이름
Table 테이블 이름
Live Tuples 테이블 내의 유효한
Logical Pages 레코드 수가 논리적으로 차지하는 페이지
Physical Pages 레코드 수가 실제로 차지하고있는 페이지
Logical Page Ratio(%) 논리적으로 차지하는 페이지 수의 비율
Fragmented Tables Database 데이터베이스 이름
Schema 스키마 이름
Table 테이블 이름
Column 컬럼 이름
Correlation 물리적 순서와 논리적 순서에 상관
Checkpoint Activity Checkpoint Activity Total Checkpoints 체크 포인트가 실행 횟수
Checkpoints By Time checkpoint_timeout 계기로 실행 체크 포인트의 횟수
Checkpoints By XLOG checkpoint_segments 계기로 실행 체크 포인트의 횟수
Written Buffers Average 보낸 버퍼 크기의 평균치
Written Buffers Maximum 보낸 버퍼의 최대 크기
Write Duration Average 처리 시간의 평균값 []
Write Duration Maximum 처리 시간의 최대 ()
Autovacuum Activity Vacuum Basic Statistics (Average) Table 테이블 이름
Count autovacuum 실행 횟수
Removed Rows 삭제 튜플 수의 평균치
Remain Rows 잔존하는 튜플 수의 평균치
Remain Dead 회수하지 못한 잘못된 튜플 수의 평균치
Index Scans 인덱스 스캔의 실시 횟수의 평균값
Duration 처리 시간의 평균값 []
Duration(Max) 처리 시간의 최대 ()
Cancels autovacuum 취소 횟수
Vacuum I/O Statistics (Average) Table 테이블 이름
Page Hit page_hit 평균
Page Miss page_miss 평균
Page Dirty page_dirty 평균
Read Rate read_rate 평균
Write Rate write_rate 평균
Analyze Statistics Table 테이블 이름
Count autoanalyze 실행 횟수
Duration(Total) 처리 시간의 합계 ()
Duration(Avg) 처리 시간의 평균값 []
Duration(Max) 처리 시간의 최대 ()
Last Analyze Time autoanalyze 마지막 실행
Cancels autoanalyze 취소 횟수
Mod Rows(Max) 마지막 analyze 이후 수정 튜플 수의 최대
Query Activity Functions OID 함수의 OID
Database 데이터베이스 이름
Schema 스키마 이름
Function 함수 이름
Calls 함수가 호출 횟수
Total Time 전체 기능 (함수 내에서 호출 다른 함수를 포함) 누적 소비 시간 [석사]
Self Time 함수 단위의 누적 소비 시간 [석사]
Time/Call 1 함수 실행 소비 시간 [석사]
Statements User 문의 문을 실행 사용자의 이름
Database 문의 문장이 실행 데이터베이스 이름
Calls 문의 문장이 실행 횟수
Total Time 문의 문장의 누적 소비 시간 []
Time/Call 1 질문 문장 실행 소비 시간 []
Block Read Time SQL 문이 블록 읽기에 소요 시간 [석사]
Block Write Time SQL 문이 블록 쓰기에 걸린 시간 [석사]
Query 문의
Plans Query ID SQL 식별자
Plan ID 실행 계획의 식별자
User 문의 문을 실행 사용자의 이름
Database 문의 문장이 실행 데이터베이스 이름
Calls 문의 문장이 실행 횟수
Total Time 문의 문장의 누적 소비 시간 []
Time/Call 1 질문 문장 실행 소비 시간 []
Block Read Time SQL 문이 블록 읽기에 소요되는 시간 [석사]
Block Write Time SQL 문이 블록 쓰기에 지출 시간 [석사]
Lock Conflicts Lock Conflicts Database 잠금 대기가 발생하는 개체가 속한 데이터베이스 이름
Schema 잠금 대기가 발생하는 개체가 속한 스키마 이름
Relation 잠금 대기가 발생하는 개체 이름
Duration 잠금 대기가 발생 경과 시간
Blockee PID 잠금 대기 백엔드 PID
Blocker PID 잠금 원래 백엔드 PID
Blocker GID 잠금 원래 백엔드 GID
Blockee Query 잠금 대기 트랜잭션에서 실행되는 쿼리
Blocker Query 잠금 원래 트랜잭션에서 실행 쿼리 목록
Replication Activity Current Replication Status User Name 아이디
Application Name 응용 프로그램 이름
Client Address 대기의 IP 주소
Client Host 대기의 호스트 이름
Client Port 현재 연결된 포트 번호
Backend Start walsender 시작 시간
WAL Sender State walsender 상태
Current WAL Location WAL 현재의 기입 위치
Sent WAL Location WAL 전송 완료 위치
Write WAL Location 대기의 WAL 쓰기 완료 위치 (LSN WAL 파일 이름)
Flush WAL Location 대기의 WAL 플래시 완료 위치 (LSN WAL 파일 이름)
Replay WAL Location 대기의 WAL REDO 완료 위치 (LSN WAL 파일 이름)
Sync Priority 동기화 복제 우선 순위
Sync State 복제 동기화 모드
Replay Delay Average 마스터 - 대기 간의 복구 지연 량의 평균치
Replay Delay Peak 마스터 - 대기 간의 복구 지연 량의 피크
Write Lag Time 마스터에 WAL 플러시 그것이 대기의 WAL 기록되었다는 통지를받을 때까지의 경과 시간
Flush Lag Time 마스터에 WAL 플러시 그것이 대기의 WAL REDO되었다는 통지를받을 때까지의 경과 시간
Replay Lag Time 마스터에 WAL 플러시 그것이 대기의 WAL 플래시되었다는 통지를받을 때까지의 경과 시간
Setting Parameters Setting Parameters Name 매개 변수 이름
Setting 매개 변수
unit 암시 매개 변수의 단위
Source 현재 매개 변수 값의 소스 (변경 방법)
Schema Information Tables Database 데이터베이스 이름
Schema 스키마 이름
Table 테이블 이름
Columns
Rows 튜플
Size 테이블 크기 [MiB]
Size Incr 테이블 크기의 분량 [MiB]
Table Scans 시퀀셜 스캔이 실행 횟수
Index Scans 인덱스 스캔이 실행 횟수
Indexes Database 데이터베이스 이름
Schema 스키마 이름
Index 인덱스 이름
Table 인덱스가 참조하는 테이블 이름
Size 인덱스 크기 [MiB]
Size Incr 인덱스 크기의 분량 [MiB]
Index Scans 인덱스 스캔의 실행 횟수
Rows/Scan 1 인덱스 스캔 당에서 반환
Disk Reads 디스크로부터 읽어 들인 블록
Cache Reads 캐시로부터 읽어 들인 블록
Index Key 인덱스의 (컬럼 이름 또는 괄호에 둘러싸인 )
Profiles Profiles Processing 처리
Executes 작업을 수행 횟수

 

7. 통합 모니터링 Tools 활용

클라우드 서비스, 도커 및 쿠버네틱스, 마이크로 서비스 아키텍처가 대중화되면서 다양한 인프라 자원들을 통합적으로 모니터링할 수 있는 오픈소스 도구들이 출시 및 프로덕트 환경에서도 활용되어 가고 있다. 그 중 대표적인 도구가 프로메테우스이다. PostgreSQL도 postgres_exporter라는 Agent를 통해 데이터 수집이 가능하다. 프로메테우스에 시계열로 저장되는 데이터를 그라파나 또는 node.js를 통한 UI 개발 등을 통해 시각화하여 모니터링 툴로 활용될 수 있다. 프로메테우스의 Default DB인 TSDB를 PostgreSQL로도 변경할 수 있어, 기존의 pg_catalog 또는 확장 스키마를 통한 데이터 정보들을 프로메테우스로 수집한 정보들과 조인하여 One Query로도 활용 가능하다.  

 

8. 결론

오픈소스 DBMS의 양대산맥은 PosgreSQL과 MySQL이라 할 수 있다. AWS, Azure, GCP 같은 글로벌 클라우드 벤더사에서도 기본적으로 이 DBMS들을 제공하고 있고, 심지어 이를 기반으로 한 완전관리형 자체 DBMS도 개발하여 제공되고 있다. 

국내에서 아직까지는 OLTP 환경에 보다 특화되고, 개발자들이 보다 더 선호하는 MySQL의 점유율이 더 높긴 하나, 클라우드와 데이터 분석 시장 규모가 확장되면서 PostgreSQL에 대한 관심과 활용 빈도가 점점 높아지고 있다.  

PostgreSQL의 최고 장점은 확장성에 있으며, 성능 진단 및 튜닝 분야에 활용할 수 있는 Extensions들도 무척 다양하다. 본문에 소개한 내용들은 일부일 뿐이다. 물론 상용 제품들에 비해 다소 손속이 있을 수 있으나, 우리에게 필요한 건 알지도, 쓰지도 못하는 기능들이 아니라 내가 필요로 하는 기능이 있는지 확인하고 테스트해 보는 것이다.

 

 

 

글 : 최광석 수석보 ( 비트나인 DB Tech팀 )