실제로 ycsb 를 이용하여 MongoDB 에서 성능 측정을 하는 실전 예제를 설명한다.

 

ycsb MongoDB 공식 문서를 적극 참고한다.

 

ycsb 설치 방법은 여기를 참고한다.

 

MongoDB 를 설치하는 방법은 여기서 다루지 않는다.

 

 

 

 

 

< 운영 환경 >

 

os는 ubuntu 16.04 에서 진행하였다.

 

이 포스트에서 사용하는 MongoDB router server 의 url 은 "mongodb://cw-mongo-router:27017" 이다.

 

이 url 은 MongoDB 가 설치되어있는 환경에 따라 달라지게 된다.

 

가령 local 에 설치했다면 "mongodb://localhost:27017"(혹은 mongodb://127.0.0.1:27017) 등이 될 것이고,

 

만약 MongoDB router server ip가 10.0.0.3이고 port number를 9876로 설정했다면, url 은 "mongodb://10.0.0.3:9876" 이 될 것이다.

 

 

 

 

 

 

 

< 실전 예제를 어떻게 진행할 예정인지 >

 

 

구체적인 ycsb 사용법은 여기를 참고한다.

 

아래 정해둔 단계대로 실전 예제를 진행한다.

 

  1. workload 선택
  2. MongoDB 에 데이터를 load
  3. 1번에서 선택한 workload 를 실행

 

 

 

 

 

 

 

< workload 선택 >

 

나는 순수 100% read test 를 하고 싶다.

 

그래서 나는 workload c 를 선택하였다.

 

vi ./workloads/workloadc 명령어로 내용을 보면 알겠지만, read proportion 이 1로 지정되어 있다.

 

 

이 proportion 값을 어떻게 정해주느냐에 따라 workload 에서 read 를 몇 % 할지, update 를 몇 % 할지.. 등이 정해지는 것 같다.

 

실례로, read 와 write 를 50:50 으로 실행하는 workload a 를 뜯어보면 다음과 같이 지정되어 있다.

 

 

이로 미뤄보아 이 값만 바꿔주면 내가 원하는 대로 돌아갈 수 있도록 workload 를 직접 수정 가능한 것 같다.

 

 

 

 

 

 

 

< MongoDB에 data를 load >

 

MongoDB는 사전에 url 로 연결할 수 있는 상태이기만 한다면, 별다른 준비 절차가 필요하지 않다.

 

아래 load 명령어로 workload c에 맞는 data를 넣는다.

 

( 참고로 ycsb MongoDB 공식 문서를 보면 asynchronous driver 의 경우 "mongodb-async", synchronous driver 의 경우 "mongodb" 명령어를 사용하라고 되어있는데, 무슨 차이인지 아직 모르겠으므로 일단 그냥 mongodb(아래 bold 처리한 부분) 로 적었음)

 

 

./bin/ycsb load mongodb -s -P workloads/workloadc -p recordcount=1000 -threads 2 -p mongodb.url="mongodb://cw-mongo-router:27017/ycsb"

 

 

mongodb url 뒤에 있는 /ycsb 는, ycsb 라는 이름의 database 를 만들어서 사용하라는 의미가 된다.

 

-p recordcount 를 1000으로 두어서 MongoDB에 넣는 레코드의 양을 조절하였고,

 

-threads 는 2개로 맞춰두었다.

 

위의 명령어를 실행하면 아래처럼 나온다. return ok 인 것을 확인해본다.

 

 

실제 MongoDB에서 보면 usertable 이라는 이름의 collections을 볼 수 있다.

 

show dbs

show collections

 

 

 

usertable 이 ycsb에서 workload c 를 위해 넣은 데이터 되시겠다.

 

db.usertable.dataSize() 명령어를 통해 MongoDB 내의 데이터 크기를 byte 단위로 알 수 있다.

 

 

 

 

 

< 선택한 workload 실행 >

 

아래 명령어로 workload c 를 실행해본다.

 

./bin/ycsb run mongodb -s -P workloads/workloadc -p operationcount=1000 -threads 2 -p  mongodb.url="mongodb://cw-mongo-router:27017/ycsb" > workloadc_test.result

 

 

 

operationcount 옵션으로 1000개 레코드 모두에 workload 를 적용하게 하였다.

 

해석해보면 

 

전체 workloadc 의 수행 시간은 1403 ms 이고

 

처리량은 712, operation(여기선 read) 한 횟수는 (레코드 개수에 따른) 1000,

 

평균 지연 시간은 1613.246, 최소 지연 시간은 868, 최대 지연 시간은 88383,

 

95번째/99번째 percentile 지연시간은 각각 2483, 3323 us 이다.

 

 

 

 

 

 

 

참고로 위의 예제의 경우 MongoDB 자체적으로 authentication 이 없기 때문에 id 와 pw 가 필요 없었는데,

 

authentication을 걸어둔 MongoDB 사용자들은 아래 명령어처럼 추가적인 정보를 더 넣어주어야 한다.

 

./bin/ycsb load mongodb -s -P workloads/workloada -p recordcount=10000000 -threads 16 -p mongodb.url="mongodb://user:pwd@server1.example.com:9999,server2.example.com:9999/dbname" -p mongodb.auth="true"

 

 

자세한 것은 여기(영어) 참고.

 

 

 

 

 

참고

 

https://medium.com/idomongodb/mongodb-generating-workloads-using-ycsb-f0acbe704374

https://scalegrid.io/blog/how-to-benchmark-mongodb-with-ycsb/

https://crazia.tistory.com/entry/YCSB-%EC%95%BC%ED%9B%84-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%84%9C%EB%B9%99-%EB%B2%A4%EC%B9%98%EB%A7%88%ED%81%AC-Yahoo-Cloud-Serving-Benchmark

 

 

 

 

 

 

+ Recent posts