replSetResizeOplog
定義
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
このコマンドは、M 10 + クラスターではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
コマンドの形式は次のとおりです。
db.adminCommand( { replSetResizeOplog: <int>, size: <double>, minRetentionHours: <double> } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
---|---|---|
replSetResizeOplog | 整数 | 1 に設定します。 |
size | double | oplog の最大サイズ(メガバイト単位)。
|
minRetentionHours | double | 任意。 oplog エントリを保持する最小時間数。10 進数値は時間単位を表します。 たとえば、 値は
現在構成されている最小 oplog 保持期間を確認するには、 |
Tip
以下も参照してください。
動作
replSetResizeOplog
mongod
Wired Tiger ストレージ エンジン または インメモリ ストレージ エンジンで 実行されている インスタンスで を使用できます。
コマンドを使用して のサイズを変更する手順については 、「 oplog自己管理型レプリカセット ノードの サイズの変更replSetResizeOplog
oplog 」チュートリアルを参照してください。
oplog は、majority commit point
が削除されるのを回避するために、設定されたサイズ制限を超えて大きくなることがあります。
local.oplog.rs
コレクションは削除できません。 この制限の詳細については、「 oplogコレクションの動作 」を参照してください。
replSetResizeOplog
は、次の方法で設定された最大 oplog サイズまたは最小 oplog 保持期間を上書きします。
次の場合を 除き 、サーバーの再起動後も新しい oplog サイズが維持されます。
重要
最大 oplog サイズを小さくすると、oplog が新しい構成サイズに達するまで、最も古い oplog エントリが切り捨てられます。
同様に、oplog の最小保持期間を短縮すると、oplog が設定された最大サイズを超えた場合に、指定された期間よりも古い oplog エントリが切り捨てられます。
oplogサイズまたは保持期間の減少によってoplogが切り捨てられると、それらのoplogエントリーをまだ読み取っているクライアントから次のような予期しない動作が発生する可能性があります。
開いている変更ストリームが無効になる可能性があります
これらの oplog エントリが複製されていないセカンダリでは、再同期が必要になる場合があります。
ノードに対して
mongodump
と--oplog
を使用したバックアップでは、切り捨てられる前にエントリが取得されない可能性があります。
最小 oplog 保持期間
oplog 保持期間が最小に設定されている場合、 mongod
は次のように動作します。
oplog は、設定された時間数だけ oplog エントリーを保持できるように、制約なしに拡張されます。そのため、書き込みが大量で保存期間が長い組み合わせにした場合は、システム ディスク容量が減少または枯渇する可能性があります。
oplog が最大サイズを超えた場合、
mongod
oplog が最大サイズに戻った、 または 最大サイズが小さく設定された場合にも、 はそのディスク領域を保持し続ける可能性があります。「 oplog サイズを縮小してもディスク領域は即座に解放されない 」を参照してください。mongod
は、oplog エントリの保持を強制するときに、システム ウォール クロックと oplog エントリ作成ウォール クロック タイムを比較します。クラスター コンポーネント間でのクロックのズレにより、予期しない oplog 保持動作が発生する可能性があります。クラスター ノード間のクロック同期の詳細については、「クロック同期」を参照してください。
replSetResizeOplog
は他のノードに複製されない
replSetResizeOplog
を使用して特定のレプリカセット ノードの oplog サイズまたは最小 oplog 保持期間を変更しても、レプリカセット内の他のノードの oplog サイズは変更されません。 すべてのノードの oplog サイズまたは最小保持期間を変更するには、クラスター内の各レプリカセット ノードに対してreplSetResizeOplog
を実行する必要があります。
oplog サイズを縮小してもディスク領域は即座に解放されない
oplog サイズを圧縮しても、そのディスク領域はすぐに再利用されることは ありません 。 これには、最小 oplog 保持期間よりも古い oplog イベントが切り捨てられることによる oplog サイズの縮小が含まれます。
oplog サイズを縮小した後、未使用のディスク領域をすぐに解放するには、メンテナンス期間中にlocal
データベースのoplog.rs
コレクションに対してcompact
を実行します。 compact
は、実行されるデータベースに対するすべての操作をブロックします。 したがって、 oplog.rs
compact
を実行すると、oplog 同期が防止されます。 oplogのサイズを変更して oplog.rs
を圧縮する手順については、「自己管理型レプリカセット ノードのoplogサイズの変更 」を参照してください。
リソースのロック
replSetResizeOplog
はoplog
に対して排他的ロック(W)を取得し、完了するまでコレクションに対する他の操作をブロックします。
MongoDB でのロックの詳細については、「FAQ: 同時実行性」を参照してください。
例
最大 oplog サイズの変更
現在の最大 oplog サイズmaxSize
をメガバイト単位で表示するには、 db.collection.stats()
mongosh
メソッドを使用します。 例:
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
上記のコマンドは、このノードの oplog サイズをメガバイト単位で返します。
990
次のコマンドは、 replSetResizeOplog
を使用して、このノードの oplog サイズを16384メガバイトに変更します。
db.adminCommand({ "replSetResizeOplog": 1, size: Double(16384)})
新しい oplog サイズを確認するには、 db.collection.stats()
メソッドを再実行します。
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
上記のコマンドは、次の値を返します。
"maxSize": NumberLong("16834")
警告
ノード内の oplog のサイズを縮小すると、ノードからデータが削除されます。 これにより、そのノードと同期しているレプリカ ノードが古くなる可能性があります。 これらのノードを再同期するには、「自己管理型レプリカセットのノードの再同期 」を参照してください。
最小 oplog 保持期間の変更
任意。
db.serverStatus()
コマンドを使用して、現在の最小 oplog 保持値がoplogTruncation.oplogMinRetentionHours
であることを確認します。db.getSiblingDB("admin").serverStatus().oplogTruncation.oplogMinRetentionHours コマンドは、現在構成されている
mongod
の最小 oplog 保持期間を返します。 例:1.5 mongod
に最小 oplog 保持期間がない場合、操作は空の結果を返します。構成された最小 oplog 保持期間を変更するには、
replSetResizeOplog
コマンドを使用します。 たとえば、次の例では、oplog の最小保持期間を2
時間に設定します。db.adminCommand({ "replSetResizeOplog" : 1, "minRetentionHours" : 2 })