AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

MongoDB パフォーマンス

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

You may experience performance limitations from inadequate or inappropriate indexing strategies or poor schema design patterns. Locking Performance discusses how these can impact MongoDB's internal locking.

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

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

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

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

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

注意

Some serverStatus response fields are not returned on MongoDB Atlas Free clusters or Flex clusters. For more information, see Free and Flex in the MongoDB Atlas documentation.

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

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

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

globalLock.totalTime が uptime に比べて高い場合、データベースは長時間ロック状態にあります。

クエリが長時間かかる原因としては、次のようなものがあります。

  • 非効率的なインデックスの使用

  • 最適でないスキーマ設計

  • クエリ構造が不良

  • システム アーキテクチャの問題

  • RAM が不足しているため、ディスクの読み取りが発生します

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

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

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

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

多くの同時アプリケーションリクエストにより、サーバーの要求に対応する能力が超過する可能性があります。その場合は、配置のキャパシティーを増やします。

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

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

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

MongoDB Atlas sets the limit for concurrent incoming connections based on the cluster tier and class. To learn more, see Connection Limits and Cluster Tier in the Atlas documentation.