DocumentDB インスタンスの CPU 使用率が高い場合のトラブルシューティングと解決方法を教えてください。
最終更新日: 2020 年 6 月 17 日
Amazon DocumentDB (MongoDB 互換) インスタンスで CPU 使用率が高まっています。高い CPU 使用率を解決するにはどうすればよいですか?
簡単な説明
Amazon DocumentDB インスタンスの CPU 使用率は、次の理由で増加する可能性があります。
- ユーザーが開始するワークロードの負荷が高い
- クエリが非効率的
- クラスター内の負荷を分散する代わりに、クラスター内のライターまたは特定の DB インスタンスに過剰な負荷をかける。
CPU パフォーマンスの問題をトラブルシューティングするには、次のリソースを使用します。
- DB インスタンスの実行が遅い理由を確認するには、システムが突然遅くなる理由を判断する方法を参照してください。
- DB インスタンスで実行時間が長いクエリを特定して終了するには、長時間実行またはブロックされたクエリを見つけて終了する方法を参照してください。
- クエリが進行中かどうかを確認するには、クエリが進行中であるかを確認する方法を参照してください。
- クエリの実行に時間がかかる理由を確認するには、クエリプランを参照してクエリを最適化する方法を参照してください。
解決方法
replicaSet を使用したワークロードの分割
複数の DB インスタンスがある DocumentDB クラスターがある場合は、ライター CPU が高く、リーダーがアイドル状態になっているかどうかを確認します。これは、ライターが過負荷であることを意味します。
これを解決するには、replicaSet を使用してワークロードを分割するか、複数の接続プールを使用して読み取りクエリをリーダー DB インスタンスにルーティングします。
接続用の readPreference を指定する
レプリカセットとして接続するときは、接続用の readPreference を指定できます。読み込み設定として secondaryPreferred を指定すると、クライアントは読み取りクエリをレプリカにルーティングし、書き込みクエリをプライマリ DB インスタンスにルーティングします。次の例は、Python の接続文字列を示しています。
## Create a MongoDB client, open a connection to Amazon DocumentDB as a
## replica set and specify the read preference as secondary preferred
注意: リードレプリカからの読み込みには結果整合性があります。
クラスターに 1 つ以上のリーダーインスタンスを追加する
単一の DB インスタンスを持つ DocumentDB クラスターがある場合 (ライターのみ)、クラスターに 1 つ以上のリーダー DB インスタンスを追加します。次に、readPreference=secondaryPreferred を使用して負荷を効率的に処理します。
Profiler を使用して低速クエリを識別する
負荷がすべてのレプリカに均等に分散されている場合は、プロファイラーを使用して、時間の経過によって遅くなるクエリを特定します。
DB インスタンスのインスタンスクラスをスケールアップする
DocumentDB クラスター内の DB インスタンスのインスタンスクラスをスケールアップして、ワークロードを処理することもできます。
注意: インスタンスクラスをスケールアップすると、コストが増加します。 詳細については、DocumentDB の料金表を参照してください。