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

compact

項目一覧

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

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

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

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

重要

このコマンドは、M0 、M2 、M5 、および Flex クラスターではサポートされていません。詳細については、「 サポートされていないコマンド 」を参照してください。

  • 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 の場合はプライマリで実行するとエラーが返されました。コマンドが他のすべての操作をブロックしたためです。

v4.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は終了し、ディスク領域をオペレーティング システムに解放しようとする際に失敗する可能性があります。

compact コマンドは、不要なブロックをオペレーティング システムに解放して、コレクション内のデータとインデックスで消費されるディスク領域を削減しようとします。 compact の有効性は、解放可能なブロックの数と、ブロックがデータファイル内のどの場所にあるかに相対的です。

コレクションのストレージ容量の変化を確認するには、圧縮の前後でcollStats コマンドを実行します。出力メトリクスcollStats.freeStorageSize を使用して、再利用可能なストレージの量を確認できます。

操作は反復的であり、パスごとにデータファイルのセグメントに対して操作します。 compact が解放するスペースの量の推定値を表示するには、dryRun フラグを使用します。 コレクションで compact を呼び出すと、コレクションとそれに関連するインデックスの両方が圧縮されます。

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

レプリカセットに格納されているコレクションとインデックスに対して 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