DEV/OS

Possibilities of Performance Bottlenecks for Storage (feat. RocksDB)

행운개발자 2025. 4. 12. 23:46
728x90

File Storage와 Object Storage를 조금이나마 사용해보면서 Storage의 성능 측정을 어떤 기준으로 해야하는지 불명확하게 알고 있었다. 우연히 접한 RocksDB의 Possibilities of Performance Bottlenecks에서 관련된 내용을 발견해서 정리해본다.

System Metrics

들어가기에 앞서.. Write는 Bandwidth, READ는 IOPs로 구분해서 접근하는 것부터 신선하다..!

  • Disk Write Bandwidth : SSD drive가 허용하는 것 이상으로 write를 시도할 수 있다. 이 때에는 주로 compaction에서 문제가 발생한 것일 수 있다. 무리한 write는 read까지 느리게 만들 수 있다. write가 read까지 영향을 줄 수 있는 것은 LSM-tree 구조가 뒤틀려서 하나의 read에서 너무 많은 file을 열어야할 수도 있기 때문이다.
  • Disk Read IOPs : 일반적으로 sustaining read IOPs는 H/W spec에서 제공하는 것보다 더 작게 보아야 한다. 일반적으로 fio와 같은 툴을 사용해서 사용자 입장에서 얼마만큼의 read IOPs가 필요한지 파악해야 한다. IOPs 지표가 충분한 상황인 경우에도 성능이 나오지 않으면 압축 설정을 확인해야 한다. 그리고 block cache hit rate를 개선해봐야 한다. 일반적으로 이 문제는 reading index, filter, large data block 때문이고 각각에 대해서 처리하는 방법이 있다.
  • CPU : 일반적으로 read는 read path(key 구조) 때문에 발생하지만 LST-tree의 compactions, data compression, bloom filter, block size 등 때문에도 발생할 수 있다.
  • Space : 디스크 저장 공간은 기술적으로 성능상의 병목이 되지는 않는다. 하지만 디스크의 부족으로 정상적인 시스템 메트릭에 영향을 받아서 메트릭 지표가 나쁘게 나올 수 있다. 이 경우는 bottelnecked by space라고 부른다.

Amplification factors

amplification factors에는 3가지가 있다. 상황에 따라서 어떤 factor를 개선해야하는지는 명확할 수도 있고 그렇지 않을 수도 있다.

write amplification

  • the ratio of bytes written to storage versus bytes written to the database.

DB에 10 MB/s로 데이터를 write하고 있는데, 30 MB/s disk write rate를 관측하고 있다면 write amplification은 3이다. 이 값이 높으면 disk throughput에 의해서 병목현상이 생긴다. 예를 들어서 write amplification 값이 50이고 max disk throughput이 500 MB/s라면 DB에는 10 MB/2로만 데이터를 write 할 수 있다.

언뜻 생각하면 write amplification가 1보다 클 수 있는 것이 잘 상상이 안된다. 이 부분은 Storage가 data를 write하는 구조를 알 때 좀 더 명확해진다. 하나의 데이터를 write할 때 disk에 바로 write되지 않는 LSM Tree의 구조 때문에 발생한다. LSM Tree를 좀 더 공부해보자.

read amplification

  • the number of disk reads per query

만약 하나의 읽기 요청에서 5개의 Page를 조회해야한다면 read amplification는 5이다. Logical Read는 RocksDB block cache 또는 OS filesystem cache에서 조회하는 경우를 의미이다. Physical read는 storage device에 의해서 처리되는 경우를 말합니다. Logical Read가 Physical read보다 저렴하며, iostat에서는 physical read rate를 확인할 수 있다.

space amplification

  • the ratio of the size of database files on disk to data size

데이터베이스에 10MB를 저장했는대 disk에는 100 MB가 차지한다면 space amplification는 10이다. space amplification가 높으면 저장 공간이 꽉차지 않도록 더욱 주의해야 한다.

728x90