-
오라클을 위한 I/O 성능 개선스토리지 지식 2021. 1. 16. 22:19
Direct I/O와 Async I/O
이 글 직전에 "캐싱 (Caching)은 무조건 성능이 좋다?" (performance.tistory.com/39 참조)에서 언급한 바와 같이, DB (Oracle)가 파일 시스템 (File system)을 사용할 때는, 파일 시스템이 제공하는 버퍼 캐시를 거치지 않는 Direct I/O를 사용하는 것이 성능상 유리하다. 또한, Sync보다는 Async I/O 시 성능이 개선된다.
특히, Async I/O는 datafile의 I/O 성능에 좋으며, Direct I/O는 Log writer (LGWR) 성능에 아주 유용하다. Direct I/O 설정을 위해서는 파일 시스템 마운트 시 OS별 마운트 옵션을 추가함으로써 가능하다.
오라클에서는 Direct I/O를 사용하기 위해 filesystemio_options 파라미터를 "directIO" 또는 "setall"로 설정한다. Async I/O를 함께 사용하기 위해서는 setall을 권장한다.
disk_asynch_io 파라미터는 "true"로 설정한다.
disk_asynch_io는 AIX와 Solaris 운영체제에서는 "true"이나, HP-UX에서는 "false"로 설정한다. 왜냐하면, AIX와 Solaris는 기본적으로 Async I/O로 동작하지만, HP-UX는 디폴트가 Sync I/O로 동작하기 때문이다. 그래서 Raw device를 사용하지 않는 한 Async를 권고하지 않는다. HP-UX 파일 시스템에서 Async를 사용할 경우에는, H/W 장애 발생 시 파일 시스템이 깨질 가능성이 높다. (Oracle raw device 제외)
HP-UX에서 Direct I/O를 통해 오라클의 성능을 향상하기 위해서는, 아래의 옵션을 /etc/fstab에 추가하여 마운트 하거나, mount 명령어로 파일 시스템을 마운트 하면 된다. (하기 옵션을 사용하기 위해서는 Online JFS 및 라이선스가 설치되어 있어야 함)
# mount -o mincache=direct,convsync=direct
- mincache=direct : Read 시 버퍼 캐시를 우회함
- convsync=direct : DBWR을 위한 Direct I/O 적용
참고로, 특정 프로세스(e.g. Oracle)가 Direct I/O (O_DSYNC)로 동작하는지 여부를 확인하기 위해 아래의 명령어를 사용할 수 있다.
# lsof +fg | grep db_file_directory | grep -v DSYN→ DIO 없이 사용되는 Oracle process 찾기
정리
- Oracle은 Direct I/O와 Async I/O 사용을 권장
- Direct I/O는 LGWR 성능에 아주 유용하고, Async I/O는 datafiles I/O 성능에 좋음
- 파일 시스템 마운트 시 OS별 Direct I/O 지원하는 방식 확인 (특정 마운트 옵션 필요)
- Direct I/O 및 Async I/O 사용을 위해 filesystemio_options = setall 설정
- disk_asynch_io = true 설정 (단, HP-UX는 false, Raw device 사용 시 async 설정)
'스토리지 지식' 카테고리의 다른 글
vSAN 캐시 사이징 가이드의 진실 (6) 2021.01.18 DAS (Direct Attached Storage)를 원하는 이유 (0) 2021.01.17 멀티 볼륨 활용을 통한 성능 개선 (0) 2021.01.10 스토리지 포트 수와 성능의 관계 (1) 2021.01.05 가용성 다운타임 계산법 (e.g. 6x9s) (0) 2020.12.30