Docs Menu
Docs Home
/ / /
Node.js ドライバー
/ /

接続プールの監視

項目一覧

  • Overview
  • イベント サブスクリプションの例
  • イベントの説明
  • イベント ドキュメントの例
  • connectionPoolCreed
  • connectionPoolReady
  • connectionPoolClosed
  • connectionCreed
  • connectionReady
  • connectionClosed
  • connectionCheckOutStarted
  • connectionCheckOutFailed
  • connectionCheckedOut
  • connectionCheckedIn
  • connectionPoolCleared

このガイドでは、ドライバーの接続プールを監視する 方法について説明します。 接続プールは、ドライバーが MongoDB インスタンスと維持するオープン TCP 接続のセットです。 接続プールは、アプリケーションが実行する必要があるネットワーク ハンドシェイクの数を減らし、アプリケーションの実行を高速化するのに役立ちます。

次のセクションでは、アプリケーションで接続プール イベントを記録し、これらのイベントで提供される情報を調べる方法を示します。

アプリケーションでサブスクライブすることで、ドライバーを使用して 1 つ以上の接続プール イベントにアクセスできます。 次の例は、レプリカセットへの接続と、MongoDB 配置によって作成された接続プール監視イベントの 1 つへのサブスクライブを示しています。

const { MongoClient } = require("mongodb");
// Replace the following with your MongoDB deployment's connection string
const uri =
"mongodb+srv://<clusterUrl>/?replicaSet=rs&writeConcern=majority";
const client = new MongoClient(uri);
// Replace <event name> with the name of the event you are subscribing to
const eventName = "<event name>";
// Subscribe to the event
client.on(eventName, (event) =>
console.log("\nreceived event:\n", event)
);
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("\nConnected successfully!\n");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

接続プール モニタリング イベントは、アプリケーションの接続プールの動作をデバッグして理解するのに役立ちます。 次の例では、接続プール モニタリング イベントを使用して、プール内のチェックアウトされた接続の数を返します。

function connectionPoolStatus(client) {
let checkedOut = 0;
function onCheckout() {
checkedOut++;
}
function onCheckin() {
checkedOut--;
}
function onClose() {
client.removeListener('connectionCheckedOut', onCheckout);
client.removeListener('connectionCheckedIn', onCheckin);
checkedOut = NaN;
}
// Decreases count of connections checked out of the pool when connectionCheckedIn event is triggered
client.on('connectionCheckedIn', onCheckin);
// Increases count of connections checked out of the pool when connectionCheckedOut event is triggered
client.on('connectionCheckedOut', onCheckout);
// Cleans up event listeners when client is closed
client.on('close', onClose);
return {
count: () => checkedOut,
cleanUp: onClose
};
}

次の接続プール モニタリング イベントのいずれかにサブスクライブできます。

イベント名
説明
connectionPoolCreated
接続プールが作成されたときに作成されます。
connectionPoolReady
接続プールが準備できたときに作成されます。
connectionPoolClosed
サーバー インスタンスが破棄される前に接続プールが閉じられたときに作成されます。
connectionCreated
接続が作成されたときに作成されますが、操作に使用される場合は必ずしも作成されません。
connectionReady
接続がハンドシェイクを正常に完了し、操作に使用する準備が整った後に作成されます。
connectionClosed
接続が閉じられたときに作成されます。
connectionCheckOutStarted
操作が実行用接続を取得しようとしたときに作成されます。
connectionCheckOutFailed
操作が実行用接続の取得に失敗した場合に作成されます。
connectionCheckedOut
操作が実行用接続を正常に取得したときに作成されます。
connectionCheckedIn
操作が実行された後に接続がプールにチェックバックされたときに作成されます。
connectionPoolCleared
接続プールがクリアされたときに作成されます。

次のセクションでは、接続プールを監視するイベントの各タイプのサンプル出力を示します。

ConnectionPoolCreatedEvent {
time: 2023-02-13T15:54:06.944Z,
address: '...',
options: {...}
}
ConnectionPoolReadyEvent {
time: 2023-02-13T15:56:38.440Z,
address: '...'
}
ConnectionPoolClosedEvent {
time: 2023-02-13T15:56:38.440Z,
address: '...'
}
ConnectionCreatedEvent {
time: 2023-02-13T15:56:38.291Z,
address: '...',
connectionId: 1
}
ConnectionReadyEvent {
time: 2023-02-13T15:56:38.291Z,
address: '...',
connectionId: 1,
durationMS: 60
}
ConnectionClosedEvent {
time: 2023-02-13T15:56:38.439Z,
address: '...',
connectionId: 1,
reason: 'poolClosed',
serviceId: undefined
}
ConnectionCheckOutStartedEvent {
time: 2023-02-13T15:56:38.291Z,
address: '...',
}
ConnectionCheckOutFailedEvent {
time: 2023-02-13T15:56:38.291Z,
address: '...',
reason: ...,
durationMS: 60
}
ConnectionCheckedOutEvent {
time: 2023-02-13T15:54:07.188Z,
address: '...',
connectionId: 1,
durationMS: 60
}
ConnectionCheckedInEvent {
time: 2023-02-13T15:54:07.189Z,
address: '...',
connectionId: 1
}
ConnectionPoolClearedEvent {
time: 2023-02-13T15:56:38.439Z,
address: '...',
serviceId: undefined,
interruptInUseConnections: true,
}

戻る

コマンド監視