pt-mongodb-index-check
对 MongoDB 的索引执行检查,找出重复索引和未使用的索引。
语法
bash
pt-mongodb-index-check <command> [flags]用法示例
以下命令假定 MongoDB 已通过本机默认 URI(mongodb://localhost:27017)可达;需指定远程连接时用 --mongodb.uri= 提供连接串(命令里不要写明文密码,凭据从配置或密钥管理获取)。命令可直接复制,替换其中的库名与集合名即可。
场景:全库检查重复索引
例行巡检时扫一遍所有业务库,找出可作为其他索引前缀、应当删除的冗余索引:
bash
pt-mongodb-index-check check-duplicated --all-databases场景:只查某库的未用索引
只关心某个业务库,统计 $indexstats 中 accesses.ops = 0 的索引,避免维护无用索引拖慢写入:
bash
pt-mongodb-index-check check-unused --databases=appdb --all-collections场景:只查指定集合
针对 orders、customers 两张表做全部检查,聚焦排查范围:
bash
pt-mongodb-index-check check-all --databases=appdb --collections=orders,customers场景:远程实例检查
连接远程 MongoDB 做重复索引检查,URI 只带用户、密码由配置或交互提供:
bash
pt-mongodb-index-check check-duplicated --all-databases --mongodb.uri=mongodb://user@10.0.0.1:27017场景:JSON 输出便于脚本处理
把检查结果导出成 JSON,方便接入监控或工单系统做趋势分析:
bash
pt-mongodb-index-check check-all --all-databases --json功能说明
检查重复索引
检查作为其他索引前缀的索引。例如有如下两个索引:
javascript
db.getSiblingDB("testdb").test_col.createIndex({"f1": 1, "f2": -1, "f3": 1, "f4": 1}, {"name": "idx_01"});
db.getSiblingDB("testdb").test_col.createIndex({"f1": 1, "f2": -1, "f3": 1}, {"name": "idx_02"});由于 idx_02 的键与顺序与 idx_01 的前缀完全相同,因此 idx_02 可以被删除。
检查未使用的索引
获取所有索引的 $indexstats,报告其中 accesses.ops = 0 的索引。
命令
| 命令 | 说明 |
|---|---|
check-duplicated | 检查重复索引 |
check-unused | 检查未使用的索引 |
check-all | 运行全部检查 |
选项
| 选项 | 说明 |
|---|---|
--all-databases | 检查所有数据库(不含系统库) |
--databases=DATABASES,... | 要检查的数据库列表(逗号分隔) |
--all-collections | 检查所选数据库中的所有集合 |
--collections=COLLECTIONS,... | 要检查的集合列表(逗号分隔) |
--mongodb.uri= | 连接 URI |
--json | 以 JSON 格式输出 |
--version | 显示版本信息 |
其他信息
作者:Carlos Salguero
通用说明:已知问题的反馈方式、PTDEBUG 调试安全提示、系统要求基线,见 通用说明。
更多细节请阅读 官方文档。