分析您的数据库

您可使用 Firebase CLI 内置的数据库性能分析器工具衡量自己的 Firebase Realtime Database 的性能。此分析器工具会记录给定的时间段内数据库中的所有活动,然后生成详尽的报告。您可以使用这些详尽的报告来排查数据库性能问题、找出存在问题的方面,以及减少未编入索引的查询。

构建分析

  1. 开始对 Firebase Realtime Database 进行分析之前,请确保使用的是最新版本的 Firebase CLI,并且您已针对要分析的数据库和项目对其进行了初始化。请注意,您必须是该项目的 Editor 或 Owner 才能进行分析。

  2. 使用以下命令开始对您的数据库进行分析:

    firebase database:profile
    记录数据库中的操作并构建分析时,此分析器工具会显示状态消息。

  3. Enter 键完成分析并显示结果。

解读结果

此分析器工具会将收集到的数据库操作数据汇总,并按三个主要类别显示结果:速度带宽未编入索引的查询

速度

速度报告衡量服务器对于每种类型操作的响应时间(以毫秒为单位)。但是,速度报告中衡量的速度可能并不能反映最终用户体验到的实际速度。网络条件等诸多因素都可能会导致客户端的延迟。

速度报告包含以下属性:

  • 路径:所发生的操作在数据库中的路径。如果子节点超过 25 个,分析器工具会将它们折叠为一个父路径,并添加一个 $wildcard 标记。您可能会在此报告中看到数据库的根目录(以正斜杠 / 表示)。
  • 计数:在给定路径中发生的操作数。
  • 平均执行速度:服务器执行处理该路径上特定操作类型所需的业务逻辑所用的平均时间。 此处测量的时间间隔开始于下面描述的“平均等待时间”测量的时间间隔之后。
  • 平均等待时间:请求在执行前排队等待的平均时间。此延迟对于所有客户端发起的请求都是通用的。服务器端请求的总延迟大致是该请求的等待时间和执行速度的总和。
  • 权限遭拒次数:给定路径中被数据库的 Firebase 数据库规则阻止的操作数。
速度报告(按操作类型)
读取执行速度 对于客户端发出的读取数据库数据的请求,服务器所用的响应时间。读取执行时间通常随读取的数据量而增减,但即使是一些小批量读取也可能因缓存预取而延迟。
写入执行速度 对于客户端发出的向数据库写入数据的请求,服务器所用的响应时间。写入执行时间随写入的数据量而增减。
连接执行速度 对于请求建立到数据库客户端,服务器所用的响应时间。 连接请求的延迟主要由与连接管理相关的内存服务器端簿记决定。
广播执行速度

服务器将数据分发到在监听给定路径以获取实时更新的客户端所用的时间。

广播速度报告中的计数属性汇总的是所发生的广播次数,而不是收到信息的客户端的数量。例如,如果有 10 个客户端在监听给定路径,并且服务器向所有 10 个客户端都广播了一次更新,即使 10 个客户端都接收了数据,广播计数也仅会反映 1 次广播。

广播速度报告中不包含权限遭拒次数属性。

带宽

带宽报告可透析数据库在传入和传出操作上所消耗的数据量。但是,您不能使用带宽报告来估算费用,因为其中不包括其他操作(例如对数据库进行分析)所用的带宽。 带宽报告大致估算进出数据库的读取、写入和广播操作所消耗的数据的载荷大小。这是一个用于衡量性能的工具,而不是预测费用的工具。

带宽报告包含以下属性:

  • 路径:所发生的操作在数据库中的路径。如果子节点超过 25 个,分析器工具会将它们折叠为一个父路径。

  • 总计:给定路径中所有操作使用的传出或传入总字节数。

  • 计数:在给定路径中发生的操作数。

  • 平均值:给定路径中发生的各种操作平均下载或上传的字节数(每次写入的字节数或每次读取的字节数)。

带宽报告
下载的字节数 通过客户端 SDK 和 REST API 发出的读取和广播操作所消耗的数据量。
上传的字节数 传入数据库服务器的写入请求所消耗的数据量。 删除操作显示为传入类别下的 0 字节的写入操作。

未编入索引的查询

未编入索引的查询可能会消耗大量带宽,因为客户端会下载一个位置下的所有数据,然后再对其进行查询。这会占用很多不必要的带宽。请尽可能将未编入索引的查询编入索引,以优化数据库的性能。

“未编入索引的查询”报告会显示以下属性:

  • 路径:未编入索引的查询在数据库中的路径。
  • 索引:为了将未编入索引的查询编入索引而应添加的规则。请参阅将数据编入索引,详细了解索引编制。
  • 计数:在给定路径中发生的未编入索引的查询的数量。

高级分析

如需查看数据库处理的所有操作,可在分析数据库时使用 --raw 标志,如下所示:

firebase database:profile --raw

原始输出还包括每个操作的客户端信息,例如 userAgent 字符串和 IP 地址。请参阅 Firebase Realtime Database 操作类型,详细了解您的 Firebase Realtime Database 中分析出来的不同操作。

性能分析器工具:不是结算工具

请勿使用分析器工具来估算带宽费用。性能分析器工具旨在为您提供数据库性能的整体概况,帮助您监控操作和排查问题,而不是估算费用。它不会考虑网络流量,只会记录进行响应时发送的应用数据的估算量。

对于有些网络流量,Firebase 会计费,但它们不会出现在数据库分析中。以下是这类流量的一些常见示例:

  • 协议开销:在服务器与客户端之间建立和维护会话需要一些额外的流量。根据底层协议,这部分流量可能包括:Firebase Realtime Database 的实时协议开销、WebSocket 开销和 HTTP 标头开销。每次建立连接时,这部分开销与所有 SSL 加密开销会一起产生连接费用。虽然这通常不会占用大量带宽,但如果您的有效负载很小或者您频繁地进行短时连接,那么这部分开销产生的费用可能会较高。
  • SSL 加密开销:实现安全连接需要进行 SSL 加密,而 SSL 加密开销也会产生相应的费用。平均来讲,初始握手的开销大约为 3.5KB,每条传出消息的 TLS 记录标头大约为 40B。对于大多数应用来说,这部分费用只占账单的一小部分。但是,如果您的具体使用情境需要大量的 SSL 握手,这部分费用所占的比例可能会较高。例如,不支持 TLS 会话票证的设备可能需要大量的 SSL 连接握手。

请参阅了解和估算您的账单以了解详情。