MongoDBセッション管理と操作ガイド

MongoDBセッション関連操作

目次- MongoDBセッション関連操作

  • 現在の接続数と最大接続数の確認
  • maxTimeMS() による操作時間の制限
  • エラーを返す操作の確認
  • セッションの強制終了
  • クライアントIPアドレス別接続数の統計表示
  • 現在実行中のアクティブセッションの確認
  • 実行時間順での全アクティブセッションの表示
  • ローカルマシン上のセッションの確認(実行時間順)
  • 接続IDによるセッション情報の検索
  • ロック待機中のセッションの確認
  • 多数のロック待機時のチェック(テーブル/データベース/グローバルロック)
  • 1秒以上実行中の非バックグラウンドセッションの確認
  • インデックス作成中のセッションの確認

現在の接続数と最大接続数の確認

db.serverStatus().connections

maxTimeMS() による操作時間の制限

db.location.find( { "town": { "$regex": "(Pine Lumber)",
"$options": 'i' } } ).maxTimeMS(30) ---30msに制限
db.runCommand( { distinct: "collection",
key: "city",
maxTimeMS: 45 } ) --45msに制限

エラーを返す操作の確認

db.getLastError() 
OR
db.getLastErrorObj() 

セッションの強制終了

db.killOp(<opId>) 

db.currentOp(
{
"waitingForLock" : true,
$or: [
{ "op" : { "$in" : [ "insert", "update", "remove" ] } },
{ "query.findandmodify": { $exists: true } }
]
}
)


db.currentOp(
{
"waitingForLock" : true
}
)
db.currentOp(
{
"active" : true
}
)
use admin
db.aggregate( [
{ $currentOp : { allUsers: true } },
{$match:{host:"testdb:27107"}},
{$project:{_id:0,"host":1,"client":1,"active":1,"waitingForLock":1}}
] )

クライアントIPアドレス別接続数の統計表示

use admin
db.aggregate( [
{$currentOp : { allUsers: true ,idleConnections:true} },
{$project:{IP:{$split:["$client",":"]}}},
{$unwind:"$IP"},
{$match:{"IP":/^10\./}},
{$group:{_id:"$IP",count:{$sum:1}}}
]);

現在実行中のアクティブセッションの確認

use admin
db.aggregate( [
{$currentOp : { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1,command:1}},
{$match:{client:{$exists:true}}},
{$sort:{microsecs_running:-1}}
]).pretty();

全アクティブセッションの表示(実行時間順)

db.aggregate( [
{$currentOp : { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1}},
{$match:{client:{$exists: true}}},
{$sort:{microsecs_running:-1}}
]);

ローカルマシン上のセッションの確認(実行時間順)

db.aggregate( [
{$currentOp : { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1}},
{$match:{client:/^127.0.0.1/}},
{$sort:{microsecs_running:-1}}
]);

接続IDによるセッション情報の検索

db.aggregate( [
{$currentOp : { allUsers: true ,idleConnections:true} },
{$match:{connectionId:6459}},
{$sort:{microsecs_running:-1}}
]);

db.aggregate( [
{$currentOp : { allUsers: true ,idleConnections:true} },
{$match:{opid:297834751}},
{$sort:{microsecs_running:-1}}
]);

ロック待機中のセッションの確認

db.aggregate( [
   {$currentOp : { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1,waitingForLock:1}},
   {$match:{"waitingForLock":true}},
   {$count:"lock wait count"}
   ]);

多数のロック待機時のチェック(テーブル/データベース/グローバルロック)

db.aggregate( [
   {$currentOp : { allUsers: true ,idleConnections:false} }, 
{$match:{$or:[{"locks.Global":"W"},{"locks.Database":"W"},{"locks.Collection":"W"}]}}
   ])

テーブル/データベース/グローバルロックが検出された場合、対応するopidを使用してdb.killOp(opid)を実行してリソースを解放します。テーブルレベル以上のロックが見つからない場合は、待機状態でないセッションが何を実行しているか確認し、適切に対処します。

db.aggregate( [
{$currentOp : { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1,waitingForLock:1}},
{$match:{$and:[{"waitingForLock":false},{client:{$exists:true}}]}},
{$sort:{ microsecs_running:-1}}
]);

1秒以上実行中の非バックグラウンドセッションの確認

use admin
db.aggregate( [
{$currentOp : { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1,command:1}},
{$match: {$and:[{microsecs_running : { "$gt" : 1000000 }},{client:{$exists: true}}]}},
{$sort:{microsecs_running:-1}}
]);

インデックス作成中のセッションの確認

use admin
db.aggregate( [
   {$currentOp : { allUsers: true ,idleConnections:false} },
   {$project:{opid:1,client:1,op:1,command:1,ns:1,microsecs_running:1}},
   {$match: { op: "command", "command.createIndexes": { $exists: true }  }},
   {$sort:{microsecs_running:-1}}
   ])
db.currentOp(
{
"active" : true,
"numYields" : 0,
"waitingForLock" : false
}
)

db.currentOp(true).inprog.forEach(
function(opDoc){
if (opDoc.client)
printjson(opDoc.client)
}
)
db.currentOp(true).inprog.forEach(
function(opDoc){
if(opDoc.active && opDoc.op=='query')
printjson(opDoc)
}
)

タグ: MongoDB セッション管理 データベース パフォーマンスチューニング

8月3日 22:56 投稿