定义
大于100毫秒的数据库命令会被记录到慢日志,可以是查询命令、数据更新命令或者创建索引命令等。其中查询耗时长是最常见的慢日志,原因一般都是未合理设置索引导致查询对全表数据进行扫描导致,后文统称这类命令为慢查询。慢查询是影响数据库性能的第一原因,在出现慢日志后您需要尽快判断是否为慢查询,并根据慢日志详情分析查询条件合理设置索引。
当慢查询在短时间内大量出现时,为保障其他租户的权益,将会对您的服务空间进行限流。
慢查询由数据库内核对命令耗时进行统计,会存在性能毛刺,即一张表数据量很小的情况,查询也被统计为慢日志,这类慢日志您可以放心忽略也不会限流。您只需要关注一张表存在数十万甚至更多条数据的慢查询情况并进行优化。
慢日志趋势
打开控制台可以查询指定时间范围的慢日志趋势,支持查看一周内的统计数据。
慢日志数量曲线:记录分钟级的慢日志数量随着时间的趋势变化。
慢日志扫描文档数曲线:记录分钟级的慢日志对全表数据进行扫描的文档记录总量总随着时间的趋势变化。
慢日志详情
打开控制台可以查询慢日志详情。支持查看一周内的慢日志详情。支持按照集合表名进行过滤。支持按照执行时间、文档扫描数量、索引扫描数量进行排序。
一行慢日志一般包含以下几个字段,含义解释如下:
字段 | 含义 |
集合名称 | 命令操作的集合名称 |
执行开始时间 | 该命令开始执行的时间 |
执行时长(毫秒) | 该命令执行耗时 |
文档扫描行数 | 该命令对数据库多少行数据进行了扫描。 说明 对于慢查询命令,当索引设置合理时该数值应该和索引扫描行数、返回行数尽可能接近。 |
索引扫描行数 | 该命令对数据库多少行索引进行了扫描。 说明 对于慢查询命令,如果该值远大于返回行数,说明您的索引是无效索引。 |
返回行数 | 该命令执行后匹配返回的数据行数。 |
慢日志语句 | 详细的命令模板,您可以通过JSON工具美化方便进行分析。 说明 对于慢查询命令您需要特别关注 filter 字段,例:...{"filter":{"userId":"xxx"}}...,表示以userId=xxx作为查询条件进行的查询。此时您可以检查下是否建立了userId的索引。 |