File I/O란?

File I/O는 PostgreSQL이 데이터를 디스크에 읽고 쓰는 모든 작업을 의미합니다. PostgreSQL은 디스크 저장소를 이용해 데이터를 물리적으로 저장하고, 필요 시 이를 읽고 쓰는 작업을 통해 데이터베이스를 운영합니다.

  • 디스크 I/O 성능은 전체 DB 성능에 큰 영향을 미침
  • I/O 병목이 발생하면 성능 저하를 일으킬 수 있음
  • 디스크 사용 패턴을 분석하여 최적화 가능

PostgreSQL의 File I/O 통계 모니터링

PostgreSQL에서는 디스크의 파일 읽기/쓰기 작업에 대한 통계를 pg_stat_bgwriterpg_stat_file 뷰를 통해 제공합니다.

pg_stat_bgwriter

pg_stat_bgwriter는 PostgreSQL의 백그라운드 프로세스인 bgwriter의 파일 I/O 작업 통계를 제공합니다.

SELECT * FROM pg_stat_bgwriter;
컬럼명설명
buffers_written디스크에 기록된 버퍼의 수
buffers_alloc할당된 버퍼의 수
maxwritten_clean최대값을 기록한 clean 버퍼의 수
buffers_backend백엔드 프로세스에서 기록한 버퍼 수
buffers_backend_fsync백엔드 프로세스에서 fsync를 호출한 횟수
  • buffers_written: 백그라운드 프로세스가 디스크에 기록한 버퍼의 수
  • buffers_alloc: 버퍼가 할당된 횟수
  • buffers_backend: 클라이언트 쿼리에서 발생한 I/O를 보여주는 지표

pg_stat_file

pg_stat_file은 특정 파일의 상태 및 I/O 정보를 확인하는 데 사용됩니다.

SELECT * FROM pg_stat_file('data/pg_stat_statements');
컬럼명설명
file_name파일의 경로
size파일 크기 (바이트)
last_modified마지막 수정 시간
last_accessed마지막 접근 시간

File I/O 통계 예시 쿼리

  1. 전체 File I/O 통계
SELECT
  SUM(buffers_written) AS total_buffers_written,
  SUM(buffers_alloc) AS total_buffers_alloc,
  SUM(buffers_backend) AS total_buffers_backend
FROM pg_stat_bgwriter;

전체 I/O 통계에서 가장 중요한 디스크에 기록된 버퍼백엔드에서 발생한 I/O를 모니터링.

  1. 특정 파일의 I/O 통계
SELECT
  file_name,
  size,
  last_modified,
  last_accessed
FROM pg_stat_file('data/base/16384/16385');

특정 테이블의 파일(예: base/16384/16385)에 대한 파일 크기, 수정 시각, 접근 시각 등을 확인할 수 있습니다.


File I/O 성능 최적화 팁

상황최적화 방법
디스크 I/O가 병목- shared_buffers 크기 조정- effective_cache_size 최적화- random_page_cost, seq_page_cost 값 조정
I/O 스레드 과부하- 데이터 파일을 다른 디스크나 tablespace로 분산- bgwriter_lru_maxpages, bgwriter_delay 값 조정
WAL 디스크 사용- wal_levelminimal로 조정- archive_mode 비활성화
특정 테이블만 I/O 집중- 테이블을 별도의 tablespace로 분리하여 디스크 부하 분산

PostgreSQL에서 I/O 모니터링 도구

  • pg_stat_bgwriter: 백그라운드 I/O 활동 모니터링
  • pg_stat_file: 파일별 상태 모니터링
  • iostat: OS 수준에서 디스크 I/O 성능 모니터링
  • pgBadger: PostgreSQL 로그를 분석하여 쿼리 성능과 I/O 통계를 시각화

File I/O와 WAL 통계

WAL(Write Ahead Log)은 데이터베이스의 모든 변경 사항을 먼저 기록하는 로그로, 디스크에 직접 쓰기 작업을 자주 발생시킵니다. WAL 관련 통계도 파일 I/O 성능에 영향을 미칩니다.

SELECT
  wal_records,
  wal_fpi,
  wal_buffers,
  max_wal_size
FROM pg_stat_wal;
  • wal_records: WAL에 기록된 레코드 수
  • wal_fpi: WAL에서 파일 페이지 이미지를 기록한 횟수
  • wal_buffers: WAL 버퍼에서 기록된 바이트 수

profile
안녕하세요. 엔텔스 TarzanDB 공식계정입니다.

0개의 댓글