MongoDB命令行与进程

一、命令行

MongoDB shell 不仅仅是一个交互式的 shell,它也支持执行指定 javascript文件,也支持执行
指定的命令片断。
有了这个特性,就可以将 MongoDB 与 linux shell 完美结合,完成大部分的日常管理和维护
工作。
1 通过 eval 参数执行指定语句
一般我们这样执行一条命令:

1
2
3
4
5
MongoDB shell version: 2.4.7
connecting to:  test
> db.stu.count()
10
>

实际上我们也可以这样:通过命令行 eval 参数直接执行语句:
140638732.png

2 执行指定文件中的内容
如果涉及到很多的操作后,才能得到结果,那么用 eval 的方式来做的话是不可能完成的,
那么更灵活的执行指定文件的方式就派上用场了。例如我们仍然要查看 test 库 stu 表中的记
录数:

1
2
3
4
cat  stu.js
var total = db.stu.count();
printjson( 'total count of stu is:' + total);
printjson( '----------------' );

大家可以看到最终得到stu表的记录数10,那么一些不必要的说明性文字我们要是不希望出
现该怎么办呢?
141145396.png

通过指定 quiet 参数,即可以将一些登录信息屏蔽掉,这样可以让结果更清晰。

二、进程控制

DBA 经常要解决系统的一些查询性能问题,此时一般的操作习惯是先查看有哪些进程,
然后将异常的进程杀掉,那么 MongoDB 是怎么样处理的呢?

1 查看活动进程
查看活动进程,便于了解系统正在做什么,以便做下一步判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
db.currentOp()
{
     "inprog"  : [
         {
             "opid"  : 62475494,
             "active"  true ,
             "secs_running"  : 2,
             "op"  "getmore" ,
             "ns"  "local.oplog.rs" ,
             "query"  : {
                                                                                                                                                                                             
             },
             "client"  "192.168.129.21:33065" ,
             "desc"  "conn1938595" ,
             "threadId"  "0x40458940" ,
             "connectionId"  : 1938595,
             "waitingForLock"  false ,
             "numYields"  : 0,
             "lockStats"  : {
                 "timeLockedMicros"  : {
                     "r"  : NumberLong(83),
                     "w"  : NumberLong(0)
                 },
                 "timeAcquiringMicros"  : {
                     "r"  : NumberLong(8),
                     "w"  : NumberLong(0)
                 }
             }
         }
     ]
}

字段说明:
Opid: 操作进程号
Op: 操作类型(查询,更新等)
Ns: 命名空间, 指操作的是哪个对象
Query: 如果操作类型是查询的话,这里将显示具体的查询内容
lockType: 锁的类型,指明是读锁还是写锁


2 结束进程
如果某个异常是由于某个进程产生的,那么一般 DBA 都会毫不留情的杀掉这个罪魁祸首的
进程,下面将是这操作

1
> db.killOp(1234/*opid*/)

注意:
不要 kill 内部发起的操作,比如说 replica set 发起的 sync 操作等

本文出自 “phper-每天一点点~” 博客,请务必保留此出处http://janephp.blog.51cto.com/4439680/1325394

你可能感兴趣的:(MongoDB命令行与进程)