由于MongoDB没有关系型数据中强大的数据字典。因此,如果需要汇总统计一些内部信息,包括数据量,基本元信息,集群架构,状态信息。则需要自己写脚本统计。为日后工作方便,本人在此将一些统计信息通过JavaScript汇总。。使用方式如下:

脚本如下:(还有很多信息待收集统计,先走出第一步)

// 查看mongodb实例信息。

var maxSizeDb = 5;     // 看前多少数据库。默认为5
var maxSizeTable = 10; // 前五数据库中表排名前多少。 默认为10. function byteToGb(num){
return (num/1024/1024/1024).toFixed(2);
}; function byteToMb(num){
return (num/1024).toFixed(0);
}; function statsDbSize(){ var dbArray={}; // 获取数据库信息
dbInfo=db.adminCommand('listDatabases'); // 获取主机信息
hostinfo = db.hostInfo(); dbNameSizeArray = dbInfo.databases;
dbDiskSize = db.getSiblingDB(dbNameSizeArray[0].name); dbDiskSizeTotal = dbDiskSize.stats().fsTotalSize; print("=======服务器信息=================");
print("CPU核数:", hostinfo.system.numCores);
print("内存Size:(MB)", byteToMb(hostinfo.system.memSizeMB));
print("磁盘空间:",byteToGb(dbDiskSizeTotal),"GB");
print("系统版本:",hostinfo.os.name);
print("内核版本:",hostinfo.os.version);
print("最大文件打开数:",hostinfo.extra.maxOpenFiles);
print("是否启用numa:",hostinfo.system.numaEnabled); print("==================================\n") print("=======实例概览=======")
print("磁盘空间:",byteToGb(dbDiskSizeTotal),"GB",'\t||');
print("数据总大小:",byteToGb(dbInfo.totalSize),"GB",'\t||');
print("数据库个数:",dbNameSizeArray.length,'\t\t||');
print("===========================\n") // 获取副本集信息
//
rsinfo = db.adminCommand({replSetGetStatus:1});
// printjson(rsinfo); rsname = rsinfo.set;
print("=======副本集信息=======");
print("副本集:",rsname); rsOptimesLastCommittedOpTimeTs = rsinfo.optimes.lastCommittedOpTime.ts
rsOptimesReadConcernMajorityOpTimeTs = rsinfo.optimes.readConcernMajorityOpTime.ts
rsOptimesAppliedOpTimeTs = rsinfo.optimes.appliedOpTime.ts
rsOptimesDurableOpTimeTs = rsinfo.optimes.durableOpTime.ts
rslastStableCheckpointTimestamp = rsinfo.lastStableCheckpointTimestamp;
// print("最後提交時間:", (Date(rsOptimesLastCommittedOpTimeTs.toLocaleString())).toISOString())
print("最後提交時間:", Date(rsOptimesLastCommittedOpTimeTs.toLocaleString()))
print("一致性读時間:", Date(rsOptimesReadConcernMajorityOpTimeTs.toLocaleString()))
print("日志应用時間:", Date(rsOptimesAppliedOpTimeTs.toLocaleString()))
print("日志持久時間:", Date(rsOptimesDurableOpTimeTs.toLocaleString()))
print(" 检查点時間:", Date(rslastStableCheckpointTimestamp.toLocaleString()))
print("==========成员=====================") // 打印MongoDB副本集成员信息
rsinfoMember = rsinfo.members
//print("===========================================================================================")
print('ip:port \t\t health \t state \t optime \t syncSourceHost \t 成员角色');
for(var mem in rsinfoMember){
rsinfoMemberInfo = rsinfoMember[mem];
print('---------------------------------------------------------------------------------------------------------')
if(rsinfoMemberInfo.syncSourceHost == ""){ delimiterChar = '\t\t\t';
}
else{
delimiterChar = '\t';
}
if(rsinfoMemberInfo.optime == null){
print(rsinfoMemberInfo.name,'\t' ,rsinfoMemberInfo.health,'\t\t', rsinfoMemberInfo.state,'\t', "None", delimiterChar,rsinfoMemberInfo.syncSourceHost, '\t\t', rsinfoMemberInfo.stateStr);}
else{
print(rsinfoMemberInfo.name,'\t' ,rsinfoMemberInfo.health,'\t\t', rsinfoMemberInfo.state,'\t', rsinfoMemberInfo.optime.ts.getTime(), delimiterChar,rsinfoMemberInfo.syncSourceHost, '\t', rsinfoMemberInfo.stateStr);}
} // 获取副本集配置信息
rsconf = db.adminCommand( { replSetGetConfig: 1 } ); rsconfConfig = rsconf.config; // 成员設置
rsconfConfigMember = rsconfConfig.members;
// 全局設置
rsconfConfigSettings = rsconfConfig.settings;
rsconfprotocolVersion = rsconfConfig.protocolVersion;
rsconfwriteConcernMajorityJournalDefault = rsconfConfig.writeConcernMajorityJournalDefault;
rsconfConfigSettingschainingAllowed = rsconfConfigSettings.chainingAllowed;
rsconfConfigSettingsheartbeatIntervalMillis = rsconfConfigSettings.heartbeatIntervalMillis;
rsconfConfigSettingsheartbeatTimeoutSecs = rsconfConfigSettings.heartbeatTimeoutSecs;
rsconfConfigSettingselectionTimeoutMillis = rsconfConfigSettings.electionTimeoutMillis; print(" 协议版本( 影响):", rsconfprotocolVersion);
print(" 默认写策略:", rsconfwriteConcernMajorityJournalDefault);
print("是否允许链式复制:", rsconfConfigSettingschainingAllowed);
print("心跳检测间隔时间:", rsconfConfigSettingsheartbeatIntervalMillis);
print("心跳检测超时时间:", rsconfConfigSettingsheartbeatTimeoutSecs);
print(" 选举超时时间:", rsconfConfigSettingselectionTimeoutMillis); print("ip:port,\t\t arbiterOnly, \t buildIndexes, \t影藏节点, \t权重,\t 标签, \t 延时同步,\t 投票节点");
for(var i in rsconfConfigMember){
print('------------------------------------------------------------------------------------------------------')
var rsmember = rsconfConfigMember[i];
if(rsmember.tags = {}){ rsmember.tags = 'None';
}
print(rsmember.host, '\t',rsmember.arbiterOnly,'\t\t', rsmember.buildIndexes,'\t\t', rsmember.hidden,'\t\t', rsmember.priority, '\t',rsmember.tags,'\t', rsmember.slaveDelay,'\t', rsmember.votes) } // printjson(rsconfConfigMember);
// printjson(rsconfConfigSettings);
// print("===========================\n")
// for(var i=0; i<dbNameSizeArray.length; i++){
dbname = dbNameSizeArray[i].name;
dbvalue = byteToGb(dbNameSizeArray[i].sizeOnDisk);
dbArray[dbname] = dbvalue; } // 将时间戳转换成时间
// //printjson(dbArray);
// order by dbsize ,Get the top five(maxSizeDb) database names in the occupied space
var items = Object.keys(dbArray).map(function(key){ return [key, dbArray[key]];});
var sdbArray = items.sort(function(first, second){return second[1] - first[1]});
// maxSizeDbName = sdbArray.slice(0, maxSizeDb);
print("=========Overview Database=========")
print("库名","\t\t大小:GB\t\t||")
for(var i in sdbArray){
//print(sdbArray[i][0],'\t\t',sdbArray[i][1],'\t\t');
printjson(sdbArray[i],"||") } print("===========================\n") // 可以在这个里面加上前十大的集合
for(var j in sdbArray.slice(0, maxSizeDb)){
db1 = db.getSiblingDB(sdbArray[j][0]);
// printjson(db1.stats())
db2 = db.getSiblingDB(db1);
tableName = db2.getCollectionNames();
// print("集合\t","\t,大小\t行数")
for(var i in tableName){
tn = tableName[i];
// print(db1+'.'+tn);
}
} } statsDbSize()

mongoshell 执行JavaScript文件获取数据库实例基本信息的更多相关文章

  1. mysql数据库批量执行sql文件对数据库进行操作【windows版本】

    起因: 因工作需要,在本机测试环境升级mysql数据库,需逐条执行mysql数据库的sql文件对数据库进行升级,因此找了些关于mysql的文章,对批量升级数据库所需的sql文件进行升级. 整理思路: ...

  2. FireDAC 下的 Sqlite [3] - 获取数据库的基本信息

    在空白窗体上添加: TFDConnection, TFDPhysSQLiteDriverLink, TFDGUIxWaitCursor, TMemo procedure TForm1.FormCrea ...

  3. Oracle 数据库实例简介

      回到顶部 一:Oracle 数据库实例简介 1:数据库实例的启动顺序: 使用数据库其实就是访问内存.即:数据库实例.数据库的启动是顺序是 先 nomount ---->  mount --- ...

  4. sehlle脚本获取linux服务器基本信息

    将以下代码全选复制在linux机器上新建x.sh文件编辑复制进去执行即可. #获取linux服务器基本信息脚本 #!/bin/bash # #Name:system_info #Ver:1.0 #Au ...

  5. oracle数据库实例启动与关闭

    区分数据库与实例:实例是指各种内存结构和服务进程,数据库是指基于磁盘存储的数据文件.控制文件.参数文件.日志文件和归档日志文件组成的物里文件集合. 数据库实例启动: startup [nomount ...

  6. JavaScript 文件延迟和异步加载

    JavaScript 文件延迟和异步加载 -般情况下,在文档的 <head> 标签中包含 JavaScript 脚本,或者导入的 JavaScript 文件. 这意味着必须等到全部 Jav ...

  7. 利用PHP执行SQL文件,将SQL文件导入到数据库

    如何利用php自动执行.sql文件.其实很简单,就是获取sql文件中的内容,然后将每一句sql语句一次执行就行啦. 这是代码 //读取文件内容 $_sql = file_get_contents('t ...

  8. logstash快速入门 (这篇文章很不错 ) | 两种方式往logstash传输数据实例:Apache 日志(从文件获取)、Syslog方式

    原文地址:http://www.2cto.com/os/201411/352015.html 原文地址:http://logstash.net/docs/1.4.2/tutorials/getting ...

  9. 导入dmp文件时,需要删除原有ORACLE数据库实例

    导入dmp文件时,对于已存在的数据库实例及表处理方式:删除实例. 1.以管理员身份登录 sqlplus / as sysdba 2.停止实例 shutdown abort; 执行结果:ORACLE i ...

随机推荐

  1. Git 内部原理--初探 .git

    说到Git大家应该都非常熟悉,几乎每天都会用到它.在日常使用过程中,我们貌似并不需要关注其内部的原理,只需要记住那几个常用的命令,就可以说自己是会Git的人了.可是,事实真的是这样子的吗?今天我们就来 ...

  2. [Gevent]gevent 网络抓取问答

    我听说过gevent基于事件的异步处理功能 如何高效率,该项目已很少使用,今天是没什么学习一些简单的使用. 有正式书面一个非常好的教程 中国版的地址:http://xlambda.com/gevent ...

  3. 经典c开源项目

    1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连 ...

  4. WPF Path和图形

    <Window x:Class="GeometryDemo.MainWindow" xmlns="http://schemas.microsoft.com/winf ...

  5. MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制

    最近一直做物联网方面的开发,以下内容关于使用MQTT过程中遇到问题的记录以及需要掌握的机制原理,主要讲解理论. 背景 MQTT是IBM开发的一个即时通讯协议.MQTT构建于TCP/IP协议上,面向M2 ...

  6. 怎样开始GO编程?

    如果你想开始学习GO语法前,请先背熟下述4点: 1. 环境变量: 使用go env查看环境变量 GOARCH/GOHOSTARCH: 体系架构, amd64或386 GOOS/GOHOSTOS: 操作 ...

  7. WPF——TargetNullValue(如何在绑定空值显示默认字符)

    原文:WPF--TargetNullValue(如何在绑定空值显示默认字符) 说明:在数据绑定时,如果有些字段为空值,那么在数据绑定时可以用默认值来显示为空的字段. </Grid> { L ...

  8. VS2013环境里安装QT插件-“X86”与目标计算机类型“x64”冲突

    在VS2013环境里搭载QT老是出现模块计算机类型“X86”与目标计算机类型“x64”冲突 2.解决方案2.1 项目右键,属性>配置管理选择>x64,没有的话新建:2.2  项目右键,属性 ...

  9. C#图片保存与读取,以及图片另存

    照片的保存与读取 /// <summary> /// 图片转二进制 /// </summary> /// <param name="imgPhoto" ...

  10. 微信小程序把玩(十九)radio组件

    原文:微信小程序把玩(十九)radio组件 radio组件为单选组件与radio-group组合使用,使用方式和checkbox没啥区别 主要属性: wxml <!--设置监听器,当点击radi ...