Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

compact

項目一覧

  • 定義
  • 互換性
  • 構文
  • コマンドフィールド
  • compact 必要な特権
  • 動作
compact

コレクション内のすべてのデータとインデックスを書き換えてデフラグします。 WiredTigerデータベースでは、このコマンドにより不要なディスク領域をオペレーティング システムに解放します。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

重要

このコマンドは、M 0 、M 2 、M 5クラスターではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

このコマンドの構文は、次のとおりです。

db.runCommand(
{
compact: <collection name>
}
)

このコマンドは、次のフィールドを使用します。

注意

MongoDB 4.2 以降

MongoDB では、compact の MMAPv 1ストレージ エンジンと MMAPv 1の特定オプションpaddingFactorpaddingBytespreservePaddingが削除されます

フィールド
タイプ
説明
compact
string
コレクションの名前。
force
flag

任意。 v4.4 以降 では、指定すると、compact レプリカセット 内の プライマリ で が強制的に実行されます。v 4より前。 4 、 このブール値compact trueフィールドでは、値がfalse の場合、 レプリカセット 内の プライマリ で の実行が有効になり、値が の場合は プライマリ で実行するとエラーが返されました。これは、コマンドが他のすべての操作をブロックしたためです。

v 4.4以降、 compactは、圧縮中のデータベース上のMongoDB CRUD 操作を ブロックしません。

comment
any

任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。

コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。

認証を強制するクラスターの場合、対象のコレクションでcompact特権アクションが可能なユーザーとして認証を受ける必要があります。 dbAdminロールは、システム以外のコレクションに対してcompactを実行するために必要な権限を提供します。

resourceドキュメントの構成の詳細については、 自己管理型配置に関するリソース ドキュメント を参照してください。

既存のユーザーに dbAdmin またはカスタムロールを付与するには、 db.grantRolesToUser() または db.updateUser() を使用します。次の操作では、admin データベース上の myCompactUserにカスタムロール compact が付与されます。

use admin
db.grantRolesToUser("myCompactUser", [ "dbAdmin" | "myCustomCompactRole" ] )

新規ユーザーに dbAdmin またはカスタムロールを付与するには、ユーザーの作成時に db.createUser() メソッドの roles 配列でロールを指定します。

use admin
db.createUser(
{
user: "myCompactUser",
pwd: "myCompactUserPassword",
roles: [
{ role: "dbAdmin", db: "<database>" } | "myCustomCompactRole"
]
}
)

compact 操作の進行状況を確認するには mongod ログファイルを監視するか、別の shell インスタンスから db.currentOp() を実行します。

db.killOp()メソッドを使用してcompactを終了するか、操作が完了する前にサーバーを再起動すると、 compactは終了し、ディスク領域をオペレーティング システムに解放しようとする際に失敗する可能性があります。

コレクションのストレージスペースの変化の推移を確認するには、圧縮の前後に collStats コマンドを実行します。

WiredTigerでは、 compactはコレクション内のデータとインデックスに必要なストレージ領域を削減し、不要なディスク領域をオペレーティング システムに解放しようと試みます この操作の有効性はワークロードによって異なります。また、ディスク容量が復元されることはありません。 このコマンドは、コレクションから大量のデータを削除し、それを置き換える予定がない場合に便利です。

compact WiredTiger データベースで実行するには追加のディスク領域が必要になる場合があります。

レプリカセットに格納されているコレクションとインデックスに対して compact を使用できますが、いくつか重要な考慮事項があります。

  • compact コマンドはプライマリ ノードからセカンダリ ノードに複製されることはありません。

  • 可能な場合は常にセカンダリ ノードで compact を実行する必要があります。セカンダリで compact を実行できない場合は、強制オプションを参照してください。

  • MongoDB 6.0.2以降 (および5.0.12 ):

    • セカンダリ ノードは compact の実行中でも複製できます。

    • 読み取りは許可されています。

クラスター上で compact を実行するには

1

セカンダリノードの一つで compact を実行します。compact が終了したら、残りのセカンダリのそれぞれに対して順に操作を繰り返します。

2

現在のプライマリ ノードを解任して選挙をトリガーするには、 rs.stepDown() メソッドを使用します。特定のセカンダリノードを指名するには、ノードの優先順位を調整します

3

解任後、旧プライマリ ノードはセカンダリ ノードになります。旧プライマリ・ノードで compact を実行します。。

セカンダリ ノードでのブロッキング動作はバージョン固有です。

バージョン
ブロッキング動作
4.4
  • レプリケーションはできません。

  • 読み取りは許可されていません。

4.4.17、 5.0.12、および 6.0.2
  • セカンダリ ノードは compact の実行中でも複製できます。

  • 読み取りが許可されます。

compactコマンドの実行中、レプリカセットはSECONDARYステータスのままになります。

レプリカセットのノードの状態の詳細については、レプリカセット ノードの状態を参照してください。

レプリカセットのメンテナンスと可用性については、 自己管理型レプリカセット メンバー のメンテナンスの実行 を参照してください。

compactmongodインスタンスにのみ適用されます。 シャーディングされた環境では、メンテナンス操作として各シャードでcompactを個別に実行します。

インスタンスに対してcompact mongosを発行することはできません。

mongodは、 compact操作の後にすべてのインデックスを並列に再構築します。

戻る

collMod