compact
定義
compact
コレクション内のすべてのデータとインデックスを書き換えてデフラグします。 WiredTigerデータベースでは、このコマンドにより不要なディスク領域をオペレーティング システムに解放します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
このコマンドは、M 0 、M 2 、M 5クラスターではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
{ compact: <collection name> }
コマンドフィールド
このコマンドは、次のフィールドを使用します。
注意
MongoDB 4.2 以降
フィールド | タイプ | 説明 |
---|---|---|
| string | コレクションの名前。 |
| flag | |
| any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 バージョン 4.4 で追加。 |
compact
必要な特権
認証を強制するクラスターの場合、対象のコレクションで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" ] } )
動作
ブロッキング
ブロッキング動作はバージョンに固有です。
バージョン | ブロッキング動作 |
4.4 |
|
4.4.17と5.0.12の投稿 |
|
レプリカセットで compact
を実行するには、「レプリカセット」で追加の考慮事項を参照してください。
進行状況のモニタリング
compact
操作の進行状況を確認するには mongod
ログファイルを監視するか、別の shell インスタンスから db.currentOp()
を実行します。
操作の終了
db.killOp()
メソッドを使用してcompact
を終了するか、操作が完了する前にサーバーを再起動すると、 compact
は終了し、ディスク領域をオペレーティング システムに解放しようとする際に失敗する可能性があります。
ディスクスペース
コレクションのストレージスペースの変化の推移を確認するには、圧縮の前後に collStats
コマンドを実行します。
WiredTigerでは、 compact
はコレクション内のデータとインデックスに必要なストレージ領域を削減し、不要なディスク領域をオペレーティング システムに解放しようと試みます この操作の有効性はワークロードによって異なります。また、ディスク容量が復元されることはありません。 このコマンドは、コレクションから大量のデータを削除し、それを置き換える予定がない場合に便利です。
compact
WiredTiger データベースで実行するには追加のディスク領域が必要になる場合があります。
レプリカセット
レプリカセットに格納されているコレクションとインデックスに対して compact
を使用できますが、いくつか重要な考慮事項があります。
compact
コマンドはプライマリ ノードからセカンダリ ノードに複製されることはありません。可能な場合は常にセカンダリ ノードで
compact
を実行する必要があります。セカンダリでcompact
を実行できない場合は、強制オプションを参照してください。MongoDB 5.0.12 以降
セカンダリ ノードは
compact
の実行中でも複製できます。読み取りは許可されています。
クラスター上で compact
を実行するには
プライマリノードを再度割り当てます。
現在のプライマリ ノードを解任して選挙をトリガーするには、 rs.stepDown()
メソッドを使用します。特定のセカンダリノードを指名するには、ノードの優先順位を調整します。
セカンダリノードのバージョン固有の考慮事項
セカンダリ ノードでのブロッキング動作はバージョン固有です。
バージョン | ブロッキング動作 |
4.4 |
|
4.4.17と5.0.12の投稿 |
|
compact
コマンドの実行中、レプリカセットはSECONDARY
ステータスのままになります。
レプリカセットのノードの状態の詳細については、レプリカセット ノードの状態を参照してください。
レプリカセットのメンテナンスと可用性については、 自己管理型レプリカセット メンバー のメンテナンスの実行 を参照してください。
シャーディングされたクラスター
compact
はmongod
インスタンスにのみ適用されます。 シャーディングされた環境では、メンテナンス操作として各シャードでcompact
を個別に実行します。