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;
'Database > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] Table Size 확인 (0) | 2022.10.28 |
---|---|
[PostgreSQL] DB 및 Tablespace Size 확인 (0) | 2022.10.27 |
[PostgreSQL] PostgreSQL 서비스 수동 중지 및 시작 (0) | 2021.02.02 |
[PostgreSQL] Vacuum 이란? (0) | 2020.12.24 |