記事のディレクトリ
現在のMongoDBインスタンスにパフォーマンスのボトルネックがあるかどうかについては、次の記事を参照して、現在のデータベース関連のパフォーマンスインジケーターの概要を理解してください。この記事では、主に、最適化が必要な場合に実行できる対策と方法について説明します。一部のSQL用のMongoDB。
MongoDB监控之OS监控:https://blog.csdn.net/weixin_37692493/article/details/113757816
MongoDB监控之数据库监控:https://blog.csdn.net/weixin_37692493/article/details/113757888
MongoDB监控之慢日志:https://blog.csdn.net/weixin_37692493/article/details/113763366
1.現在のセッションを表示し、遅いSQLを取得します
発生している問題については、現在のセッションを表示して、遅い問題のクエリを取得することができます
- 現在のすべてのセッションを直接クエリする
db.currentOp()
- 特定の指定された条件に基づいて、指定されたセッション情報を照会します
db.currentOp(
{
"active" : true,
"secs_running" : { "$gt" : 3 },
"ns" : /^db1\./
}
)
- フォーカス
client #请求是由哪个客户端发起
opid #操作的opid,可以通过 db.killOp(opid) 直接杀掉会话
secs_running/microsecs_running
#这个值重点关注,代表请求运行的时间,如果这个值特别大,就得注意了,看看请求是否合理
query/ns: #这个能看出是对哪个集合正在执行什么操作
lock*: #还有一些跟锁相关的参数
次に、遅いログを表示します
過去に発生した過去の問題で、サイトにサイトがない場合は、対応する問題期間の遅いログをクエリすることで、問題クエリを大まかに判断できます。
- 現在の低速ログパラメータのステータスを表示する
> db.getProfilingStatus()
{ "was" : 1, "slowms" : 100 }
- パラメータを動的に変更する
> db.setProfilingLevel(1,10)
{ "was" : 1, "slowms" : 100, "ok" : 1 }
> db.getProfilingStatus()
{ "was" : 1, "slowms" : 10 }
- 最近の遅いログレコードをクエリする
> db.system.profile.find().sort({$natrual: -1})
MongoDBは、デフォルトではスローログ機能を有効にしません。オンライン環境では、このパラメーターを有効にすることをお勧めします。このパラメーターは、データベースで動的にオンにすることができます。
- 主な懸念事項:
1)全表スキャン:
キーワード:COLLSACN、docsExamined
は上記のキーワードに注意を払い、全表スキャンクエリ(または更新/削除)の適切なインデックスの確立を最適化します。
2)不当なクエリ
キーワード:IXSCAN、keysExamined
複合インデックスの場合、インデックス作成の順序と並べ替えの最適化に注意する必要があります。
3)大量のデータを並べ替える
キーワード:キーワード:SORT、hasSortStage
SQLが大量のデータを並べ替える必要があり、並べ替えをインデックスで並べ替えることができない場合、MongoDBは結果セットを並べ替えのためにメモリに入れます。これはCPUリソースを非常に消費します。インデックスを使用して結果セットのサイズを縮小するか、インデックスを使用して最適化のために並べ替えることを検討できます。
3、性能評価テスト
上記の問題が解決された場合、他に最適化の余地はありませんが、データベースの負荷は依然として高いため、アップグレードを検討できます。