索引键的热图模式

本页介绍了您可能会在 Key Visualizer 热图中看到的模式示例。这些模式可帮助您排查特定的性能问题。

均匀分布使用量

显示均匀分布读写操作的热图

如果热图显示深色与亮色交织的粒状混合,则表示索引键的写入/删除操作均匀分布在整个数据库中。这个热图很可能 表示 Datastore 模式的有效使用模式。

基于顺序键的索引

带有一条明亮对角线的热图可表示某个索引位于 严格递增或递减的键,例如时间戳。索引已开启 不建议使用顺序键,因为这样做可能会产生热点。生成热点时, 那么延迟时间可能会延长

索引上常见热点的一些示例如下:

因时间戳增加而导致的热点

热图显示因时间戳增加而导致的热点

在此示例中,具有一条亮对角线的热图可以指示数据库对时间戳属性使用严格递增或递减的索引写入/删除操作。

由于属性名称不断增加而导致的热点问题

热图:显示由于房源数量增加而出现热点

在本例中,有一条亮对角线的热图可能表示 严格增加或减少索引写入/删除操作的数据库, 增量属性,例如自动生成的账单编号。

如需确定热点问题,请使用 Key Visualizer 工具并了解索引键结构,以确定是哪个索引导致了问题,并使用最佳实践豁免这些索引。

了解索引键结构

在了解 Key Visualizer 工具中显示的索引键的结构之前,请先了解 Datastore 模式下的索引

以下代码展示了当您将鼠标指针悬停时看到的索引键格式示例。 覆盖在热图上受影响的键范围上。

NAMESPACE: NS KIND: Users 
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),`UserList`,1)
VALUES: (16500000000000001,'Alice')
ENTITY:KEY(PROJECT('PROJECT_ID'),NAMESPACE(''),`UserList`,1,`User`,5000000000000001)

其中:

  • NAMESPACE:实体的命名空间。
  • KIND:实体的种类,用于对实体进行分类。
  • 属性:与实体相关的属性。系统仅针对修改默认排序的索引定义显示 __key__ 排序属性。
  • ANCESTOR:可选的祖先路径,用于在数据库层次结构中确定实体的位置。
  • VALUES:每个媒体资源的值。
  • ENTITY:操作中更新的实体的 ID。

在前面的示例中,从 PROPERTIES 值中确定属性,以查找受影响的索引。

如需查找索引,请完成以下步骤:

  1. 前往 Google Cloud 控制台中的 Datastore 模式“索引”页面。

    转到 Datastore 模式“索引”

    您可以通过分析 PROPERTIES 字段。如需了解详情,请参阅索引键示例 信息。

  2. 点击过滤条件,选择字段,然后输入字段名称。

    对于复合索引,请使用 OR 运算符添加更多属性。

在确定导致问题的索引后,您可以使用以下解决方案:

  • 内置索引:排除属性,以使索引不保留 为该属性编制索引。如需了解详情,请参阅排除的媒体资源
  • 复合索引:修改 index.yaml 文件中的索引,以确保 值单调递增或递减的字段不会被选为 第一个字段以编入索引,或者删除索引。请参阅 如需了解详情,请参阅 index.yaml 简介

热图上索引键条目示例

类型 说明 示例
内置索引条目 Timestamp 属性的单属性索引的索引条目,按 NS 命名空间降序排列。 NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),用户, 5000000000000001)
内置索引条目 默认命名空间中单个属性索引的索引条目。 NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),用户, 5000000000000001)
复合索引条目 Timestamp 属性和 Name 属性的复合索引的索引条目(按降序排序),未启用祖先实体。 NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),用户,5000000000000001)
具有祖先实体的复合索引条目 按降序对 Timestamp 属性的复合索引和按降序对 Name 属性的复合索引的索引条目(已启用祖先)。 NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)
包含 __key__ 的复合索引条目 按升序对 Timestamp 属性的复合索引编入索引条目,并按降序对 __key__ 编入索引条目,而未启用祖先。您可以使用 __key__ 作为索引定义中的最后一个属性来更改结果的默认排序。 NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)

后续步骤