Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。
2012年10月16日

mongodbのディスク領域を解放するのが難しい問題

6
Issei Naruta @mirakui

mongodb、ディスク容量を空けるために db.repairDatabase() したらディスク容量が足りないって言われるし、服を買いに行く服が無い状態になる

2012-10-16 18:52:59
Issei Naruta @mirakui

一回ディスクが膨らんだらもう解消する手段ないんじゃないの…

2012-10-16 18:54:57
Issei Naruta @mirakui

mongoマスターいたら教えて下さい

2012-10-16 18:55:36
Issei Naruta @mirakui

200Gのディスクで100Gのmongoのデータがあって80GくらいいあいてるけどそれでもrepairDatabaseするには足りないんだって

2012-10-16 18:58:19
Yuki Nishijima @yuki24

@mirakui それだと、100GB 空いてる必要がありますね。repair は単に今あるデータから全く同じ新しいデータベースを書き出しているだけなのです…

2012-10-16 19:03:05
Akihiro Kuwano @kuwa_tw

@mirakui 一応RepairだとDB全体になって、DBファイルと同じだけの容量が必要になるので、実質ディスク50%超えるとかけられないです。Collection単位のCompact Commandを使ってみる位しか手が無いですね、、、このへん(´;ω;`)

2012-10-16 19:03:28
Issei Naruta @mirakui

@yuki24 やっぱそうなんですね〜〜

2012-10-16 19:03:32
Issei Naruta @mirakui

@kuwa_tw なるほどー…、collectionごとにcompactやってみます…

2012-10-16 19:04:06
Yuki Nishijima @yuki24

@mirakui dbpath で指定されたところにある実際のデータを手作業で余裕あるディスクに移した後、dbpath を移したところに向けて mongod を再起動してから再び repair を実装するという荒技もありますが、動くかどうかは不安ですねぇ。

2012-10-16 19:13:11
Issei Naruta @mirakui

@yuki24 それちょっと考えました。書き込みのあるサーバだと無理そうですね…

2012-10-16 19:13:59
Issei Naruta @mirakui

mongoの運用ムズすぎなのでは(重いオペレーションはロックするし)

2012-10-16 19:14:40
Issei Naruta @mirakui

やばい、db.collection.runCommand('compact') も collection 単体じゃなくて db 全体がロックされるな

2012-10-16 19:17:13
Yuki Nishijima @yuki24

@mirakui mongod 止めないといけないので無理ですね。ちなみに repair 自体も global lock するので、repair しただけでも書き込みしてる奴が詰まりそうです。

2012-10-16 19:18:04
Issei Naruta @mirakui

@yuki24 さっき試したらcollectionのcompactもglobal lockっぽかったので、マスターDBでオンラインでスペース空けるのは諦めたほうがよさそうですね…

2012-10-16 19:19:05
Yuki Nishijima @yuki24

@mirakui 完全にオンラインでやるのは無理ですね…

2012-10-16 19:24:29
Issei Naruta @mirakui

compactもcompactで一時的にディスク食うしなあ

2012-10-16 19:28:07
Issei Naruta @mirakui

モンゴあかんのでは……

2012-10-16 19:33:08
Issei Naruta @mirakui

リレーショナルではなぜ駄目なのか。

2012-10-16 19:34:00
Issei Naruta @mirakui

モンゴ、データが少ないうちは天国、ディスク容量の半分以上に膨らむと地獄っぽい

2012-10-16 19:35:41
メキシコ産 @fuba

モンゴ君のスモールデータ天国ビッグデータ地獄

2012-10-16 19:36:54
Issei Naruta @mirakui

compactくそ時間かかるな…

2012-10-16 19:36:56
Issei Naruta @mirakui

ところで compact とか repairDatabase ってレプリケーションするのかな

2012-10-16 19:40:26
Issei Naruta @mirakui

レプリしないんだったらdual masterにしておけばそれなりになんとかなりそうだが…

2012-10-16 19:41:03
ささたつ(Tatsuya Sasaki) @sasata299

もんごはスモールデータ用ですね!

2012-10-16 19:44:20
Issei Naruta @mirakui

データサイズに困っているので、それはもうビッグデータです

2012-10-16 19:45:01
残りを読む(1)

コメント

ふぁくとりーさん @factory_ay 2012年10月16日
CasualにMongoるな、てのはこういう事なんですかね・・・
0
Mikage Sawatari @mikage 2013年3月12日
MongoDBはちゃんと領域を再利用しない問題があるのが難点...レプリカセットにしてスレーブを作り直せば小さくなるので,その後マスターを切り替えるのが一番ダウンタイムが短いと思う.はやく根本的に直るといいなぁ>https://jira.mongodb.org/browse/SERVER-2958
0