-
Database의 파일시스템 EXT4, XFS 비교 (Feat. MongoDB, ScyllaDB)Software Development/Database 2024. 6. 22. 00:00
https://www.mongodb.com/docs/manual/administration/production-notes/#kernel-and-file-systems
위 두개의 링크를 살펴보면, Production 환경에서는 XFS를 사용하는 것을 강하게 권장 또는 필수라고 표현한다.
어떤 이유 때문일까?
MongoDB부터 살펴보자.
위 링크를 보면 WiredTiger Storage Engine을 쓸 때 XFS를 쓰는 것을 추천한다.
그러면 WiredTiger의 어떤 특징 때문에 성능상의 이유로 XFS를 쓰도록 추천하는 것이라 볼 수 있다.
그러면 WiredTiger의 어떤 특징 때문에 XFS를 써야할까?
예전에 MongoDB에서 MMAPv1을 스토리지 엔진으로 썼다. 이때는 collection level의 lock이 쓰기 시에 발생했다.
그리고 WAL과 filesystem cache로 크래시 났을 때 복구했다.
WiredTiger는 MMAPv1보다 훨씬 성능이 좋다. multiple concurrency controls, 압축, B-Tree 기반 등이 특징이다.
그리고 큰 데이터셋에 대해서 여러 CPU 코어를 사용해 Read Write시에 더욱 적합하다고 한다.
MongoDB는 파일 시스템 캐시와 WiredTiger 내부 캐시를 모두 사용한다고 한다.
WiredTiger는 MVCC를 사용하며, Disk에 데이터를 넣을 때, WiredTiger는 snapshot안에 모든 데이터를 넣어놓고, checkpoint는 데이터 파일들의 일관성을 보장하고 마지막 체크포인들을 데이터 파일들에 저장한다.[1]대부분의 워크로드에서 괜찮은 성능을 보이지만, 대량의 쓰기가 발생할 수 있으며, 이때 fdatasync로 데이터를 넣는다.[2]
fdatasync는 동기식 입출력 시스템콜[3]이라 여기서 성능 저하가 발생할 수 있다.
XFS는 XFS는 단일 스레드에 대해 상대적으로 낮은 성능을 제공하고, 많은 CPU 멀티 스레드 병렬 I/O 워크로드에 고성능이라고 한다.[4]
XFS 파일 시스템은 내부적으로 allocation groups으로 partition된다.파일과 디렉터리는 allocation groups을 넘어 확장될 수 있다.
각 allocation group은 자체적으로 inode와 여유 공간을 관리하여, 여러 스레드와 프로세스가 동일한 파일 시스템에서 동시에 I/O 작업을 수행할 수 있도록 확장성과 병렬성을 제공한다.
allocation group이 제공하는 internal partition은 파일 시스템이 여러 물리적 장치를 사용할 때 더 유용하며, storage의 throughput을 최적으로 활용할 수 있게 한다.[5]
이 부분이 ext4와 다른 xfs의 강점이라 할 수 있겠다.
즉, Storage Engine에서 멀티 코어를 사용하고 이에 대한 DISK IO 병목이 발생하는데 이를 XFS를 사용하면, 병렬로 IO에 접근할 수 있기 때문에 멀티 코어의 장점을 최대한 활용할 수 있다는 것이다.
많은 AIO를 지원하는 file system이 나왔지만, 라이센스 문제도 있고 AIO 그 이외의 옵션은 부가적인 것이라 생각하여 굳이 XFS를 대체할 필요는 없기 때문에 XFS가 대세인 것 같다.https://www.scylladb.com/2016/02/09/qualifying-filesystems/
위 글에서는 ScyllaDB가 XFS를 사용해서 AIO로 처리하여 성능 이슈를 해결한 디테일이 설명되어 있다.
[1] https://blog.naver.com/ijoos/221324560518[2] https://groups.google.com/g/mongodb-user/c/diGdooN_2Sw/m/8vvAy_XP2iAJ
[3] https://vallhalla-edition.tistory.com/47[4] https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/9/html/managing_file_systems/the-xfs-file-system_assembly_overview-of-available-file-systems
[5] https://en.wikipedia.org/wiki/XFS'Software Development > Database' 카테고리의 다른 글
[몽고디비] Query Plans (0) 2023.05.09 [MongoDB] createIndex commitQuorum (0) 2023.03.31 [MongoDB] 몽고디비 설치시 최적의 하드웨어 및 OS 설정 (0) 2023.03.12 [MongoDB] 재해복구 시스템을 위한 몽고디비 노드 설정. (0) 2023.03.10 [MongoDB] Compound Index 생성해도 왜 쿼리가 느리지? (0) 2022.05.31