Ant*_*och 7 database-administration database-performance mongodb
我正在尝试通过一些 Mongo 日志进行 grep 以尝试找到我需要优化的缓慢操作。慢查询日志记录是默认的,记录操作超过 100 毫秒。
我认为可以肯定地说,一般来说,搜索 COLLSCANS 会显示需要注意的查询。不太清楚的是,如果 IXSCANS 是我应该搜索的细节。
考虑此处的 MongoDB 文档:
https://docs.mongodb.com/manual/reference/explain-results/#collection-scan-vs-index-use
我的理解是这是一种二元情况,查询是 COLLSCAN 或 IXSCAN。因此,如果我对 IXSCAN 进行 grep,我将查看所有不是 COLLSCANS 的慢查询。这是真的?
我正在尝试通过一些 Mongo 日志进行 grep 以尝试找到我需要优化的缓慢操作。慢查询日志记录是默认的,记录操作超过 100 毫秒。
我强烈建议使用开源mtools
项目中的脚本,而不是通过 MongoDB 日志进行 grep 。注意:我不是mtools
原作者,但我是贡献者。
mtools
是一组 Python 脚本,其灵感来自于通过搜索 GB 的日志来尝试查找生产 MongoDB 部署感兴趣的信息的痛苦。关键脚本旨在适应通过连续过滤器(例如mlogfilter --scan | mplotqueries
)管道输出的典型命令行工作流程。
例如:
mloginfo --queries
是一个很好的起点:它聚合了查询模式,因此您可以专注于频繁运行且对您的部署具有更大整体影响的查询。mlogfilter
本质上是 MongoDB 日志的 grep:您可以按命名空间、持续时间、连接、模式和其他条件过滤日志行。该--scan
选项有助于识别不一定是集合扫描的低效查询。mplotqueries
是一个可视化日志的工具,它可以非常有助于识别模式和异常值。我认为可以肯定地说,一般来说,搜索 COLLSCANS 会显示需要注意的查询。不太清楚的是,如果 IXSCANS 是我应该搜索的细节。
集合扫描通常很有趣,但也可能是一次性查询或预期使用小集合的结果。我不会关注查询类型,而是查看部署中的慢查询(或一般的慢操作),以更好地了解您可能能够改进的内容。使用索引通常是好的,但有一些低效的索引使用(例如内存中排序或不区分大小写的正则表达式)值得解决。
我的理解是这是一种二元情况,查询是 COLLSCAN 或 IXSCAN。因此,如果我对 IXSCAN 进行 grep,我将查看所有不是 COLLSCANS 的慢查询。这是真的?
如果您使用 grep,IXSCAN
您将找到所有提到 的日志行IXSCAN
,但慢查询日志结果绝对不是二进制的,并且也会因 MongoDB 服务器版本而异。虽然高效的索引使用是一种明显的优化,但有许多内部查询规划器阶段可能与了解查询性能有关。
当您在日志中发现有趣的慢查询时,下一步通常是查看更详细的explain output
. 我使用explain(true)
(又名allPlansExecution
模式),因为这显示了被考虑的查询计划以及获胜计划的详细信息。如果您不确定如何解释慢查询的解释输出,我建议您在DBA StackExchange上发帖。
值得注意的是,解释查询并不是衡量工作负载的实际性能。在正常操作中,查询计划被缓存,而详细explain
输出专门重新评估候选索引和查询计划。有关更多信息,请参阅MongoDB 手册中的查询计划。
归档时间: |
|
查看次数: |
6723 次 |
最近记录: |