热片

为了帮助您排查性能问题,Bigtable 提供了识别和观察集群中的热分块的功能。本页面介绍热片,如何获取热片列表,并讨论何时识别热片很有帮助。在阅读本页内容之前,您应先阅读 Bigtable 概览

用于获取热片列表的方法的名称因语言而异。为简单起见,在本文档中,该方法通过其 RPC Cloud Bigtable Admin API 名称 ListHotTablets 来引用。您可以通过以下方式获取热片列表:

识别热片可帮助您完成以下任务:

了解热片

Bigtable 表被分成多个连续的行块(称为片),旨在帮助均衡查询工作负载。每个片都与一个节点关联,这些行上的操作在该节点上执行。为了优化性能,片会根据访问模式进行拆分或移动到其他节点。根据用户访问模式(读取、写入和扫描操作),片会在各节点之间重新均衡。如需详细了解负载均衡功能,请参阅 Bigtable 如何优化您的数据

热片是表现出节点 CPU 利用率过高的片,因为与其他片相比,该片使用的 CPU 百分比比例过大。这种不均衡的节点使用可能会导致延迟时间和复制延迟。

热片最常见的原因是热点;当应用经常访问表中彼此靠近的行时,就会发生热点问题。热点问题通常是架构设计未优化以在表之间分布应用访问模式导致的结果。如需了解如何设计行键以避免热点,请参阅架构设计最佳做法

如需获取热片列表,您必须分配具有 bigtable.viewer 权限的角色。

输出

ListHotTablets 方法会返回实例中给定集群的以下数据。

  • 片名称。Bigtable 分配给热片的唯一 ID。gcloud CLI 不会显示此字段。
  • 表。与热片关联的表的 ID。
  • CPU 使用量。 在该一分钟的时间间隔内,与热片关联的节点的平均 CPU 利用率(以百分比表示)。此百分比是从开始时间到结束时间写入 CPU 和读取 CPU 总和的平均值。
  • 开始时间。 热片时间段的开始时间。
  • 结束时间。 热片时间段的结束时间。
  • 开始键。 热片中的第一个行键。
  • 结束键。 热片中的最后一个行键。如果起始键和结束键相同,系统会附加 \000 后缀,表示平板电脑跨单行。

键在片中按字典顺序排序,因此开始键和结束键之间的任何键都包含在该热片中。

热点以一分钟的分辨率计算,一个片可能会在输出中重新出现。换句话说,单个片可能在多个分钟内被视为热片。

默认情况下,ListHotTablets 会搜索过去 24 小时的记录。如需在特定时间范围内搜索,请提供开始时间和结束时间。

返回的热片数量上限为 50。若要更改此设置,请提供页面大小。

如果集群中的所有片都不是热片,则该方法会返回空列表。

使用 gcloud CLI 的示例

在复制此示例之前,请安装 gcloud CLI

如需查看给定集群的热片列表,请在 Cloud Shell 或本地终端窗口中运行 hot-tablets list 命令。

  gcloud bigtable hot-tablets list CLUSTER_ID --instance INSTANCE_ID

替换以下内容:

  • CLUSTER_ID:集群的永久性标识符
  • INSTANCE_ID:实例的永久性标识符

如果集群中的任何片是热片,则终端会显示类似如下所示的输出。集群中的热片按 CPU 使用率降序列出。

TABLE      CPU_USAGE  START_TIME                 END_TIME                   START_KEY            END_KEY
test-data  89.3       2021-12-14T01:19:57+00:00  2021-12-14T01:20:57+00:00  user29333893046…    user29333893046…
test-data  22.8       2021-12-14T01:04:59+00:00  2021-12-14T01:06:59+00:00  user29333893046…    user29345657428…
test-data  20.9       2021-12-14T01:18:56+00:00  2021-12-14T01:20:56+00:00  user54519105346…    user545293
test-data  16.5       2021-12-14T01:18:56+00:00  2021-12-14T01:20:56+00:00  user49196524328…    user49206

热片数据的用例

识别集群中的热片可帮助您排查性能问题。您可以将 ListHotTablets 方法与其他监控工具(如 Bigtable 的 Key Visualizer 诊断工具)结合使用。

识别有问题的行键

您可以使用 ListHotTablets 来标识特定的行键和行范围。这可以提供对可能导致热点的访问模式的可观测性。

例如,假设表的行键架构是 [user_id]#[event_timestamp],用户 ID 和时间戳由井号分隔。获取热片列表可帮助您确定特定用户 ID 或事件时间戳是否会导致热点。通过确定访问模式,您可以采取进一步措施,例如重新设计行键或表,以在键空间中更均匀地分布使用情况。在此示例中,如果用户 ID 因单调递增并导致热点,您可以按其他顺序分配用户 ID,或改用通用唯一标识符 (UUID)。

如果开始行键和结束行键相同,并且结束行键附加了 \000 后缀,则会创建单行平板。当此分块收到不成比例的大量流量时,就会形成热点。

观察分钟级粒度的热点

您可以将热片列表与 Key Visualizer 的热图结合使用。虽然 Key Visualizer 非常适合观察键空间访问模式,但 ListHotTablets 可提供更高的粒度。

在 Key Visualizer 中检查热图后,您可以进一步探索特定热点。由于 Key Visualizer 会运行数周,因此其热点的数据以 15 分钟为间隔进行聚合。此外,一个 Key Visualizer 键空间可以组合使用多个片。

使用 Key Visualizer 确定热点发生的时间范围后,您可以运行 ListHotTablets 来获取键空间和时间空间内的粒度。较大的粒度对定期使用特别有用。ListHotTablets 可以识别 Key Visualizer 无法识别的短期热点。

识别集群中有问题的表

由于 Key Visualizer 是在表级层运行的,因此不一定是排查具有多个表的集群中的问题的最佳选择。ListHotTablets 是在集群级层运行的,因此您可以用它来识别 CPU 使用率较高的表并缩小问题范围。

后续步骤