文档文档

解决高序列基数

如果 InfluxDB 的读取和写入速度开始变慢,则高序列基数(过多的序列)可能是导致内存问题的原因。

采取措施了解和解决高序列基数问题。

  1. 了解高基数的原因
  2. 测量序列基数
  3. 解决高基数问题

了解高基数的原因

InfluxDB 为以下数据元素建立索引以加速读取

每个唯一索引的数据元素集构成一个序列键标签包含高度可变的信息,如唯一 ID、哈希和随机字符串,会导致大量的序列,也称为高序列基数。高序列基数是许多数据库工作负载中高内存使用率的主要驱动因素。

测量序列基数

使用以下方法测量存储桶的序列基数

解决高基数问题

要解决高序列基数问题,请完成以下步骤(如果适用于多个存储桶)

  1. 检查标签.
  2. 改进您的模式.
  3. 删除高基数数据.

检查标签

检查您的标签,确保每个标签不包含大多数条目的唯一值

常见的标签问题

查找以下常见问题,这些问题通常会导致许多唯一的标签值

  • 将日志消息写入标签。如果日志消息包含唯一的时间戳、指针值或唯一字符串,则会创建许多唯一的标签值。
  • 将时间戳写入标签。通常是客户端代码中的意外操作。
  • 随时间增长的唯一标签值 例如,用户 ID 标签可能在小型初创公司中有效,但当公司发展到数十万用户时,可能会开始引起问题。

统计唯一标签值

以下示例 Flux 查询显示了哪些标签对基数贡献最大。查找值比其他标签高几个数量级的标签。

// Count unique values for each tag in a bucket
import "influxdata/influxdb/schema"

cardinalityByTag = (bucket) => schema.tagKeys(bucket: bucket)
    |> map(
        fn: (r) => ({
            tag: r._value,
            _value: if contains(set: ["_stop", "_start"], value: r._value) then
                0
            else
                (schema.tagValues(bucket: bucket, tag: r._value)
                    |> count()
                    |> findRecord(fn: (key) => true, idx: 0))._value,
        }),
    )
    |> group(columns: ["tag"])
    |> sum()

cardinalityByTag(bucket: "example-bucket")

如果您遇到失控的基数,上述查询可能会超时。如果您遇到超时,请一次运行以下查询之一。

  1. 生成标签列表

    // Generate a list of tags
    import "influxdata/influxdb/schema"
    
    schema.tagKeys(bucket: "example-bucket")
    
  2. 统计每个标签的唯一标签值

    // Run the following for each tag to count the number of unique tag values
    import "influxdata/influxdb/schema"
    
    tag = "example-tag-key"
    
    schema.tagValues(bucket: "my-bucket", tag: tag)
        |> count()
    

这些查询应有助于识别每个存储桶中高基数的来源。要确定哪些特定标签正在增长,请在 24 小时后再次检查基数,看看一个或多个标签是否显着增长。

改进您的模式

为了将来最大限度地减少基数,请设计您的模式以便于轻松高效地查询。查看模式设计的最佳实践

删除数据以减少高基数

考虑您是否需要导致高基数的数据。如果您不再需要此数据,您可以删除整个存储桶删除数据范围


此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像目前一样使用它,而无需对代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速的最新数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩功能,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

更多信息,请查看