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

fsync

項目一覧

  • 定義
  • 互換性
  • 構文
  • コマンドフィールド
  • Considerations
fsync

ストレージ層からディスクへのすべての保留中の書込みをフラッシュします。 lockフィールドがtrueに設定されている場合、サーバーまたはクラスターにロックが設定され、ロックが解放されるまで追加の書込みが行われません。

MongoDB 7.1以降( 7.0.2以降でも利用可能 )、 6.0.11と5.0 。 22 ) fsyncおよび fsyncUnlockコマンドをmongosで実行し、シャーディングされたクラスターをロックおよびロック解除します。

アプリケーションがデータを書き込むと、MongoDB ではデータがストレージ層に記録され、その後ディスクにデータが書込まれます。

ディスクへの書き込みをフラッシュする場合は、 fsyncを実行します。

永続的なデータを提供するために、 WiredTigerチェックポイントを使用します。 詳細については、「ジャーナリングと WiredTiger ストレージ エンジン 」を参照してください。

重要

サーバーは fsync ロック カウントを維持します。 lockフィールドをtrueに設定する fsyncコマンドは、ロック数を増加させ、 fsyncUnlockコマンドは、それを減算します。 ロックされたサーバーまたはクラスターで書込みを有効にするには、ロック数が 0 になるまでfsyncUnlockコマンドを呼び出します。

バックアップ操作を実行したい場合は、このコマンドを使用して書込みをブロックします。

Tip

mongoshでは、このコマンドはdb.fsyncLock()ヘルパー メソッドを通じて実行することもできます。

ヘルパー メソッドはmongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。

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

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

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

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

db.adminCommand(
{
fsync: 1,
lock: <Boolean>,
fsyncLockAcquisitionTimeout: <integer>,
comment: <any>
}
)

コマンドには次のフィールドがあります:

フィールド
タイプ
説明
fsync
integer
「 1 」と入力してfsyncを適用します。
fsyncLockAcquisitionTimeoutMillis
integer

任意。 ロックを取得するまでの待機時間をミリ秒単位で指定します。 ロック取得操作がタイムアウトした場合、 コマンドは失敗した応答を返します。

デフォルト: 90000

バージョン 7.1 で追加

lock
ブール値
任意。 サーバーまたはクラスターのロックを取得し、すべての書き込み操作をブロックします。 lock操作を持つそれぞれのfsyncはロックを取得します。
comment
any

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

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

fsyncコマンドとlockオプションを指定すると、 cpscptarなどの低レベルのバックアップ ユーティリティを使用してデータファイルを安全にコピーできます。 コピーされた ファイルを使用して開始されたmongodには、ロックされたmongodのユーザーが記述したデータと区別できないユーザーが記述したデータが含まれています。

ロックされたmongodのデータファイルは、ジャーナリング同期WiredTiger スナップショットなどの操作によって変更される可能性があります。 これは論理データ(例: クライアントがアクセスするデータ)では、一部のバックアップ ユーティリティがこれらの変更を検出して警告を発したり、エラーで失敗したりすることがあります。 MongoDB が推奨するバックアップ ユーティリティと手順の詳細については、「自己管理型配置のバックアップ メソッド 」を参照してください。

バージョン 7.1 で追加

fsyncコマンドがmongosで実行されると、クラスター全体に対して fsync 操作が実行されます。 lockフィールドをtrueに設定すると、クラスターにロックが設定され、追加の書込みが防止されます。

シャーディングされたクラスターをロックする前に、使用可能な自己管理型バックアップを作成するには、以下の手順を行います。

  • チャンク移行、リシャーディング、または DDL 操作がアクティブになっていないことを確認します。

  • 追加のチャンク移行が開始されないようにするには、バランサーを停止します。

mongodジャーナリングが有効になっている場合は、ファイルシステムまたはボリュームやブロックレベルでのスナップショットツールを使用して、データセットとジャーナルを単一のユニットとしてバックアップを作成します。

fsyncコマンドは、 lockCountフィールドを含むドキュメントを返します。 mongodで実行された場合、カウントはサーバーに設定されている fsync ロックの数を示します。

シャーディングされたクラスターで実行すると、 mongosは fsync 操作を各シャードに送信し、それぞれのlockCountを含む結果を返します。

注意

lockCountフィールドが 0 より大きい場合、サーバーとクラスターですべての書込みがブロックされます。 ロック数を減らすには、 fsyncUnlockコマンドを使用します。

Fsync ロックは、レプリカセットまたはシャーディングされたクラスター内のプライマリで実行されます。

ネットワークの問題によりプライマリがダウンしたり、アクセスできなくなった場合、クラスターは使用可能なセカンダリから新しいプライマリを選択します。 fsync ロックを持つプライマリがダウンした場合、新しいプライマリは fsync ロックを保持せ、書込み操作を処理できます。 バックアップ操作中に選挙が行われると、結果のバックアップが一貫性を失うか、使用できない可能性があります。

プライマリがダウンした状態から回復するには、次の手順に従います。

  1. ロック数が 0 になるまでfsyncUnlockコマンドを実行し、すべてのノードのロックを解放します。

  2. fsyncコマンドを発行して、クラスター上の fsync ロックを再確立します。

  3. バックアップを再起動します。

さらに、 fsync ロックは永続的です。 古いプライマリが再度オンラインになったら、ノードのロックを解放するためにfsyncUnlockコマンドを使用する必要があります。

注意

fsyncコマンドとlockオプションを指定すると、 cpscptarなどの低レベルのバックアップ ユーティリティを使用してデータファイルを安全にコピーできます。 コピーされた ファイルを使用して開始されたmongodには、ロックされたmongodのユーザーが記述したデータと区別できないユーザーが記述したデータが含まれています。

ロックされたmongodのデータファイルは、ジャーナリング同期WiredTiger スナップショットなどの操作によって変更される可能性があります。 これは論理データ(例: クライアントがアクセスするデータ)では、一部のバックアップ ユーティリティがこれらの変更を検出して警告を発したり、エラーで失敗したりすることがあります。 MongoDB が推奨するバックアップ ユーティリティと手順の詳細については、「自己管理型配置のバックアップ メソッド 」を参照してください。

コマンドは、fsync を介して個々のmongod mongosインスタンスまたはシャーディングされたクラスターをロックできます。lockフィールドをtrueに設定して実行すると、 fsync 操作はすべてのデータをストレージ層にフラッシュし、 インスタンスまたはクラスターのロックが解除されるまで、追加の書込み (write) 操作はすべてブロックされます。

データベースをロックするには、 fsyncコマンドを使用してlockフィールドをtrueに設定します。

db.adminCommand( { fsync: 1, lock: true } )

この操作では、操作のステータスとlockCountを含むドキュメントが返されます。

{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"lockCount" : NumberLong(1),
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}

ロックされると、書込み (write) 操作はブロックされます。 個別の接続では、書込み操作の最初の試行まで読み取り操作が続行される場合があり、サーバーまたはクラスターのロックが解除されるまで待機します。

重要

fsync ロック操作はロック数を維持します。

サーバーまたはクラスターの書き込みロックを解除するには、ロック カウントは 0 である必要があります。 つまり、fsync ロックを実行する特定の回数に応じて、書込み (write) に対してサーバーまたはクラスターのロックを解除するには、対応する数のロック操作を発行する必要があります。

クラスターのサーバーのロックを解除するには、 fsyncUnlockコマンドを使用します。

db.adminCommand( { fsyncUnlock: 1 } )

このコマンドを必要な回数繰り返し、ロック数を 0 に減らします。 ロック数が 0 に達すると、サーバーまたはクラスターは書込みを再開できます。

fsync ロックの状態を確認するには、 db.currentOp()を使用します。 サーバーまたはクラスターが現在ロックされているかどうかをテストするには、shell で次の JavaScript 関数を使用します。

serverIsLocked = function () {
var co = db.currentOp();
if (co && co.fsyncLock) {
return true;
}
return false;
}

この関数をmongoshセッションにロードしたら、次の構文で呼び出します。

serverIsLocked()

この関数は、サーバーまたはクラスターが現在ロックされている場合はtrueを返し、サーバーまたはクラスターがロックされていない場合はfalseを返します。

戻る

filemd5