IBM Cloud Docs
接続の管理

接続の管理

Databases for MongoDB デプロイメントへの接続にはリソースが使用されるので、デプロイメントのパフォーマンスをチューニングするときには、必要な接続数について検討することが重要です。 MongoDB シェルまたは MongoDB クライアントで以下のコマンドを使用し、最大許容接続数と現在の使用量を表示する。

  db.serverStatus().connections

出力例:

{
  current: 33,
  available: 65503,
  totalCreated: 21858,
  rejected: 0,
  active: 9,
  threaded: 33,
  exhaustIsMaster: 0,
  exhaustHello: 6,
  awaitingTopologyChanges: 6
}
フィールド 意味
current: 33 アイドル接続を含む、現在のクライアント接続の合計。 こうして今、多くのクライアントがつながっている。
available: 65503 MongoDB、制限に達するまでに追加で受け付けられるクライアント接続の数(最大65536を示唆)。
totalCreated: 21858 サーバーが起動してから作成された接続の総数。 接続の解約を理解するのに役立ちます。
rejected: 0 制限に達したために拒否された接続試行回数。
threaded: 78 現在接続を処理しているスレッド数。 current と一致することが多い。
active: 23 現在オペレーションを実行しているコネクション数 - 残り(78 - 23 = 55)はアイドル状態。
exhaustIsMaster: 0 古いサーバー発見プロトコルに関連している(現在は置き換えられている)。 通常0.
exhaustHello: 19 持続的なモニタリング接続(例えば、モニタリングで hello コマンドを使用するドライバーからの接続)。
awaitingTopologyChanges: 19 トポロジーの変更を待つコネクション(レプリカセットの高可用性監視など)。

注:

  • maximum connection = current + available
  • 接続が拒否されないということは、リミットに達していないということだ。
  • デフォルトでは、 MongoDB、最大65536の接続を許可している。
  • デプロイメントの接続制限を超えると、アプリケーションがデータベースに到達できなくなる可能性があります。

MongoDB 接続の終了

MongoDB の接続を終了(kill)するには、通常 MongoDB のシェルを使って次のようにする: 以下のコマンドを実行し、接続を含むアクティブなオペレーションをリストアップする。

  db.currentOp(true).inprog

出力:

{
  "client" : "IP:PORT",
  "active" : true,
  "opid" : <opid>,
  ...
}

操作の opid (例えば、 opid: 12345 )が見つかったら、以下のコマンドを使用してそれを終了させる:

    db.killOp(12345)
  • currentOp および killOp を実行するには管理者権限が必要です。

MongoDB コネクションプーリング

MongoDB のコネクションプールとは、アプリケーションと MongoDB サーバー間の再利用可能なコネクションのキャッシュのことです。 リクエストごとに新しいコネクションを開いて閉じる(これはコストがかかる)のではなく、アプリケーションはコネクションのプールを維持し、複数の操作に再利用する。 接続制限の超過を防ぎ、アプリケーションからの接続を効率的に処理するための 1 つの方法として、接続プーリングを使用する方法があります。 ドライバは、需要と構成に基づいて、コネクションの作成、再利用、クローズを管理する。

Node.js (Mongooseまたはネイティブ ドライバ): MongoDB

mongoose.connect(uri, {
  maxPoolSize: 100,      // default is 100
  minPoolSize: 10,
  maxIdleTimeMS: 30000,
  serverSelectionTimeoutMS: 5000
});

Python (PyMongo):

client = MongoClient(uri, maxPoolSize=100, minPoolSize=10)

Java:

MongoClientSettings settings = MongoClientSettings.builder()
    .applyToConnectionPoolSettings(builder ->
        builder.maxSize(100).minSize(10).maxConnectionIdleTime(30, TimeUnit.SECONDS))
    .build();
用語 説明
maxPoolSize (または maxConnectionsPerHost プールが MongoDB サーバに対して開くことができる最大接続数。
minPoolSize プールで維持される最小接続数。
waitQueueTimeoutMS すべてのプールがビジー状態のときに、アプリケーションがプールからの接続を待つ時間。
maxIdleTimeMS 接続がクローズされるまでのアイドル状態の時間。