Database/PostgreSQL

[PostgreSQL] Database I/O 통계 정보 모니터링

요체크다 2024. 11. 22. 00:57
반응형

PostgreSQL에서는 pg_stat_database 이라고 하는 View 테이블을 통해 각 Database의 통계 정보를 제공합니다.

 

이를 통해 Database 수준의 I/O 활동과 성능 메트릭을 모니터링할 수 있습니다. Database 전체의 전반적인 상태를 파악하는 데 유용하며, 성능 튜닝 및 모니터링에 자주 사용됩니다.

 

1. 주요 컬럼 정보

컬럼명 설 명 참 조
datid Database 의 OID(고유 식별자).  
datname Database 이름.  
numbackends 현재 Database 에 연결된 백엔드(Client 연결) 수. 이 값이 높으면 해당 Database 에 지나치게 많은 연결이 이루어지고 있다는 것을 의미합니다. 높은 연결 수는 성능 저하를 일으킬 수 있습니다.
xact_commit Database에서 커밋된 트랜잭션의 총 수. 트랜잭션의 성공적인 커밋 수를 모니터링하며, 갑작스럽게 커밋 수가 감소하면 트랜잭션 실패가 발생했을 가능성이 있습니다.
xact_rollback Database에서 롤백된 트랜잭션의 총 수. 롤백이 많은 경우 Application 에서 오류가 발생하거나 데이터베이스 상태가 비정상일 수 있으므로 모니터링이 필요합니다.
blks_read 디스크에서 읽은 블록 수. 디스크에서 데이터를 읽는 데 시간이 많이 걸리면 성능 문제가 있을 수 있습니다. 캐시 효율성을 확인하려면 blks_hit와 비교해야 합니다.
blks_hit 공유 버퍼에서 캐시된 블록의 총 수. Shared Buffer Memory 에서 히트된 블록의 수(이 값이 높을 수록 성능이 좋음을 의미), 캐시에서 데이터를 읽으면 디스크 I/O가 줄어듭니다. blks_read와 함께 확인하여 캐시 성능을 평가합니다. 
tup_returned Select 로 반환된 총 튜플 수.  
tup_fetched Select 로 읽힌 튜플 수.
(index 를 통해 가져온 튜플 포함).
 
tup_inserted INSERT된 총 튜플 수.  
tup_updated UPDATE된 총 튜플 수.  
tup_deleted DELETE된 총 튜플 수.  
conflicts Hot Standby에서 발생한 충돌 수.  
temp_files 데이터베이스에서 생성된 임시 파일의 총 개수.  
temp_bytes 임시 파일에 기록된 총 데이터 크기(Byte 단위).  
deadlocks 데이터베이스에서 발생한 데드락 수.  
blk_read_time 디스크에서 블록을 읽는 데 소요된 총 시간.
(밀리초 단위). 
Default 는 비활성화.
 - track_io_timing 설정 필요.
blk_write_time 디스크에 블록을 쓰는 데 소요된 총 시간.
(밀리초 단위). 
stats_reset 통계 정보가 마지막으로 리셋된 시각.  

 

2. 활용 예시

1) 캐시 히트율 계산. (Shared_Buffer Ratio%)

 ㆍ일반적으로 99% 이상이 좋은 상태이며, 낮은 경우에는 Shared-Buffers 크기를 늘리거나 쿼리를 최적화해야 할 수 있습니다.

SELECT
datname,
blks_hit,
blks_read,
ROUND((blks_hit * 100.0 / GREATEST(blks_hit + blks_read, 1)), 2) AS cache_hit_ratio
FROM pg_stat_database;

 

 

2) 트랜젝션 활동 체크 (Commit Ratio%)

 트랜잭션 커밋 및 롤백 비율을 계산하여 데이터베이스의 안정성을 체크합니다. 일반적으로 99% 이상이 좋은 상태입니다.

 낮은 커밋 비율은 롤백이 빈번하게 발생하는 것을 의미하기 때문에 추가적인 분석(ex, 리소스 부족, 데이터 무결성 문제 등)이 필요합니다.

SELECT
datname,
xact_commit,
xact_rollback,
ROUND((xact_commit * 100.0 / GREATEST(xact_commit + xact_rollback, 1)), 2) AS commit_ratio
FROM pg_stat_database;

 

 

반응형