基于$indexStats 构建mongodb 所有集合的索引监控程序

使用mongodb时,为集合中经常查询的字段添加索引,能够提高查询效率,减少扫描数据次数,限制扫描数据量,减少排序时间和内存与CPU的消耗。但索引的更新会为数据的添加和更新带来额外的消耗。因此,需要定期检查索引的使用情况,删除无效索引。

本文基于indexStats 和 merge命令,简单实现了一个收集mongodb 所有集合索引使用统计信息的方法,方便查询mongodb 索引使用统计信息。

  • 使用 db.getCollectionNames()获取当前数据库的集合名称列表。

db.getCollectionNames() 返回当前数据库中所有集合和视图的名称数组。如果数据库开启了登录验证,返回用户有权限查看的集合和视图名称列表。

  • 通过$indexStats命令,查看集合统计信息。

$indexStats返回当前集合的索引统计信息。包括建立索引的字段,索引所在的主机名和端口,索引命中信息,分片名称,索引详细信息和索引当前的构建情况等。

  • 在aggregation 的最后一步,添加$merge,集中查询结果到数据表。

merge命令,用于aggregation pipeline的最后一步,将pipeline前面查询结果输出到一个集合。merge命令, 必须位于pipeline的最后一步。该命令,支持将查询结果输出到当前数据库,或者其他数据库。当输出的集合不存在时, merge命令会自动创建数据集。通过指定数据合成的字段和方法, merge 命令可以更新目标集合中具有相同字段数据,或覆盖已有的数据。

  • 查询集中后的索引统计数据集,获取无效索引信息。

按照上面4个描述的步骤,实现mongodb数据库索引使用统计信息和查询

javascript 复制代码
//查询当前数据库的集合名称列表
let collNameArray = db.getCollectionNames()

//就查询出的集合列表循环,查询出每个集合中索引统计信息
collNameArray.forEach((collName)=>{
    db.getCollection(collName)
    .aggregate([{
        $indexStats: {}
    }, {
        $addFields: {
            "_id" : {
                "coll_name": collName,
                "idx_name": "$name"
            }
        }
    }, {$merge: { into: {coll: "coll_index_stats" }, on: "_id",  whenMatched: "replace", whenNotMatched: "insert" }}])//将查询出的集合索引统计信息放入集合coll_index_stats.
})
//按照索引命中次数的倒序,查看索引列表
db.coll_index_stats.find().sort('-accesses.ops')

基于上面的程序,还可以添加定时器实现索引统计信息的定时收集。也可以使用现代化的前端技术,做一个更友好的页面,实时查看索引信息。

相关推荐
hacker_LeeFei1 小时前
Windows 下配置 Redis 8.10.2 开机自启:一次踩坑全记录
数据库·windows·redis
这个DBA有点耶2 小时前
MySQL字符集与排序规则深入:索引失效的隐蔽场景与排查方法
数据库·mysql·代码规范
zl_dfq2 小时前
Redis 之 【持久化 与 事务】
数据库·redis
闲云自留地3 小时前
从下载到登录:MySQL 在两大系统上的完整安装教程
数据库·mysql
SelectDB技术团队3 小时前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
数据结构·数据库·clickhouse·日志·apache doris·selectdb·湖仓架构升级
一 乐3 小时前
博客管理系统|基于springboot + vue博客管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕设
茉莉玫瑰花茶3 小时前
GO [ 类型 ]
开发语言·数据库·golang
ClouGence3 小时前
开源数据库管理工具 CloudDM 4.3.0 发布,支持 SQL 收藏,多数据源语法支持大幅增强
数据库·oracle·sql server
Summer-Bright4 小时前
深度 | 壁仞1.74亿中标智算中心:国产GPU从能用跨进商用,但4.5亿的大单却因凑不齐三家废标了
数据库·ai·国产gpu
云安全助手4 小时前
自建接入VS聚合平台:企业 AI 调用的选型思路与迁移成本拆解
java·大数据·数据库·人工智能·ai大模型