mongodb 表结构导出,索引检查

 

1 表结构导出

var tableNames = db.getCollectionNames();

tableNames.forEach(function(item){

 var table = item ;
 if(table.indexOf("indexes" == -1)){
    var context = db[table].findOne();
    print(table + " *************************");
    for(var key in context){
        var dataTypes;
        if(context[key]==null){
            dataTypes="String";
        }else{
            dataTypes=context[key].constructor.name;
        }
        print(key+","+dataTypes);
    }
    
 }
});

缺点:随机查询一条数据,解析单条数据名称、类型,值为null时默认为String类型,无法将mongodb表结构完整导出,对于规整的mongodb表此语句适用

 

2 检查索引

var tableNames = db.getCollectionNames();

tableNames.forEach(function(item){

 var table = item ;
 if(table.indexOf("xx") != -1 && table.indexOf("yy") != -1){
     var indexNames = db[table].getIndexes();
     var count = db[table].count();
     
     if(indexNames.length==1){
         var str = table + " No index , count : " + count;
          print(str);
     }
    
 }
});


 


## 表名称过滤
var tableNames = db.getCollectionNames();
tableNames.forEach(function(item){
 
  var table = item ;
  if(table.indexOf("TEST_") != -1 && table.indexOf("202012") != -1){
   print(table);
  }
 });
 

## 索引大表扫描
var tableNames = db.getCollectionNames();
tableNames.forEach(function(item){

 var table = item ;
 if(table.indexOf("TEST_") != -1 && table.indexOf("202012") != -1){
     var indexNames = db[table].getIndexes();
     var count = db[table].count();
     if(indexNames.length==1){
          var str = table + " No index , count : " + count;
          print(str);
     }
 }
});


慢查询kill
db.currentOp({op: "query",secs_running:{$gt: 8},ns:/TEST_XX_2020_9/}).inprog.forEach(function(item) {
 var lock_info = it;
  print("kill", item.opid);
  db.killOp(item.opid)
})
 
 
 
## 大表扫描
 
var tableNames = db.getCollectionNames();
tableNames.forEach(function(item){
 var table = item ;
 if(table.indexOf("TEST_") != -1 && table.indexOf("2020_9") != -1){
     var count = db[table].count();
     if(count > 1000000){
       var str = table + " count : " + count;
       print(str);
       }
     }
 }
);
 
 
 
## 数据大小统计 GB 
var tableNames = db.getCollectionNames();
var totalStorageSize = 0;
tableNames.forEach(function(item){
  var table = item ;
  if(table.indexOf("TEST_") != -1 && table.indexOf("202012") != -1){
  var storageSize = db[table].stats(1024);
  var str = table + " size KB: " + storageSize.storageSize;
  totalStorageSize += storageSize.storageSize;
  print(str);

  }
 });
 print("totalSize GB :  " + totalStorageSize/1024/1024);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值