接続の管理
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 | 接続がクローズされるまでのアイドル状態の時間。 |