pt-mongodb-query-digest
通过聚合 MongoDB 查询分析器(query profiler)中的查询,报告查询使用统计信息。
语法
bash
pt-mongodb-query-digest [OPTIONS]用法示例
以下命令假定 MongoDB 运行在本机默认地址 localhost:27017 且未启用认证或已在本机配好凭据;需指定用户时用 -u 用户名 -p(不带值会交互式询问密码,避免明文)、-a 指定认证库。命令可直接复制,替换其中的库名与阈值即可。
场景:默认全库分析
第一次排查时直接跑,按查询次数升序看各类查询的使用统计:
bash
pt-mongodb-query-digest场景:只分析某个库
只分析 appdb 的查询画像,输出更聚焦:
bash
pt-mongodb-query-digest -d appdb场景:按耗时看最慢查询
按执行耗时倒序、只看最慢的 20 类查询,定位性能热点:
bash
pt-mongodb-query-digest --order-by=-query-time -n 20场景:按扫描文档数找全表扫描
按 docs-examined 排序找出扫描文档最多的查询(扫描/返回比高者多为全表扫描):
bash
pt-mongodb-query-digest --order-by=docs-examined -n 20场景:JSON 输出接入监控
导出 JSON 格式,方便程序解析或入库做慢查询告警:
bash
pt-mongodb-query-digest -f json -d appdb场景:带认证分析并跳过集合
用指定账号连接、并跳过 metrics、cache 两个高频集合的统计:
bash
pt-mongodb-query-digest -d appdb -u analyst -p -a admin -s metrics,cache功能说明
工具会执行如下查询:
javascript
db.getSiblingDB("samples").system.profile.find({"op":{"$nin":["getmore", "delete"]}});然后按指纹(fingerprint)和命名空间(database.collection)对结果分组。 指纹按文档中的键列表(排序后)计算,最大深度为 10 层。 默认按查询次数升序排序输出。
选项
| 选项 | 说明 |
|---|---|
-?, --help | 显示帮助并退出 |
-a, --authenticationDatabase | 用于向 MongoDB 服务器建立凭据和权限的数据库,默认为 admin |
-c, --no-version-check | 不检查更新 |
-d, --database | 指定要分析的数据库 |
-f, --output-format | 报告输出格式:text、json,默认 text |
-l, --log-level | 日志级别:panic、fatal、error、warn、info、debug、error |
-n, --limit | 限制显示的查询数量 |
-o, --order-by | 指定排序字段:count、ratio、query-time、docs-examined、docs-returned;字段前加 - 表示倒序,例如 --order-by="count,-ratio" |
-p, --password | 连接启用认证的服务器时使用的密码;选项与值之间不加空格(-p<password>);不提供值时会提示输入 |
-s, --skip-collections | 要跳过的集合列表(逗号分隔),默认跳过 system.profile;设为 --skip-collections="" 表示空列表 |
--sslCAFile | 用于认证的 SSL CA 证书文件 |
--sslPEMKeyFile | 用于认证的 SSL 客户端 PEM 文件 |
-u, --user | 连接启用认证的服务器时使用的用户名 |
-v, --version | 显示版本并退出 |
输出示例
# Query 3: 0.06 QPS, ID 0b906bd86148def663d11b402f3e41fa
# Ratio 1.00 (docs examined/returned)
# Time range: 2017-02-03 16:01:37.484 -0300 ART to 2017-02-03 16:02:08.43 -0300 ART
# Attribute pct total min max avg 95% stddev median
# ================== === ======== ======== ======== ======== ======== ======= ========
# Count (docs) 100
# Exec Time ms 2 3 0 1 0 0 0 0
# Docs Examined 5 7.50K 75.00 75.00 75.00 75.00 0.00 75.00
# Docs Returned 92 7.50K 75.00 75.00 75.00 75.00 0.00 75.00
# Bytes recv 1 106.12M 1.06M 1.06M 1.06M 1.06M 0.00 1.06M
# String:
# Namespaces samples.col1
# Operation query
# Fingerprint find,shardVersion
# Query {"find":"col1","shardVersion":[0,"000000000000000000000000"]}其他信息
作者:Carlos Salguero
通用说明:已知问题的反馈方式、PTDEBUG 调试安全提示、系统要求基线,见 通用说明。
更多细节请阅读 官方文档。