*EnterpriseDB(EDB)**의 IO: BufFileWrite 대기 이벤트는 Oracle과 마찬가지로 임시 데이터를 디스크에 기록하는 작업과 관련이 있습니다. 이는 PostgreSQL 기반의 EDB에서도 발생할 수 있으며, 일반적으로 아래와 같은 상황에서 나타납니다:
1. 임시 데이터 작업
IO: BufFileWrite는 정렬(Sort), 해시(Hash Join), 집계(Aggregation) 같은 작업 중 메모리(Oracle의 PGA)에 할당된 공간을 초과할 경우, 데이터를 디스크의 임시 파일로 기록할 때 발생합니다.
임시 디렉토리에 생성되는 파일에 데이터를 쓰는 동안 I/O 대기가 발생합니다.
2. 메모리 부족
EDB에서 작업을 수행할 때 메모리가 부족하면 작업이 디스크 기반으로 전환되며, BufFileWrite가 발생합니다.
관련 메모리 파라미터:
work_mem: 한 작업에서 사용할 수 있는 메모리 크기. 초과 시 디스크를 사용.
temp_buffers: 임시 테이블 작업 시 사용하는 메모리 크기.
3. 임시 테이블 사용
temp_tablespaces를 고성능 디스크(예: SSD)로 이동하여 I/O 성능을 향상:
ALTER DATABASE mydb SET temp_tablespaces = 'fast_temp';
4. 디스크 I/O 병목
임시 파일을 기록하는 디스크의 성능이 낮거나, 디스크 I/O에 병목이 발생하면 BufFileWrite 대기가 증가합니다.
해결 방법
IO: BufFileWrite 이벤트를 줄이기 위해 아래 조치를 고려할 수 있습니다.
- 아래 -
1. 메모리 설정 조정
work_mem을 늘려 메모리에서 처리가 가능하도록 설정:
SET work_mem = '64MB'; -- 기본값보다 높게 설정
시스템 전체 설정: PostgreSQL/EDB 설정 파일(postgresql.conf)에서:
work_mem = '64MB'
temp_buffers = '16MB'
2. 쿼리 최적화
대량의 정렬, 해시 조인 등을 수행하는 쿼리를 최적화하여 메모리 사용량을 줄입니다.
인덱스 추가: 정렬이나 검색을 효율적으로 수행하기 위해 적절한 인덱스를 생성.
3. 임시 파일 디스크 성능 개선
temp_tablespaces를 고성능 디스크(예: SSD)로 이동하여 I/O 성능을 향상:
ALTER DATABASE mydb SET temp_tablespaces = 'fast_temp';
디스크를 여러 개로 분산하여 병목을 줄입니다.
4. 병렬 쿼리 활용
대규모 작업에서 병렬 쿼리를 활용하여 여러 프로세스에 부하를 분산:
SET parallel_setup_cost = 1000;
SET parallel_tuple_cost = 0.1;
5. 디스크 I/O 상태 점검
디스크 I/O 성능을 모니터링하고 병목이 있는지 확인:
iostat -x 1
'DBMS > Open Source DB' 카테고리의 다른 글
PostgreSQL DB Lock 발생시 조치 방법 (0) | 2024.10.15 |
---|---|
PostgreSQL DB 다양한 스크립트 모음 (0) | 2024.08.22 |
MySQL Workbench dbmysqlquery.resultfieldstring Client Connetion 세션 정보 오류 (0) | 2024.08.22 |
PostgreSQL 16.2 설치 수동 설치 (2) | 2024.04.18 |
MariaDB 수동 설치 하기 (0) | 2020.05.08 |