MongoDB를 운용하면서 sh.moveChunk 명령어를 이용하여 수동으로 chunk를 옮기는 경우가 있을 수 있는데,

chunk가 너무 커서 못 옮긴다면서 에러가 나는 경우가 있음.

(참고: shard간 chunk 이동)


mongos> sh.moveChunk('DB_NAME.COL_NAME', {KEY: VALUE}, 'SHARD_NAME')

{

 "cause" : {

   "chunkTooBig" : true,

   "estimatedChunkSize" : 58394175,

   "ok" : 0,

   "errmsg" : "chunk too big to move"

 },

 "ok" : 0,

 "errmsg" : "move failed"

}


원인은 2가지가 있을 수 있는데,

하나는 실제로 chunk size가 지정된 최대 chunk size보다 큰 경우이다.

에러 메시지에 보면 estimatedChunkSize를 보고 지정된 chunk size보다 큰 지 확인할 것.


근데 위에서 예로 든 에러 메시지처럼,

지정된 chunk size는 64M이고 estimatedChunkSize는 그 이하인데도 저런 메시지가 나오면서 chunk 이동에 실패한다면,

chunk에 들어있는 document의 수를 확인해 볼 필요가 있음.

MongoDB는 chunk migration 시에 chunk에 들어있는 document의 수가 25만개 이상이거나,

최대 chunk size 안에 포함될 수 있는 평균 size의 document 수의 1.3배 이상일 경우,

동일한 에러 메시지와 함께 chunk migration을 실패하게 된다.


chunk size와 document 수 확인 및 chunk split은 아래 링크 참고.

http://bloodguy.tistory.com/820




[참고]

http://docs.mongodb.org/manual/reference/limits/#Maximum-Number-of-Documents-Per-Chunk-to-Migrate





Posted by bloodguy

댓글을 달아 주세요