9.4. 리눅스 파일 시스템 튜닝
이 절에서는 Neo4j의 디스크 입출력(I/O)과 최적화 방법에 대해 설명합니다.
데이터베이스는 데이터 쿼리시 많은 작은 랜덤 읽기(입력)를 생성하며, 변경을 커밋 할 때 순차적 쓰기(출력)는 거의 수행하지 않습니다.
디폴트로, 대부분의 리눅스 배포판에서는 처리량(throughput)과 대기 시간(latency)의 균형을 이루는 CFQ(Completely Fair Queuing) 알고리즘을 사용하여, IO 요청을 스케쥴링 합니다. 데이터베이스의 특정 IO 작업 부하(workload)는 Deadline 스케줄러에서 더 잘 처리합니다. Deadline 스케줄러는 읽기 요청을 선호하며 가능한 빨리 요청을 처리합니다. 즉, 쓰기의 대기 시간이 증가하는 동안, 읽기 대기 시간을 줄여줍니다. 보통 쓰기는 순차적이므로, IO 대기열에서 기다리면, 중복, 혹은 인접 쓰기 요청이 함께 병합됩니다. 이렇게 하면 드라이브로 전송되는 쓰기 횟수를 효과적으로 줄일 수 있습니다.
리눅스의 경우, 드라이브의 IO 스케줄러(이 경우 sda)는 다음과 같이 런타임에 변경할 수 있습니다.
$ echo 'deadline' > /sys/block/sda/queue/scheduler
$ cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
또 다른 권장되는 방법은 파일과 디렉토리 액세스 시간 업데이트를 비활성화하는 것입니다. 이렇게하면 파일 시스템에서 이 메타 데이터를 업데이트하는 쓰기를 수행 할 필요가 없으므로 쓰기 성능이 향상됩니다. 이는 fstab에서noatime, nodiratime
마운트 옵션을 설정하거나 disk mount 명령으로 가능합니다.