このトピックでは、ApsaraDB for MongoDBインスタンスのディスク領域を解放する方法について説明します。
背景情報
MongoDB 3.2のデフォルトのストレージエンジンとしてWiredTigerが使用されます。 storage.directoryPerDB:true
パラメーターは、ApsaraDB for MongoDBで定義されています。 各データベースは別々のフォルダとしてディスクに保存され、コレクションはフォルダ内の別々のファイルです。 storage.directoryPerDB:true
パラメーターの詳細については、「storage.directoryPerDB」をご参照ください。
手順
1. 未使用のインデックス、コレクション、またはデータベースが存在するかどうかを確認します。 dropIndexes、drop、またはdropDatabaseコマンドを実行して、未使用のインデックス、コレクション、またはデータベースを削除します。 コマンドが実行されると、ファイルはすぐに削除され、ディスク領域が解放されます。
2. 不要な文書がないか確認してください。 deleteコマンドを実行して、不要なドキュメントを削除します。 MySQLと同様に、削除されたMongoDBドキュメントには削除タグが添付されているだけで、対応するストレージスペースが無料としてマークされ、再利用を待ちます。 したがって、deleteコマンドはすぐにディスク領域を解放することはできません。 ディスク領域をすぐに解放する場合は、次の手順を実行します。
3. コレクションに大量の空き領域が存在するかどうかを確認します。 collStatsコマンドを実行してStorageSize
フィールドとfreeStorageSize
フィールドを比較し、compactコマンドを実行して空き物理領域を再利用します。 詳細については、「ディスクのデフラグメントによるディスク使用率の向上」をご参照ください。
各ノードで
compact
コマンドを実行する必要があります。MongoDB 4.4より前のバージョンでは、
compact
コマンドを実行すると他のすべての操作がブロックされます。 作業は慎重に行ってください。cursor.forEachメソッドを使用してすべてのドキュメントを新しいコレクションにコピーし、コレクションの名前を変更してディスク領域を解放します。 これはオフラインシナリオにのみ適用されます。