실제로 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 사용법은 여기를 참고한다.
아래 정해둔 단계대로 실전 예제를 진행한다.
- workload 선택
- MongoDB 에 데이터를 load
- 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/
'눈가락' 카테고리의 다른 글
[YCSB] Yahoo! Cloud Serving Benchmark S3 hands-on(실전 예제) (0) | 2020.01.28 |
---|---|
[YCSB] Yahoo! Cloud Serving Benchmark HBase hands-on(실전 예제) (0) | 2020.01.24 |
[YCSB] Yahoo! Cloud Serving Benchmark 에서 workload 실행하는 6 단계 (0) | 2020.01.21 |
[YCSB] Yahoo! Cloud Serving Benchmark 설치하는 방법 (0) | 2020.01.21 |
Graph Dataset 받는 곳 (1) | 2019.11.27 |