Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/

MongoDB パフォーマンス

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

インデックスの作成戦略が不十分または不適切であるため、またはスキーマ設計パターンが不十分なため、パフォーマンスの制限を受ける可能性があります。ロック パフォーマンスでは、これらが MongoDB の内部ロックにどのような影響を与えるかについて説明しています。

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

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

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

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

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

注意

MongoDB Atlas無料クラスターまたは Flex クラスターでは、一部の 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 ドキュメントの「接続制限とクラスター階層 」を参照してください。

戻る

AutoMerger

項目一覧