MongoDB コミュニティの進化に伴い、MongoDB は、新しいバージョンでパフォーマンスの向上、セキュリティの最適化、幅広い機能など、より多くのメリットを提供しています。MongoDB コミュニティは、以前の MongoDB バージョンのサポートとメンテナンスを段階的に停止しています。以前の MongoDB バージョンを引き続き使用すると、さまざまな問題やセキュリティと安定性のリスクが発生する可能性があります。
MongoDB 4.4 は、MongoDB ソフトウェアのライフサイクルスケジュールに基づき、2024 年 2 月にサービス終了 (EOL) になりました。最適化されたサービスをご利用いただくために、MongoDB 5.0、MongoDB 6.0、MongoDB 7.0、または MongoDB 8.0 などの新しいバージョンにインスタンスをアップグレードすることをお勧めします。詳細については、「ライフサイクルスケジュール」をご参照ください。
以前のバージョンのリスク
ApsaraDB for MongoDB チームは、クラウドデータベースの運用保守における長年の経験に基づいて、以前のバージョンのリスクをまとめています。このセクションでは、リスクと、これらのリスクを解決するための推奨バージョンについて説明します。
シャードクラスターインスタンスに孤立ドキュメントが存在するため、データ移行中にデータの不整合が発生する
影響を受けるバージョンとアーキテクチャ: MongoDB 4.2 以降を実行するシャードクラスターインスタンス。
説明: シャードクラスターインスタンス内の孤立ドキュメントをできるだけ早くクリーンアップしないと、データ移行中にデータの不整合が発生する可能性があります。
推奨バージョン: MongoDB 4.4 以降。
推奨理由:
チャンクがソースシャードから新しいシャードに移行された後、ソースシャードのチャンクは削除されるまで一定期間保持されます。ほとんどの場合、孤立ドキュメントは移行の中断によって生成されます。孤立ドキュメントは mongos ノードへのリクエストには影響しません。これは、リクエストが ConfigServer ノードのルーティングデータによってチェックされるためです。
MongoDB 4.4 以後は、自己回復チャンク移行と孤立ドキュメントの自動クリーンアップをサポートしています。ノードに障害が発生した場合、MongoDB は、中断された移行プロセスを自動的に回復します。孤立ドキュメントをクリーンアップするために
cleanupOrphanedコマンドを実行する必要はありません。このコマンドを実行して、バックエンド スレッドがインスタンス内の孤立ドキュメントをクリーンアップしているかどうかを確認できます。詳細については、「cleanupOrphaned」をご参照ください。
圧縮操作により、読み取りおよび書き込みリクエストがブロックされる
影響を受けるバージョンとアーキテクチャ: MongoDB 4.2 以前を実行するすべてのアーキテクチャのインスタンス。
説明: ディスクを最適化する場合、以前のバージョンを実行しているインスタンスで圧縮操作を実行すると、読み取りおよび書き込みリクエストがブロックされます。この場合、操作を中断できないため、インスタンスを再起動するしかありません。これはビジネスに影響を与えます。
推奨バージョン: MongoDB 4.4 以降。
推奨理由:
MongoDB 4.4 以降では、createIndex や
dropIndexなどの一部の DDL 操作を除き、読み取りおよび書き込み (CRUD) 操作がブロックされないように、compact コマンドのロック動作が最適化されています。指定されたメンテナンスウィンドウ外の期間に compact コマンドを実行できます。詳細については、「インスタンスのディスクを最適化してディスク使用率を向上させる」および「compact Blocking」をご参照ください。
説明ディスクを最適化するには、ApsaraDB for MongoDB が提供するストレージ分析機能を使用することをお勧めします。この機能の詳細については、「ストレージ分析」をご参照ください。
圧縮操作により、ノードが RECOVERING 状態になる
影響を受けるバージョンとアーキテクチャ: メジャーバージョンが MongoDB 4.2 以前、マイナーバージョンが MongoDB 4.2.18 より前のすべてのアーキテクチャのインスタンス。
説明: ディスクを最適化する場合、以前のバージョンを実行しているインスタンスで圧縮操作を実行すると、インスタンス内のノードが RECOVERING 状態になります。ノードがこの状態が長時間続くと、ApsaraDB for MongoDB のインスタンスアクティベーションコンポーネントによってノードが異常と見なされます。この場合、再構築操作がトリガーされます。
推奨バージョン: MongoDB 4.4 以降。
推奨理由:
MongoDB 4.2.18 以降では、ノードで compact コマンドを実行した後、mongos ノードは RECOVERING 状態になりません。これにより、使用できない mongos ノードの存在と予期しない再構築タスクフローが防止されます。
詳細については、「インスタンスのディスクを最適化してディスク使用率を向上させる」および「compact RECOVERING」をご参照ください。
説明ディスクを最適化するには、ApsaraDB for MongoDB が提供するストレージ分析機能を使用することをお勧めします。この機能の詳細については、「ストレージ分析」をご参照ください。
非表示ノードの物理バックアップが大量のディスク容量を消費する
影響を受けるバージョンとアーキテクチャ: MongoDB 4.2 以前を実行し、ローカルディスクを使用するすべてのアーキテクチャのインスタンス。
説明: 物理バックアップメカニズムにより、バックアップのアップロード中にディスクファイルのサイズが大きくなり続けます。大量のディスクファイルが蓄積されると、大量のディスク容量が消費されます。ノード障害またはスイッチオーバーが発生した場合、ディスク使用量に関連する誤ったアラートがトリガーされます。
推奨バージョン: MongoDB 5.0 以降 (クラウドディスク)。
推奨理由:
クラウドディスクを使用するインスタンスのフルバックアップは、物理バックアップとディスクスナップショットを組み合わせたものです。フルバックアップは、WiredTiger (WT) でバックアップチェックポイントを維持するために必要な時間を短縮し、効率的な方法で非表示ノードのバックアップによるディスク容量の肥大化を解決します。
クラウドディスクを使用するインスタンスが提供するスナップショットバックアップとスナップショットバックアップに基づくデータ復旧により、パフォーマンスが向上します。レプリカセットインスタンスのデータ量が 2 TB を超える場合は、スナップショットバックアップを使用してインスタンスのデータをバックアップすることをお勧めします。こうすることで、バックアップ中に発生しません。これらの問題には、ローカルディスクを使用するインスタンスに必要な長い物理バックアップ時間、高いバックアップ失敗率、その他の運用保守操作の実行の失敗などが含まれます。
削除されたデータベースと同じ名前のデータベースを再作成すると、シャードクラスターインスタンスにルーティングデータが存在する
影響を受けるバージョンとアーキテクチャ: MongoDB 4.4 以前を実行するシャードクラスターインスタンス。
説明: シャードクラスターインスタンスで
dropDatabaseコマンドを実行し、削除されたデータベースと同じ名前のデータベースを再作成すると、インスタンスの ConfigServer ノードにルーティングデータが存在するため、インスタンスの読み取りおよび書き込み操作を期待どおりに実行できません。推奨バージョン: MongoDB 5.0 以降。
推奨理由:
MongoDB 5.0 以降では、
dropDatabaseコマンドのルーティングデータ処理が最適化されています。このため、MongoDB 5.0 以降を実行しているシャードクラスターインスタンスには、ルーティングデータは存在しません。MongoDB 4.2 以前では、dropDatabaseコマンドを繰り返し実行する必要があります。また、すべての Mongos ノードでflushRouterConfigコマンドを実行して、ルーティングデータをリフレッシュする必要があります。そうしないと、残留ルーティングデータによってデータベースのパフォーマンスが低下します。詳細については、「dropDatabase」および「flushRouterConfig」をご参照ください。
{w:1} のデフォルトの writeConcern 設定により、プライマリノードとセカンダリノード間のデータ同期が異常になる
影響を受けるバージョンとアーキテクチャ: MongoDB 5.0 より前のバージョンを実行するすべてのアーキテクチャのインスタンス。
説明: データがインスタンスのプライマリノードにすばやく書き込まれると、インスタンス内のセカンダリノードはデータの一部のみを受信し、RECOVERING 状態になる可能性があります。これはインスタンスの可用性を低下させます。セカンダリノードは予期されるデータを読み取ることができず、読み取り/書き込み分離を必要とするビジネスに影響を与えます。この場合、増分バックアップを期待どおりに実行できません。また、データを以前の時点に復元できません。
推奨バージョン: MongoDB 5.0 以降。
推奨理由:
MongoDB 5.0 以降、writeConcern のデフォルト値は
{w:1}から{w:"majority"}に変更されました。これは、書き込まれるデータが、レプリカセットインスタンスのほとんどのノードによって確認された後にのみクエリできることを示します。 これにより、わずかなパフォーマンスの低下はありますが、データの信頼性が向上します。 また、セカンダリノードで受信したデータの一部と、プライマリノードでトリガーされたフロー制御が原因で、スロークエリの応答や ROLLBACK 状態のプライマリノードによって発生するデータ損失も解決されます。書き込みパフォーマンスの高いシナリオでは、writeConcern を
{w:1}に設定できます。詳細については、「デフォルトの書き込みコンサーン」および「setDefaultRWConcern」をご参照ください。
バランサーはデータを低速で均等に分散し、スケーリングパフォーマンスが低く、ピーク時にスケールアウトアクティビティを実行できない
影響を受けるバージョンとアーキテクチャ: MongoDB 5.0 より前のバージョンを実行するすべてのアーキテクチャのインスタンス。
説明: バランサーはデータを高速に移行できません。その結果、スケールアウトアクティビティを必要とするシナリオでは、データを高速で均等に分散できません。これはデータベースのパフォーマンスを低下させます。
推奨バージョン: MongoDB 5.0 以降。
推奨理由:
MongoDB 5.0 以降、バランサーの移行の同時実行性とパフォーマンスを調整するために、
chunkMigrationConcurrencyパラメーターとbalancerMigrationsThrottlingMsパラメーターが追加されました。詳細については、「chunkMigrationConcurrency」および「balancerMigrationsThrottlingMs」をご参照ください。
説明インスタンスが MongoDB 5.0 を実行していて、2 つのパラメータをサポートしていない場合は、インスタンスのマイナーバージョンを更新します。詳細については、「インスタンスのマイナーバージョンを更新する」をご参照ください。
データの不均衡により、シャードクラスターインスタンスの負荷が不均等に分散される
影響を受けるバージョンとアーキテクチャ: メジャーバージョンが MongoDB 5.0 以前、マイナーバージョンが MongoDB 6.0.3 より前のすべてのアーキテクチャのインスタンス。
説明: バランサーは、シャード間のチャンク数に基づいてデータが均等に分散されているかどうかをチェックします。ジャンボチャンクと空のチャンクが存在し、データの一部に頻繁にアクセスする場合、シャード間でデータと負荷の不均衡が発生します。
推奨バージョン: MongoDB 6.0 以降。
推奨理由:
MongoDB 6.0.3 以降では、バランサーは、シャード間のチャンク数の差ではなく、シャード間のデータ量の差に基づいてデータを均等に分散します。これは、以前のバージョンでジャンボチャンクと空のチャンクが存在し、頻繁にアクセスされるデータが原因で発生するデータと負荷の不均衡を解決します。
詳細については、「MongoDB 6.0.3 のバランサーの変更点」をご参照ください。
その他のカーネルの問題
バージョン | カーネルの問題 | リスクレベル | 説明 |
MongoDB 3.4 | 中 | [原因]: インスタンスで読み取り/書き込み分離が有効になっています。 [問題の説明]: セカンダリノードが oplog を再生するときにグローバルロックが追加され、リクエストが遅くなります。 | |
MongoDB 4.0 | 低 | [原因]: サーバー上の接続数が大幅に増加しています。 [問題の説明]: セッションが不足しているため、アサーションがトリガーされる可能性があります。この場合、Mongos ノードに障害が発生し、ノードのスイッチオーバーがトリガーされます。 | |
MongoDB MongoDB 3.6 から MongoDB 4.2 | 低 | [原因]: 散発的。 [問題の説明]: | |
MongoDB MongoDB 4.2 以前 | 低 | [原因]: 散発的。この問題は [問題の説明]: Mongos ノードがクラッシュします。ノードは、再起動後に障害から自動的に回復します。 | |
MongoDB MongoDB 4.0 から MongoDB 4.2 | 低 | [原因]: 散発的。 [問題の説明]: サーバーはトランザクションと再試行可能な書き込みを正しく区別できず、リクエストの失敗とエラーが発生します。 | |
MongoDB MongoDB 4.0 から MongoDB 4.4 | 高 | [原因]: 長時間実行されるトランザクション。 [問題の説明]: ライトスルーキャッシュが予期どおりにエビクトされず、ダーティキャッシュラインの割合が 20% を超えています。タイムアウトトランザクションをクリーンアップするスレッドがスタックする可能性があり、リクエストのレイテンシが大幅に増加し、データベースのパフォーマンスが低下します。 | |
MongoDB MongoDB 3.6 から MongoDB 4.4 | 高 | [トリガー条件]: ConfigServer ノードが 90 日間切り替えられていません。 [問題の説明]: ConfigServer ノードでハッシュベースのメッセージ認証コード (HMAC) キーを生成することに関する問題により、Mongos ノードがクラッシュし、障害から自動的に回復できません。 | |
MongoDB MongoDB 4.0 から MongoDB 4.4 | 中 | [原因]: 散発的。 [問題の説明]: opContext によってトリガーされたアサーションエラーにより、mongod がクラッシュし、スイッチオーバーがトリガーされます。 | |
MongoDB MongoDB 4.4 以前 | 高 | [原因]: バックエンドのセカンダリノードでインデックスが作成されているときに、DDL 操作が oplog に記録されます。 [問題の説明]: DDL 操作がブロックされ、セカンダリノードに障害が発生します。 | |
MongoDB MongoDB 4.4 以前 | 中 | [原因]: ノードが再起動されるか、データ同期が初期化されます。 [問題の説明]: ノードの回復プロセスで、WT の履歴ストアの時間順序を決定することに関する問題により、WT アサーションエラーがトリガーされ、mongod がクラッシュします。 | |
MongoDB MongoDB 4.2 から MongoDB 4.4 | 高 | [原因]: インスタンスで読み取り/書き込み分離が有効になっており、セカンダリノードの負荷が高い。 [問題の説明]: POSIX スレッドがミューテックスロックを競合すると、セカンダリノードの読み取りチケットが使い果たされ、データベースのパフォーマンスが低下します。 | |
MongoDB MongoDB 4.2 から MongoDB 4.4 | 中 | [原因]: アプリケーションが listCollections 操作を頻繁に呼び出しています。 [問題の説明]: 基礎となる CollectionCatalog コンポーネントのミューテックスロックに関連する問題により、データベースのパフォーマンスが大幅に低下します。 | |
MongoDB MongoDB 6.0 以前 | 高 | [原因]: 以前のバージョンを実行しているインスタンスでインデックスが作成されているときに、メモリ不足 (OOM) エラーが発生します。 [問題の説明]: Mongod が繰り返し再起動され、障害から自動的に回復できません。レプリカセットインスタンス内の 2 つのノードがこの状態になると、インスタンスは使用できなくなります。 | |
MongoDB MongoDB 6.0 以前 | 低 | [原因]: Time to Live (TTL) インデックスを作成した後、または有効期限を変更した後に、多数の期限切れドキュメントが生成されます。 [問題の説明]: バックエンド TTL スレッドがスタックし、障害から自動的に回復できません。このため、TTL 機能が有効になりません。 |
新機能と以降のバージョンでの最適化
バージョン | 新機能または最適化 | 説明 |
MongoDB 5.0 | 時系列コレクション | MongoDB 5.0 以降では、コネクテッドカーや IoT などのシナリオで、時系列データをより効果的に処理できます。 |
長時間実行されるスナップショットクエリ | MongoDB 5.0 以降では、履歴スナップショットを読み取ることができます。 | |
バージョン管理された API。 | MongoDB 5.0 以降では、バージョン管理された API 機能がサポートされています。この機能は、アプリケーションライフサイクルとデータベースライフサイクルを切り離し、完全な互換性を確保します。データベースバージョンのアップグレードによって発生する互換性のリスクに対処する必要はありません。 | |
MongoDB 6.0 | ChangeStream | MongoDB 6.0 以降では、ChangeStream は以下の点で最適化されています。
|
JOIN クエリ | MongoDB 6.0 以降を実行する ApsaraDB for MongoDB シャードクラスターインスタンスは、 | |
シャードクラスターインスタンスの自動最適化 | MongoDB 6.0 以降を実行する ApsaraDB for MongoDB シャードクラスターインスタンスでは、 | |
時系列コレクション | MongoDB 6.0 以降では、時系列コレクションは以下の点で最適化されています。
| |
強化された compact コマンド | ApsaraDB for MongoDB は、WT の compact コマンドを完全に最適化します。これにより、コマンドのパフォーマンスが大幅に向上し、コマンドの実行中のエビクションプロセスによって発生する障害が減少します。 | |
MongoDB 7.0 | シャードキー分析 | MongoDB 7.0 以降では、サンプリングされたクエリの結果に基づいて、コレクションのシャードキーが適切かどうかを判断できます。この方法で、インスタンスの スキーマとシャードキーを構成 し、シャードクラスタアーキテクチャをより効率的に使用できます。 |
クエリ可能な暗号化 | MongoDB 7.0 以降では、クエリ可能な暗号化により、機密データがデータのライフタイム全体にわたって暗号化され、クライアントでのみ復号化されます。データのライフタイムには、送信、保存、使用、ログ記録、バックアップの各フェーズが含まれます。この機能は、強化された包括的なデータセキュリティを確保し、データの盗難によるデータ漏洩のリスクを効果的に軽減します。 | |
メタデータ整合性チェック | MongoDB 7.0 以降では、データベースのメンテナンス期間が終了した後、または OOM エラーやフェールオーバーなどの例外が発生しなかった場合に、潜在的なメタデータまたはインデックスの不整合リスクを自動的に検出できます。 | |
ChangeStream によって処理される大規模な変更イベント | MongoDB 7.0 以降では、 | |
WT の動的調整 | MongoDB 7.0 以降では、WT のトランザクション同時実行性を動的に調整して調整を実装します。デフォルトでは、WT のトランザクション同時実行性は 128 に設定されています。これは、以前のバージョンで例外後にリクエストが蓄積されて発生するデータベース障害を解決します。 | |
MongoDB 8.0 | 高度な TCMalloc | MongoDB 8.0 以降、高度な TCMalloc が使用されます。
|
レプリケーションパフォーマンスの最適化 |
| |
再シャーディングパフォーマンスの最適化 | MongoDB 8.0 以降、 |