run_command
은 currentOp
을 직접 수행 할 수 없습니다.
> db.currentOp
function (arg) {
var q = {};
if (arg) {
if (typeof arg == "object") {
Object.extend(q, arg);
} else if (arg) {
q.$all = true;
}
}
return this.$cmd.sys.inprog.findOne(q);
}
그래서 우리가 같은 inprog
배열을 얻기 위해 펄 측의 특별 징수 $cmd.sys.inprog
를 조회 할 수 있습니다 : 우리는 mongo
쉘 db.currentOp
의 구현을 보면 그것이 후드 아래에 어떻게 작동하는지 그러나, 우리는 볼 수 있습니다 그 껍질에 반환됩니다. 서버가 가 잠겨 있지 경우
use strict;
use warnings;
use MongoDB;
my $db = MongoDB::MongoClient->new->get_database('test');
my $current_op = $db->get_collection('$cmd.sys.inprog')->find_one;
, 그것은 이런 식으로 뭔가 보이는 $current_op
구조를 반환합니다 fsyncLock()
동안
{
'inprog' => [
{
'connectionId' => 53,
'insert' => {},
'active' => bless(do{\(my $o = 0)}, 'boolean'),
'lockStats' => {
'timeAcquiringMicros' => {
'w' => 1,
'r' => 0
},
'timeLockedMicros' => {
'w' => 9,
'r' => 0
}
},
'numYields' => 0,
'locks' => {
'^' => 'w',
'^test' => 'W'
},
'waitingForLock' => $VAR1->{'inprog'}[0]{'active'},
'ns' => 'test.fnoof',
'client' => '127.0.0.1:50186',
'threadId' => '0x105a81000',
'desc' => 'conn53',
'opid' => 7152352,
'op' => 'insert'
}
]
};
을, 당신은 빈 inprog
배열을 얻을 수 있지만거야 유용한 info
필드와 예상되는 fsyncLock
부울을 갖습니다.
{
'info' => 'use db.fsyncUnlock() to terminate the fsync write/snapshot lock',
'fsyncLock' => bless(do{\(my $o = 1)}, 'boolean'), # <--- that's true
'inprog' => []
};
모두 함께 넣어 그래서
, 우리가 얻을 : 나는 실제로 bash는 해결책을 전환하기로 결정
use strict;
use warnings;
use MongoDB;
my $db = MongoDB::MongoClient->new->get_database('fnarf');
my $current_op = $db->get_collection('$cmd.sys.inprog')->find_one;
if ($current_op->{fsyncLock}) {
print "fsync lock is currently ON\n";
} else {
print "fsync lock is currently OFF\n";
}
을했다. 고마워요! –