ApsaraDB for MongoDB インスタンスの 1 秒あたりの入出力操作 (IOPS) 使用量は重要なメトリックです。インスタンスの IOPS 使用率が 100% に達するか、または 100% に近い場合、インスタンスの応答が遅くなり、使用できなくなることさえあります。このトピックでは、ApsaraDB for MongoDB インスタンスの IOPS 使用率を表示し、インスタンスでの IOPS 使用率が高い問題のトラブルシューティングを行う方法について説明します。
背景情報
通常、ホストが I/O リソースを競合しないようにするために、ほとんどのクラウドデータベースプロバイダーは、コントロールグループ (cgroup) などの手法を使用して I/O リソースを分離し、IOPS を制限しています。インスタンスの IOPS の上限は、インスタンスの仕様によって異なります。
使用上の注意
次のインスタンスの IOPS 使用量と IOPS 使用率 (%) のメトリックは、ApsaraDB for MongoDB コンソールに表示できません。スタンドアロンインスタンス、MongoDB 4.2 を実行しクラウドディスクを使用するレプリカセットインスタンス、および MongoDB 4.2 を実行しクラウドディスクを使用するシャードクラスターインスタンスです。
前述のインスタンスの [IOPS 使用量] と [IOPS 使用率 (%)] のメトリックは、コンソールの [モニタリングデータ] ページに 0 と表示されますが、これは実際の IOPS 使用量を示すものではありません。
IOPS 使用率の表示
モニタリングチャートで IOPS 使用率を表示する
ApsaraDB for MongoDB コンソール にログインします。インスタンスの [基本情報] ページの [仕様情報] セクションで、インスタンスの最大 IOPS を確認します。さまざまなインスタンス仕様のインスタンスの IOPS の上限の詳細については、「インスタンスタイプ」をご参照ください。
ApsaraDB for MongoDB コンソール にログインします。[モニタリングデータ] ページで、[IOPS 使用量] と [IOPS 使用率 (%)] のメトリックに基づいて最大 IOPS を判断します。IOPS メトリックの詳細については、「モニタリング項目とメトリック」をご参照ください。
I/O 問題の一般的な原因
I/O 問題は、次の一般的な原因によって発生する可能性があります。
メモリが不足している。I/O 問題は、メモリ内のキャッシュサイズと密接に関連しています。キャッシュサイズが大きいほど、ホットキャッシュデータの量が多くなります。システムに必要なディスク I/O リソースが少ないほど、I/O ボトルネックが発生する可能性は低くなります。キャッシュサイズが小さいほど、ホットキャッシュデータは少なくなります。システムはダーティページをディスクに頻繁にフラッシュするため、I/O ボトルネックが発生する可能性が高くなります。
ディスク I/O に関連するパラメーターと構成に問題がある。ジャーナル ログとランタイムログが頻繁にリフレッシュされる、書き込みセキュリティメカニズム (Write Concern) が正しく構成されていない、またはシャードクラスターインスタンスの moveChunk 操作が無効であるなどです。
I/O 問題の最適化戦略
ApsaraDB for MongoDB インスタンスに適切な仕様を選択し、一部のアプリケーションシステムのインデックス作成と書き込みポリシーを最適化することをお勧めします。
ApsaraDB for MongoDB インスタンスに適切な仕様を構成する
ホットデータサイズとキャッシュサイズの比率を予測することは困難です。ほとんどの場合、1 日あたりの最大 CPU 使用率と IOPS 使用率はどちらも 50% 以内です。
インデックスを最適化する
クエリが全表スキャンを引き起こしたり、不適切なインデックスを使用したりすると、IOPS 使用率が高くなります。たとえば、大量の I/O リソースが全表データのエクスポートに使用されます。多数のインデックスは大量のデータを生成するため、WiredTiger キャッシュ内のホットデータが減少します。ビジネスデータの書き込みでは、インデックスを更新するために複数の I/O 操作が必要になるため、I/O パフォーマンスに影響します。この場合は、適切な インデックス を作成することをお勧めします。
ビジネスアーキテクチャと O&M を最適化する
ディスク I/O がビジネスアーキテクチャのボトルネックにならないように、次の最適化対策を講じてください。
同時書き込み/読み取りスレッドの数を制御する
MongoDB はマルチスレッド アプリケーションです。高速な同時書き込みと複雑なクエリは、IOPS ボトルネックを引き起こし、セカンダリノードで継続的なレイテンシにつながることさえあります。書き込まれたデータ量が多いために I/O ボトルネックが発生する場合は、インスタンスを ApsaraDB for MongoDB シャードクラスターインスタンスにアップグレードすることをお勧めします。これにより、データはシャードによって水平方向に分割され、インスタンスの書き込みパフォーマンスが線形にスケールアウトされます。
オフピーク時にデータを書き込む
定期的な書き込みまたはバッチデータの永続化により、最大 IOPS が発生する可能性があります。この場合、現在のインスタンス構成がピーク書き込みの要件を満たしていない場合は、ビジネスデータをスムーズに書き込むために構成をアップグレードすることをお勧めします。たとえば、各バッチ書き込み操作にランダムなタイムスタンプを追加します。
オフピーク時に O&M 操作を実行する
パフォーマンスに大きな影響を与える O&M 操作は、ピーク IOPS を引き起こす可能性があります。オフピーク時に O&M 操作を実行することをお勧めします。ピーク IOPS は、データをバッチ書き込み、更新、または削除したり、インデックスを追加したり、コレクションに対してコンパクト操作を実行したり、データをバッチエクスポートしたりするときに発生する可能性があります。