監視していない間にディスク容量の 95% まで増加した単一ホスト データベースがあります。この状況を改善するために、古いレコードを最大のコレクションから自動的に削除するプロセスを作成したため、データ使用量はディスク容量の約 40% に減少しました。データサイズが事前に割り当てられたファイルのサイズに近くならない限り安全だと思っていましたが、1 週間後には間違っていることが証明されました。
Wed Jan 23 18:19:22 [FileAllocator] allocating new datafile /var/lib/mongodb/xxx.101, filling with zeroes...
Wed Jan 23 18:25:11 [FileAllocator] done allocating datafile /var/lib/mongodb/xxx.101, size: 2047MB, took 347.8 secs
Wed Jan 23 18:25:14 [conn4243] serverStatus was very slow: { after basic: 0, middle of mem: 590, after mem: 590, after connections: 590, after extra info: 970, after counters: 970, after repl: 970, after asserts: 970, after dur: 1800, at end: 1800 }
これは : の出力です(数値はスケールのためにMB 単位db.stats()
であることに注意してください)
> db.stats(1024*1024)
{
"db" : "xxx",
"collections" : 47,
"objects" : 189307130,
"avgObjSize" : 509.94713418348266,
"dataSize" : 92064,
"storageSize" : 131763,
"numExtents" : 257,
"indexes" : 78,
"indexSize" : 29078,
"fileSize" : 200543,
"nsSizeMB" : 16,
"ok" : 1
}
質問: MongoDB が新しいデータファイルを割り当てないようにするにはどうすればよいですか?
新しいディスクをインストールする必要があるため、実行repair
は困難です。ランニングはcompact
役に立ちますか?はいの場合、定期的に実行する必要がありますか?また、いつ実行する必要があるかをどのように判断できますか?
更新:ここで何か基本的なことが欠けていると思います...データファイル、エクステント、コレクション、およびデータベース間の接続、および必要に応じてスペースがどのように割り当てられるかについて誰か詳しく教えてください。