ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오라클을 위한 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 설정)

     

     

    댓글

Designed by Tistory.