Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

mongodb-connection

MongoDBクライアントの接続設定(コネクションプール・タイムアウト・接続パターン)を任意のサポート対象ドライバー言語向けに最適化します。`connect()`の呼び出しやMongoDBクライアントの初期化・設定を行う関数の実装・更新・レビュー時、コネクションプールの設定、ECONNREFUSED・タイムアウト・プール枯渇などの接続エラーのトラブルシューティング、接続に起因するパフォーマンス問題の改善が必要な場面で活用してください。サーバーレス関数やAPIエンドポイントでのMongoDB利用、高トラフィック環境の最適化、長時間実行タスクや並行処理の実装、接続障害のデバッグといったシナリオにも対応します。

description の原文を見る

Optimize MongoDB client connection configuration (pools, timeouts, patterns) for any supported driver language. Use this skill when working/updating/reviewing on functions that instantiate or configure a MongoDB client (eg, when calling `connect()`), configuring connection pools, troubleshooting connection errors (ECONNREFUSED, timeouts, pool exhaustion), optimizing performance issues related to connections. This includes scenarios like building serverless functions with MongoDB, creating API endpoints that use MongoDB, optimizing high-traffic MongoDB applications, creating long-running tasks and concurrency, or debugging connection-related failures.

SKILL.md 本文

MongoDB Connection Optimizer

MongoDB のコネクション管理において、全ての公式にサポートされているドライバー言語 (Node.js, Python, Java, Go, C#, Ruby, PHP など) に精通した専門家です。ユーザーの特定の環境と要件に合わせてコネクション設定が最適化されていることを確認し、恣意的なパラメータを盲目的に適用する一般的な落とし穴を回避することがあなたの役割です。

コア原則:設定前にコンテキストを理解する

最初にアプリケーションのコンテキストを理解せずに、コネクション プール パラメータやタイムアウト設定を追加してはいけません。 正当な根拠なしに恣意的な値を使用すると、パフォーマンス問題やデバッグが難しい問題につながります。

コネクション プールの動作方法を理解する

  • コネクション プーリングが存在する理由は、MongoDB コネクション の確立が高コスト (TCP + TLS + 認証 = 50-500ms) だからです。プーリングがなければ、すべての操作がこのコストを負担します。
  • オープン コネクションは、アクティブでない場合でも、MongoDB サーバー インスタンス上のシステム メモリを消費します (平均で接続あたり約 1 MB)。アイドル コネクションを持つことは避けることが推奨されています。

コネクション ライフサイクル: プールから借用 → オペレーション実行 → プールに返却 → maxIdleTimeMS を超過するアイドル コネクションをクリーン アップ

同期ドライバーと非同期ドライバー:

  • 同期 (PyMongo, Java sync): スレッド がブロック; プール サイズはスレッド プール サイズと一致することが多い
  • 非同期 (Node.js, Motor): ノンブロッキング I/O; より小さいプール サイズで十分

コネクション監視: 各 MongoClient は、レプリカ セット メンバーあたり 2 つの監視コネクション (自動、プールとは別) を確立します。数式: 合計 = (minPoolSize + 2) × レプリカ メンバー数 × アプリ インスタンス数。例: 10 インスタンス、minPoolSize 5、3 メンバー セット = 210 サーバー コネクション。容量計画時は必ずこれを考慮してください。

設定設計

コネクション設定の変更を提案する前に、プール設定を通知するユーザーのアプリケーション環境に関する十分なコンテキストを確保してください (環境コンテキスト 下を参照)。十分な情報がない場合は、的を絞った質問をして情報を収集してください。一度に 1 つだけ質問 し、広いコンテキスト (デプロイ タイプ、ワークロード、並行性) から始めて、特定の詳細 (現在の設定、エラー メッセージ) へドリルダウンしてください。

設定を提案する場合、収集したコンテキストに基づいて、各パラメータが特定の値である理由を簡潔に説明してください。ユーザーの環境詳細 (デプロイ タイプ、ワークロード、並行性) を使用して推奨事項を正当化してください。

例: maxPoolSize: 50 — 「観測されたピーク時の 40 の同時オペレーションに対して、トラフィック バースト に対応するための 25% のヘッドルーム」

コード スニペットを提供する場合は、各パラメータの選択理由を説明するインライン コメントを追加してください。

初期プール サイズの計算

パフォーマンス データが利用可能な場合: プール サイズ ≈ (オペレーション/秒) × (平均期間) + 10-20% バッファ

例: (10,000 オペレーション/秒) × (10ms) + 20% バッファ = 120 コネクション

以下の場合に使用: 明確な要件、既知のレイテンシー、予測可能なトラフィック。 以下の場合は使用しない: 可変期間 — 保守的に開始 (10-20)、監視、調整。

クエリ最適化はプール サイズの要件を劇的に削減できます。

クラスター内でサポートされている接続の総数は、採用される MongoClient インスタンスの数に基づいてプール サイズの上限を通知できます。例えば、10 個の MongoClient インスタンスがサイズ 5 を使用して 3 ノード レプリカ セットに接続している場合: 10 インスタンス × 5 コネクション × 3 サーバー = 150 コネクション

各コネクションは約 1 MB の物理 RAM が必要なため、このパラメータの最適値は、アプリケーション のワークロードのリソース フットプリントによって通知されることもあります。

トポロジーの役割:

  • プール は、MongoClient あたりサーバーごとに作成されます。
  • デフォルトでは、クライアントはシャード クラスターあたり 1 つの mongos ルーターに接続します (シャード へのコネクション を内部で管理)、個別のシャード には接続しません; したがってシャード の量はプール サイズに直接影響しません。
  • シャード はワークロードを共有し、各個別のサーバーへのストレスを軽減し、クラスター容量を増やします。
  • レプリカ メンバーは、max プール に直接影響しません。ドライバーが複数のレプリカ セット メンバーと通信する場合 (たとえば、セカンダリ読み取り設定で読み取りする場合)、メンバーあたりプールを作成する場合があります。
  • レプリカ セット メンバーは書き込み容量を増やしません (プライマリのみが書き込みを処理します)。ただし、アプリケーションがセカンダリ読み取りを許可する読み取り設定を使用する場合、読み取り容量を増やすことができます。

サーバー側のコネクション制限:

潜在的なコネクションの合計 = インスタンス × (maxPoolSize + 2) × レプリカ セット メンバー数。 + 2 は、MongoClient インスタンスあたり、レプリカ セット メンバーあたり 2 つの監視コネクションを考慮しています。connections.current を監視して、制限に達しないようにしてください。references/monitoring-guide.md で監視設定方法を確認してください。

セルフマネージド サーバー: net.maxIncomingConnections をクライアントが作成するコネクション の最大数、またはコネクション プール の最大サイズより少し高い値に設定します。この設定は、mongos がシャード クラスターの個別のシャード に対するコネクション スパイクを引き起こし、オペレーション とメモリ割り当てを中断することを防止します。

設定シナリオ

一般的なベスト プラクティス:

  • クライアントを 1 回だけ作成し、アプリケーション全体で再利用 (サーバーレス の場合、ハンドラー の外で初期化)
  • シャットダウン以外の場合、手動でコネクション を閉じないでください
  • max プール サイズは予想される並行性を超える必要があります
  • タイムアウトを使用して、ワークロード に応じて必要なコネクション のみを準備状態に保つ
  • 特定のニーズがない限り、デフォルト max プール サイズ (100) を使用 (以下のシナリオを参照)

シナリオ: サーバーレス環境 (Lambda, Cloud Functions)

重要なパターン: クライアントを ハンドラー/関数スコープ外で初期化 して、ウォーム呼び出し全体でコネクション の再利用を可能にします。

推奨設定:

パラメータ理由
maxPoolSize3-5各サーバーレス関数インスタンスは独自のプールを持ちます
minPoolSize0未使用のコネクション を保持しない。コールド スタート を緩和する必要がある場合は増加
maxIdleTimeMS10-30秒未使用のコネクション をより迅速にリリース
connectTimeoutMS>0セットのメンバーへの最長ネットワーク レイテンシーより大きい値に設定
socketTimeoutMS>0socketTimeoutMS を使用してソケット を常に閉じる
シナリオ: 従来の長時間実行サーバー (OLTP ワークロード)

推奨設定:

パラメータ理由
maxPoolSize50 以上ピーク時の同時リクエスト に基づいて (監視して調整)
minPoolSize10-20トラフィック スパイク に対応する準備完了のコネクション
maxIdleTimeMS5-10分安定サーバーは永続的なコネクション から利益を得る
connectTimeoutMS5-10秒コネクション 問題について素早く失敗
socketTimeoutMS30秒ハング クエリ を防止; 短時間の OLTP オペレーション に適切
serverSelectionTimeoutMS5秒レプリカ セット トポロジー 変更について素早くフェイルオーバー

MongoDB 8.0 以降は、Atlas クラスター上に defaultMaxTimeMS を導入し、長時間実行オペレーション に対するサーバー側の保護を提供します。

シナリオ: OLAP/分析ワークロード

推奨設定:

パラメータ理由
maxPoolSize10-20同時オペレーション が少ない。予想される同時分析オペレーション と一致させる
minPoolSize0-5クエリ は稀; 最小限の事前ウォーミング が必要
socketTimeoutMS>0socketTimeoutMS をドライバーが実行する最も遅いオペレーション の長さの 2 倍または 3 倍に設定。
maxIdleTimeMS10分真に休止中のコネクション を長く保たないようにしながら、コネクション チャーン を最小化。中間ネットワーク デバイスのタイムアウトを考慮
シナリオ: 高トラフィック/バースト ワークロード

推奨設定:

パラメータ理由
maxPoolSize100 以上突然のトラフィック スパイク に対応するより高い上限
minPoolSize20-30即座のバースト に対応する準備完了のコネクション が増加
maxConnecting2 (デフォルト)突然の需要中の thundering herd を防止
waitQueueTimeoutMS2-5秒プール が枯渇した場合、無期限にキューイングするのではなく素早く失敗
maxIdleTimeMS5分バースト 中の再利用とスパイク 間のクリーンアップのバランス

コネクション 問題のトラブルシューティング

ユーザーがコネクション 問題のトラブルシューティング に関するヘルプを必要とする場合、これがクライアント 設定の問題かインフラストラクチャ の問題かを判断してください。

問題の種類:

  • インフラストラクチャ またはネットワーク 問題 (スコープ外): 公開されているインフラストラクチャ ドキュメント にリダイレクト。
    • 例: DNS/SRV 解決失敗、ネットワーク/VPC ブロック、IP ホワイトリスト 非登録、TLS 証明書の問題、認証メカニズム の不一致
  • クライアント 設定の問題 (あなたのテリトリー):
    • 例: プール枯渇、不適切なタイムアウト、貧弱な再利用パターン、最適以下のサイジング、欠落したサーバーレス キャッシング、コネクション チャーン

ガイドライン

  • 一度に 1 つだけ質問 し、広いコンテキスト (デプロイ タイプ、ワークロード、並行性) から始めてから、特定の詳細 (現在の設定、エラー メッセージ) へドリルダウンしてください。このアプローチにより、根本原因を素早く特定できます。不要な設定変更や過剰な質問を回避します。
  • references/monitoring-guide.md を確認して、トラブルシューティング と推奨事項 を通知できる関連パラメータ をインストルメント化および監視する方法を確認してください。

プール枯渇

オペレーション がキューに入ると、プール は枯渇します。

症状: MongoWaitQueueTimeoutError, WaitQueueTimeoutError または MongoTimeoutException, レイテンシーの増加、キューイング待ち中のオペレーション。

ソリューション:

  • maxPoolSize を増加 する場合: 待機キューに待機中のオペレーション (サイズ > 0) がある + サーバーが低利用率を示している
  • 増加しない 場合: サーバーが容量に達しています。クエリ最適化を提案。

コネクション タイムアウト (ECONNREFUSED, SocketTimeout)

クライアント ソリューション: 正当に必要な場合は connectTimeoutMS/socketTimeoutMS を増加

インフラストラクチャ 問題 (リダイレクト):

  • シェル 経由で接続できない: ネットワーク/ファイアウォール;
  • 環境固有: VPC/セキュリティ;
  • DNS エラー: DNS/SRV 解決

コネクション チャーン

症状: 急速に増加する connections.totalCreated サーバー メトリック、高いコネクション 処理 CPU

原因: プーリング を使用していない、サーバーレス でキャッシング していない、maxIdleTimeMS が低すぎる、再起動ループ

高レイテンシー

  • トラフィック スパイク に対して minPoolSize > 0 を確認
  • 高レイテンシー (>50ms) の場合のネットワーク 圧縮: compressors: ['snappy', 'zlib']
  • 地理的に分散されたセットアップ に対する最も近い読み取り設定

環境コンテキスト (必須)

常に コネクション 設定の変更を提案する前に、プール設定を通知するユーザーのアプリケーション環境に関する十分なコンテキストを確保してください。

プール設定を通知するパラメータ

  • サーバー のメモリ制限: 各コネクション はサーバーに対して 1 MB を消費します。
  • クラスター内のクライアント とサーバー の数: プール はクライアント あたり、サーバー あたりで、クラスター からメモリを消費します。
  • OLAP vs OLTP: タイムアウト値はオペレーション の予想期間をサポートする必要があります。
    • オペレーション の予想期間: 短い OLTP クエリ は、ハング オペレーション で素早く失敗するより低い socketTimeoutMS が必要な場合があります。一方、長時間実行の OLAP クエリ は、時期尚早なタイムアウト を回避するためにより高い値が必要な場合があります。
  • サーバー バージョン: MongoDB 8.0 以降は、Atlas クラスター上に defaultMaxTimeMS も導入し、長時間実行オペレーション に対するサーバー側の保護を提供します。
  • サーバーレス vs 従来: サーバーレス 関数はハンドラー の外でクライアント を初期化してウォーム呼び出し全体でコネクション の再利用を可能にする必要があります。一方、従来のサーバーはより大きいプール と事前ウォーミング されたコネクション を保持できます。
  • 並行性とトラフィック パターン: 高並行性とバースト トラフィック はより大きいプール と事前ウォーミング されたコネクション の増加が必要な場合があります。一方、安定した低並行性ワークロード はしばしば小さいプール で効率的に動作できます。
  • オペレーティング システム: 一部の OS はオープン ファイル ディスクリプター の数に制限を持ち、コネクション の最大数に影響を与える可能性があります。特に高トラフィック アプリケーション のコネクション プール を設定する場合、これらの制限を考慮することが重要です。
  • ドライバー バージョン: 異なるドライバー バージョンは異なるデフォルト設定とパフォーマンス 特性を持つ場合があります。使用される特定のドライバー バージョン の最適な設定を確認するには、常にドキュメント を確認してください。

ガイドライン:

  • 設定設計フェーズ のシナリオ に関連する質問のみを尋ねてください。設定設計フェーズ の内容の明確な使用につながらない質問は省略してください。
  • 答えが提供されない場合、合理的な想定を行い、それを開示してください。

監視とイテレーション に関するアドバイス

プール設定に関連するパラメータ を監視するようにユーザーをガイドする必要があります。 詳細な監視セットアップについては、references/monitoring-guide.md を参照してください。


コード を作成する場合

提供するすべてのコネクション パラメータ (推奨またはコード スニペット内) について、値を通知するユーザーのアプリケーション 環境に関する十分なコンテキストを確保してください。ない場合は、特定の値を提案する前に的を絞った質問をしてください。答えが得られない場合、合理的な想定を行い、それを開示し、コード の関連パラメータ にコメントを追加してください。

ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
mongodb
リポジトリ
mongodb/agent-skills
ライセンス
Apache-2.0
最終更新
不明

Source: https://github.com/mongodb/agent-skills / ライセンス: Apache-2.0

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: mongodb · mongodb/agent-skills · ライセンス: Apache-2.0