MongoDB管理与监控

MongoDB学习笔记系列博客


一,MongoDB的启动

Windows平台安装MongoDB
Linux平台安装MongoDB
MongoDB连接


二,MongoDB的停止

> use admin
switched to db admin
> db.shutdownServer()

三,数据的导入与导出

MongoDB自带了两个导入、导出的工具:mongoimport和mongoexport。可以通过mongoimport导入JSON、CSV和TSV文件,这通常用于从关系型数据库想MongoDB加载数据。

mongoimport -d stocks -c values --type csv --headerline stocks.csv

本例中,将一个名为stocks.csv的CSV文件导入到了stocks数据库的values集合里。–headerline标志标明了CSV的第一行包含字段名。可以通过mongoimport –help看到所有的导入选项。
可以通过mongoimport 将一个集合的所有数据导出到一个JSON或CSV文件里。

mongoexport -d stocks -c values -o stocks.csv

这条命令会将数据导出到stocks.csv文件。通过mongoexport –help看到所有的导入选项。


四,MongoDB备份与恢复

http://write.blog.csdn.net/mdeditor#!postId=74855050


五,MongoDB监控

http://www.runoob.com/mongodb/mongodb-mongostat-mongotop.html

数据库命令serverStatus
这是一个数据库级别的命令,执行语句db.serverStatus(),输出有关此实例的各种信息,针对所有此实例上的数据库。

db.serverStatus()
//只显示部分内容
{
"uptime" : 21.0, //表示此实例进程已激活的总时间,单位是秒
"localTime" : ISODate("2017-07-09T05:28:17.007Z"),  //表示实例所在服务器的当前时间
"globalLock" : {
        "totalTime" : NumberLong(20935000),  //数据库启动后运行的总时间,单位是微秒
        "currentQueue" : {  //表示因为锁引起读写队列数
            "total" : 0,
            "readers" : 0,  //等待读锁的操作数
            "writers" : 0  //等待写锁的操作数
        },
        "activeClients" : {  //连接的激活客户端写操作的总数
            "total" : 10,
            "readers" : 0,  //激活客户端读操作数
            "writers" : 0  //激活客户端写操作数
        }
    },
    "mem" : {  //表示当前内存使用情况
        "bits" : 64,  //mongod运行的目标机器的架构
        "resident" : 96,  //当前被使用的物理内存总量,单位MB
        "virtual" : 271,  //MongoDB进程映射的虚拟内存大小,单位MB
        "supported" : true,  //表示系统是否支持可扩展内存
        "mapped" : 0,  //映射数据文件所使用的内存大小,单位MB
        "mappedWithJournal" : 0  //映射journaling所使用的内存大小,单位MB
    },
}

数据库命令stats
这是一个现实具体某个数据库统计信息的方法。

db.stats()
{
    "db" : "test",  //表示统计的哪个数据库
    "collections" : 4,  //在这个数据接口包含的集合数
    "views" : 0, 
    "objects" : 112,  //数据库中所有记录总数
    "avgObjSize" : 234470.9375,  //数据库中文档的平均大小,单位字节
    "dataSize" : 26260745.0,  //数据库中包含的所有文档记录的总大小
    "storageSize" : 21544960.0,  //分配给数据库的总的存储空间大小
    "numExtents" : 0,  //所有集合占用的区间总数
    "indexes" : 8,  //数据库中创建的索引总数
    "indexSize" : 200704.0,  //数据库中索引占用的存储空间大小
    "ok" : 1.0
}

top
top命令会显示每个数据库的操作计数器。如果应用程序使用了多个物理数据库,或者你想看看操作的平均耗时,可以使用这个命令。

use admin
db.runCommand({top:1})

MMS
MMS(MongoDB Management Service)是一款基于云存储管理的MongoDB可视化管理及数据库备份的工具。

Web控制台
启动mongodb加上参数–httpinterface,以你的mongodb端口号+1000进行访问,就能看到MongoDB自带的Web控制台

http://localhost:28017/

影响数据库性能的几个重要因素
1,锁
MongoDB用一个锁确保数据的一致性。但如果某种操作时间运行,其他请求和操作将不得不等待这个锁,导致系统性能降低。为了验证是否由于锁降低了性能,我们可以坚持serverStatus输出的globalLock部分的数据。如果参数globalLock.currentQueue.total的值一直较大,说明系统中有许多请求在等待锁,同时表明并发问题影响了系统的性能。

2,内存
MongoDB通过内存映射数据文件,如果数据集很大,MongoDB将占用所有可用的系统内存。正式由于内存映射机制将内存的管理交给操作系统来完成,简化了MongoDB的内存管理,提高了数据库系统的性能,但是由于不能确定数据集的大小,需要多少内存也是个未知数。
通过serverStatus输出的关于内存使用状态方面的数据,我们能够深入地了解内存使用情况。检查参数mem.resident的值,如果超过了系统内存量并且还有大量的数据文件在磁盘上,表明内存过小。检查mem.mapped的值,如果这个值大于系统内存量,那么针对数据库的一些读操作将会引起操作系统的缺页操作,内存的换入换出将会降低系统的性能。

3,连接数
有时候,客户端的连接数超过了MongoDB数据库服务器处理请求的能力,这也会降低系统的性能。可以通过serverStatus输出的关于连接数方面的参数进一步分析。参数globalLock.activeClients表示当前正在进行读写操作客户端的连接数,current表示当前客户端到数据库实例的连接数,available表示可用连接数。对于读操作大的应用程序,我们可以增加复制集成员数,将读操作分发到secondary节点上,对于写操作大的应用程序,可以通过部署分片集群来分发写操作。

性能调优
1,为提升性能检查索引和查询
发现性能问题时,应该首先检查索引,让每个操作扫描尽可能少的文档。
保证没有冗余的索引,因为冗余索引会占用磁盘空间,消耗更多内存,每次写入时还需要更多工作。

2,添加内存

3,提升磁盘性能

4,水平扩展

5,寻求专业帮助


六,权限控制

基于角色的权限控制(Role-Based Access Control)
https://docs.mongodb.com/manual/security/


七,参考资料

《大数据存储 MongoDB实战指南》
《MonoDB实战》
《MongoDB权威指南》
菜鸟教程 MongoDB

你可能感兴趣的:(MongoDB)