web-dev-qa-db-ja.com

Mongodb ReplicaSetセカンダリノードのCPU使用率が高い

MongoDBサーバーバージョンを使用しています:3.6.4(WiredTigerストレージエンジン)。

すべてのノードのCPU使用率グラフを共有する

プライマリー(0.33%) enter image description here

セカンダリ1(99%以下) enter image description here

セカンダリー2(99%以下) enter image description here

走ってみた

db.currentOp({"secs_running":{$ gte:3}})

見えるだけ

{
    "inprog" : [
        {
            "Host" : "XXXXXXXXXXXXX",
            "desc" : "WT RecordStoreThread: local.oplog.rs",
            "active" : true,
            "currentOpTime" : "2018-05-23T12:41:42.272+0000",
            "opid" : 18,
            "secs_running" : NumberLong(16636),
            "microsecs_running" : NumberLong("16636047730"),
            "op" : "none",
            "ns" : "local.oplog.rs",
            "command" : {

            },
            "numYields" : 0,
            "locks" : {

            },
            "waitingForLock" : false,
            "lockStats" : {
                "Global" : {
                    "acquireCount" : {
                        "r" : NumberLong(1),
                        "w" : NumberLong(1)
                    }
                },
                "Database" : {
                    "acquireCount" : {
                        "w" : NumberLong(1)
                    }
                },
                "oplog" : {
                    "acquireCount" : {
                        "w" : NumberLong(1)
                    }
                }
            }
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1527079298, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1527079298, 1),
        "signature" : {
            "hash" : BinData(0,"XXXXXXXXXXXXX"),
            "keyId" : NumberLong(0)
        }
    }
}

セカンダリマシンを再起動しようとしましたが、CPU使用率がピークに達することがあります。

readPreferencesecondaryPreferredとして設定しました

前もって感謝します

2
rahulb

Asya KamskyのMongoDBブログのドキュメントに従って ここ CPU負荷が、MongoDB(または一般的なデータベース)のボトルネック/制限リソースになることはほとんどありません。

MapReduceジョブや集約フレームワーククエリを多数実行していない限り、CPU使用率が高い場合は、クエリを調整していない可能性があります(ドキュメントを正しい順序で読み取ることによる並べ替えをサポートするインデックスではなく)。

注:書き込みの負荷が高いということは、利用可能なディスクドライブ領域の使用について心配するのではなく、利用可能なディスクIO帯域幅について心配する必要があります。

View Metricsに関連するAlerts and Monitoringここ へ。 serverStatus コマンドは、データベースの状態の概要を提供するドキュメントを返します。監視アプリケーションは、このコマンドを定期的に実行して、インスタンスに関する統計を収集できます。

db.runCommand( { serverStatus: 1 } )

たとえば、次の操作は、出力のrepl、metrics、およびlocks情報を抑制します。

db.runCommand( { serverStatus: 1, repl: 0, metrics: 0, locks: 0 } )

注:出力フィールドは、MongoDBのバージョン、基盤となるオペレーティングシステムプラットフォーム、ストレージエンジン、およびmongos、mongodを含むノードの種類によって異なりますまたはレプリカセットメンバー。

MongoDBのバージョンに固有のserverStatus出力については、適切なバージョンのMongoDBマニュアルを参照してください。

dbStats コマンドは、指定されたデータベースのストレージ統計を返します。コマンドの構文は次のとおりです。

db.runCommand({ dbStats: 1, scale: 1 })

ここで、スケールはオプションであり、デフォルトは1です。

例えば

> db.runCommand({ dbStats: 1, scale: 1 })
{
        "db" : "test",
        "collections" : 1,
        "views" : 0,
        "objects" : 4,
        "avgObjSize" : 86.75,
        "dataSize" : 347,
        "storageSize" : 36864,
        "numExtents" : 0,
        "indexes" : 1,
        "indexSize" : 36864,
        "fsUsedSize" : 275137204224,
        "fsTotalSize" : 499632828416,
        "ok" : 1

Scale引数を使用すると、バイト値のスケーリング方法を指定できます。たとえば、1024のスケール値は、バイト単位ではなくキロバイト単位で結果を表示します。

db.runCommand({ dbStats: 1, scale: 1024 })

あなたのさらなる参考のために ここここ

1