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

MongoDB パフォーマンス

項目一覧

  • ロック パフォーマンス
  • 接続数

MongoDB を使用してアプリケーションを開発および運用する際には、アプリケーションとそのデータベースのパフォーマンスを分析する必要がある場合があります。パフォーマンスの低下が起きる場合は、しばしばデータベースアクセスに関する戦略、ハードウェアの可用性、およびオープンなデータベース接続の数が関係しています。

一部のユーザーは、インデックス戦略が不十分または不適切であるため、またはスキーマ設計パターンが不十分なため、パフォーマンスの制限を経験する場合があります。 ロック パフォーマンスでは、これらが MongoDB の内部ロックにどのように影響するかについて説明します。

パフォーマンスの問題は、データベースが容量いっぱいまで動作しており、データベースに追加の容量を追加する時期が来ていることを示している場合があります。特にアプリケーションのワーキングセットは、利用可能な物理メモリーに収める必要があります。

場合によっては、パフォーマンスの問題は一時的なもので、通常とは異なるトラフィックの負荷に関連していることもあります。「接続数」の解説にもあったとおり、スケーリングは過剰なトラフィックを緩和するのに役立ちます。

データベースプロファイラーは、パフォーマンス低下の原因となっている操作を把握するのに役立ちます。

MongoDB は、データ セットの一貫性を確保するためにロック システムを使用します。特定の操作が長時間実行されたり、キューが形成されたりすると、リクエストと操作がロックを待機するため、パフォーマンスが低下します。

ロック関連のスローダウンは断続的に起こることがあります。 ロックがパフォーマンスに影響を与えているかどうかを確認するには、 出力の locks セクションと globalLock serverStatusセクションを参照してください。

注意

MongoDB Atlas M 0 /M 2 /M 5クラスターでは一部のserverStatus応答フィールドは返されません。 詳細については、MongoDB Atlas ドキュメントの「制限されたコマンド」を参照してください。

locks.<type>.timeAcquiringMicroslocks.<type>.acquireWaitCount で割ると、特定のロック モードの平均待機時間を概算できます。

locks.<type>.deadlockCount ロック取得でデッドロックが発生した回数を指定します。

globalLock.currentQueue.total が一貫して高い場合、多数のリクエストがロックを待機している可能性があります。これは同時実行の問題がパフォーマンスに影響している可能性を示唆します。

globalLock.totalTimeuptime に比べて高い場合は、データベースが長時間ロック状態のままになっています。

クエリ時間が長くなる原因としては、インデックスの使用が効果的でない、スキーマの設計が最適ではない、クエリ構造が不十分、システムアーキテクチャに問題がある、RAM の不足によるディスク読み取りの発生などがあります。

場合によっては、アプリケーションとデータベース間の接続数によって、サーバーのリクエスト処理能力が限界に達することがあります。serverStatus ドキュメント内の以下のフィールドからインサイトを得られる場合があります。

  • connections これは次の 2 つのフィールドのコンテナです。

    • connections.current データベース インスタンスに接続されている現在のクライアントの合計数。

    • connections.available 新しいクライアントで利用できる未使用の接続の合計数。

アプリケーションによる多数の同時要求がある場合は、データベースが要求に対応できなくなる可能性があります。 その場合は配置のキャパシティーを増やす必要があります。

書き込みが多いアプリケーションの場合は、 シャーディングを導入し、シャードクラスタ に 1 つ以上の mongod シャード を追加して、インスタンス間で負荷を分散します。

接続数の急増は、アプリケーションまたはドライバーのエラーによっても発生する可能性があります。公式にサポートされているすべての MongoDB ドライバーは、クライアントが接続をより効率的に利用・再利用できるようにする接続プーリングを実装しています。接続数が極端に多い場合、特にそれに対応するワークロードがない場合は、多くの場合ドライバやその他の設定エラーが原因です。

システム全体の制限によって制約されない限り、MongoDB でサポートされる着信接続の最大数はmaxIncomingConnections設定で構成されます。 Unix ベースのシステムでは、 ulimitコマンドを使用するか、システムの/etc/sysctlファイルを編集することで、システム全体の制限を変更できます。 詳細については、「 自己管理型配置の UNIX ulimit設定」を参照してください。

MongoDB Atlas は、クラスター層と クラスに基づいて同時着信接続数の制限を設定します。 詳細については、Atlas ドキュメントの「接続制限とクラスター階層 」を参照してください。

戻る

開発チェックリスト