17.MongoDB系列之了解应用程序动态

1. 查看当前操作
mongos> db.currentOp()
{
        "inprog" : [
                {
                        "shard" : "study",
                        "type" : "op",
                        "host" : "2bffe09ec303:27019",
                        "desc" : "ReplBatcher",
                        "active" : true,// 操作是否正在执行
                        "opid" : "study:3427",// 操作的唯一标识符
                        "numYields" : 0,// 操作释放锁允许其他操作进行的次数
                        "locks" : {// 描述操作获取锁的类型

                        },
                        "waitingForLock" : false,// 操作当前是否处于阻塞并等待结果
                },
                {
                        ...
                        "secs_running" : NumberLong(0),// 操作执行时间(秒)
                        "microsecs_running" : NumberLong(239),// 操作执行时间(微秒)
                        "op" : "command", // 操作类型      
                }          
        ],
        "ok" : 1,
        ...
}
1.1 寻找有问题操作

client字段可以跟踪旧版本或者漏洞版本的软件信息

1.2 终止操作
// 传入opid,只有当操作让出时,才能终止操作
> db.killOp('study:2')
1.3 假象

任何在local.oplog.rs上长时间运行的请求及任何回写监听命令都可以被忽略。
MongoDB会长时间运行若干请求,最常见是复制线程和用于分片的回写监听器。

1.4 防止幻象操作

如果MongoDB中请求发生堆积,呢么写操作将堆积在操作系统的套接字缓冲区中。当终止正在进行的写操作时,就会开始处理缓冲区中的写操作。即使客户端停止发送写操作,MongoDB也会处理那些写入缓冲区的操作。
防止幻像写入的最好方法是执行写入确认机制。

2. 计算大小
2.1 文档

获取文档大小

> Object.bsonsize({_id:ObjectId()})
> Object.bsonsize(db.users.findOne())
2.2 集合
// 查看整个集合的信息
> db.movies.stats()
// 以TB为单位获取集合的统计数据
> db.big.stats(1024*1024*1024*1024)
2.3 数据库
// 查看整个数据库的信息
> db.stats()
3. 使用mongotop和mongostat
# mongotop -h localhost:27039
2022-07-24T11:43:55.304+0800    connected to: mongodb://localhost:27039/

                  ns    total    read    write    2022-07-24T11:43:56+08:00
      local.oplog.rs      1ms     1ms      0ms
   admin.system.keys      0ms     0ms      0ms
  admin.system.roles      0ms     0ms      0ms
admin.system.version      0ms     0ms      0ms
    config.actionlog      0ms     0ms      0ms
       config.chunks      0ms     0ms      0ms
  config.collections      0ms     0ms      0ms
    config.lockpings      0ms     0ms      0ms
       config.mongos      0ms     0ms      0ms
     config.settings      0ms     0ms      0ms
# mongostat -h localhost:27039
// insert query update delete getmore command 每秒操作发生次数简单统计
// flushes 将数据刷新到磁盘的次数
// vsize 所使用虚拟内存数量
// res 正在使用内容大小
// qr|qw 读操作和写操作的队列大小
// ar|aw 有多少活跃的客户端
// net_in net_out 网络传入传出字节数
// conn 连接数
insert query update delete getmore command dirty used flushes vsize  res qrw arw net_in net_out conn      set repl                time
    *0    *0     *1     *0       2     7|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0  3.89k   79.6k   16 configRS  SEC Jul 24 11:52:41.199
    *0    *0     *0     *0       0     1|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0   524b   74.5k   16 configRS  SEC Jul 24 11:52:42.202
    *0    *0     *0     *0       0     4|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0  1.06k   76.2k   16 configRS  SEC Jul 24 11:52:43.200
    *0    *0     *0     *0       0     2|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0   731b   75.5k   16 configRS  SEC Jul 24 11:52:44.200
    *0    *0     *0     *0       0     3|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0  1.06k   76.0k   16 configRS  SEC Jul 24 11:52:45.200
    *0    *0     *0     *0       1     3|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0  1.84k   76.0k   16 configRS  SEC Jul 24 11:52:46.199
    *0    *0     *0     *0       0     3|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0  1.06k   76.0k   16 configRS  SEC Jul 24 11:52:47.200
    *0     2     *0     *0       0     2|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0  1.37k   75.9k   16 configRS  SEC Jul 24 11:52:48.199
    *0    *0     *0     *0       0     3|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0  1.06k   76.0k   16 configRS  SEC Jul 24 11:52:49.200
    *0    *0     *0     *0       0     2|0  0.0% 0.0%       0 1.93G 154M 0|0 1|0   731b   75.4k   16 configRS  SEC Jul 24 11:52:50.200

欢迎关注公众号算法小生沈健的技术博客

posted @ 2022-10-17 20:19  算法小生  阅读(30)  评论(0编辑  收藏  举报