Skip to content

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

场景:带认证分析并跳过集合

用指定账号连接、并跳过 metricscache 两个高频集合的统计:

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报告输出格式:textjson,默认 text
-l, --log-level日志级别:panicfatalerrorwarninfodebugerror
-n, --limit限制显示的查询数量
-o, --order-by指定排序字段:countratioquery-timedocs-examineddocs-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 调试安全提示、系统要求基线,见 通用说明

更多细节请阅读 官方文档

Percona Toolkit 中文文档 · 社区维护的第三方学习站