文档文档

查询系统数据

InfluxDB Clustered 将与查询、表、分区和压缩相关的数据存储在集群内的系统表中。系统表包含 InfluxDB Clustered 内部监控系统使用和生成的时间序列数据。您可以查询集群系统表以获取有关集群的信息。

可能影响集群性能

查询 InfluxDB 3 系统表可能会影响 InfluxDB 集群的写入和查询性能。使用过滤器来优化查询以减少对集群的影响

系统表可能会更改

系统表不是 InfluxDB 稳定 API 的一部分,可能会随新版本而更改。提供的模式信息和查询示例截至 2024 年 9 月 18 日 有效。如果您检测到模式更改或无法正常工作的查询示例,请提交问题

查询系统表

使用 influxctl 查询系统表需要 influxctl v2.8.0 或更高版本

使用 influxctl query 命令 和 SQL 查询系统表。提供以下内容:

  • 使用 --enable-system-tables 命令标志启用系统表

  • 数据库令牌:具有对指定数据库读取权限的数据库令牌。使用 influxctl 连接配置文件中的 token 设置或 --token 命令标志。

  • 数据库名称:要查询信息的数据库的名称。使用 influxctl 连接配置文件中的 database 设置或 --database 命令标志。

  • SQL 查询:要执行的 SQL 查询。

    通过以下方式之一传递查询:

    • 命令行上的字符串
    • 包含查询的文件路径
    • 单个破折号 (-) 从 stdin 读取查询
influxctl query \
  --enable-system-tables \
  --database 
DATABASE_NAME
\
--token
DATABASE_TOKEN
\
"
SQL_QUERY
"
influxctl query \
  --enable-system-tables \
  --database 
DATABASE_NAME
\
--token
DATABASE_TOKEN
\
/path/to/query.sql
cat ./query.sql | influxctl query \
  --enable-system-tables \
  --database 
DATABASE_NAME
\
--token
DATABASE_TOKEN
\
-

替换以下内容:

  • DATABASE_TOKEN:具有对指定数据库读取权限的数据库令牌
  • DATABASE_NAME:要查询信息的数据库的名称。
  • SQL_QUERY:要执行的 SQL 查询。有关示例,请参阅系统查询示例

出现提示时,输入 y 以确认查询系统表可能对集群产生的影响。

优化查询以减少对集群的影响

查询 InfluxDB 3 系统表可能会影响 InfluxDB 集群的性能。当您向集群写入数据时,分区和 Parquet 文件的数量可能会增加到影响系统表性能的程度。文件和分区较少时只需几毫秒的查询,随着文件和分区的增加,可能需要 10 秒或更长时间。

使用以下过滤器来优化您的系统表查询并减少对集群性能的影响。

在您的查询中,替换以下内容:

  • TABLE_NAME:要检索其分区的表
  • PARTITION_ID分区 ID (int64)
  • PARTITION_KEY:从表的分区模板派生的分区键。默认格式为 %Y-%m-%d(例如,2024-01-01)。
按表名过滤

查询 system.tablessystem.partitionssystem.compactor 表时,使用 WHERE 子句按 table_name 过滤。

SELECT * FROM system.partitions WHERE table_name = '
TABLE_NAME
'
按分区键过滤

查询 system.partitionssystem.compactor 表时,使用 WHERE 子句按 partition_key 过滤。

SELECT * FROM system.partitions WHERE partition_key = '
PARTITION_KEY
'

为了进一步提高性能,请使用 ANDpartition_keytable_name 配对 - 例如:

SELECT * 
FROM system.partitions 
WHERE
  table_name = '
TABLE_NAME
'
AND partition_key = '
PARTITION_KEY
'
;
SELECT * 
FROM system.compactor
WHERE
  table_name = '
TABLE_NAME
'
AND partition_key = '
PARTITION_KEY
'
;
按分区 ID 过滤

查询 system.partitionssystem.compactor 表时,使用 WHERE 子句按 partition_id 过滤。

SELECT * FROM system.partitions WHERE partition_id = 
PARTITION_ID

为了获得最佳优化方法,请使用 ANDpartition_idtable_name 配对 - 例如:

SELECT * 
FROM system.partitions 
WHERE
  table_name = '
TABLE_NAME
'
AND partition_id =
PARTITION_ID
;

尽管您不需要将 partition_idtable_name 配对(因为分区 ID 在集群内是唯一的),但这是最优化的方法,尤其是在数据库中有很多表时

检索分区 ID

要检索分区 ID,请查询 system.partitions 以获取 table_namepartition_key 对 - 例如:

SELECT
  table_name,
  partition_key,
  partition_id 
FROM system.partitions
WHERE
  table_name = '
TABLE_NAME
'
AND partition_key = '
PARTITION_KEY
'
;

结果包含 partition_id

table_namepartition_keypartition_id
weather43 | 2020-05-271362
组合过滤器以提高性能

使用 ANDORIN 关键字在查询中组合过滤器。

  • 在同一列中为不同值进行过滤时,使用 ORIN 条件 - 例如:

    WHERE partition_id = 1 OR partition_id = 2
    

    使用 IN 使多个 OR 条件更具可读性 - 例如:

    WHERE table_name IN ('foo', 'bar', 'baz')
    
  • 避免在 OR 条件中混合不同的列,因为这不会提高性能 - 例如:

    WHERE table_name = 'foo' OR partition_id = 2  -- This will not improve performance
    

系统表

系统表可能会更改

了解系统表数据分布

system.tablessystem.partitionssystem.compactor 中的数据包括集群中所有 InfluxDB Queriers 的数据。数据来自目录,并且由于所有 queriers 共享一个目录,因此无论您连接到哪个 querier,这三个表的结果都来自相同的数据源。

但是,system.queries 表是不同的 - 数据是每个 Querier 本地的。system.queries 包含针对您查询路由到的当前 querier 运行的查询的非持久化日志。查询日志特定于当前 Querier,并且不在集群中的 queriers 之间共享。日志的作用域限定为指定的数据库。

system.queries

system.queries 表存储为当前处理查询的节点上提供的命名空间(数据库)执行的查询的日志条目。system.queries 反映了进程本地、内存中、命名空间作用域的查询日志。

虽然此表可能对调试和监控查询很有用,但请记住以下几点:

  • 存储在 system.queries 中的记录是瞬态且易失的
    • InfluxDB 在 pod 重启期间删除 system.queries 记录。
    • 一个命名空间的查询可能会从另一个命名空间中逐出记录。
  • 数据反映了特定 pod 回答命名空间查询的状态。
    • 数据不在集群中的 queriers 之间共享。
    • system.queries 中记录的查询可能会返回不同的结果,具体取决于请求路由到的 pod。

查看 system.queries 架构

在列出命名空间中可用的 measurements(表)时,某些客户端和查询工具可能会在命名空间表的列表中包含 queries 表。

system.tables

system.tables 表包含有关指定数据库中表的信息。

查看 system.tables 架构

system.partitions

system.partitions 表包含有关与指定数据库关联的分区的信息。

查看 system.partitions 架构

system.compactor

system.compactor 表包含有关与指定数据库关联的压缩分区 Parquet 文件的信息。

查看 system.compactor 架构

系统查询示例

可能影响集群性能

查询 InfluxDB 3 系统表可能会影响 InfluxDB 集群的写入和查询性能。

本节中的示例包含 WHERE 过滤器,以优化查询并减少对集群的影响

在以下示例中,将 TABLE_NAME 替换为您要查询信息的表的名称。


查询日志

查看所有存储的查询日志

SELECT * FROM system.queries

查看端到端持续时间超过阈值的查询的查询日志

以下内容返回端到端持续时间大于 50 毫秒的查询的查询日志。

SELECT *
FROM
  system.queries
WHERE
  end2end_duration::BIGINT > (50 * 1000000)

查看时间间隔内特定查询的查询日志

SELECT *
FROM system.queries
WHERE issue_time >= now() - INTERVAL '1 day'
  AND query_text LIKE '%select * from home%'
from influxdb_client_3 import InfluxDBClient3
client = InfluxDBClient3(token = DATABASE_TOKEN,
                          host = HOSTNAME,
                          org = '',
                          database=DATABASE_NAME)
client.query('select * from home')
reader = client.query('''
                      SELECT *
                      FROM system.queries
                      WHERE issue_time >= now() - INTERVAL '1 day'
                      AND query_text LIKE '%select * from home%'
                      ''',
                    language='sql',
                    headers=[(b"iox-debug", b"true")],
                    mode="reader")

分区

查看特定表的分区模板

SELECT *
FROM
  system.tables
WHERE
  table_name = '
TABLE_NAME
'

查看表的所有分区

SELECT *
FROM
  system.partitions
WHERE
  table_name = '
TABLE_NAME
'

查看每个表的分区数

SELECT
  table_name,
  COUNT(*) AS partition_count
FROM
  system.partitions
WHERE
  table_name IN ('foo', 'bar', 'baz')
GROUP BY
  table_name

查看特定表的分区数

SELECT
  COUNT(*) AS partition_count
FROM
  system.partitions
WHERE
  table_name = '
TABLE_NAME
'

存储使用情况

查看特定表的大小(MB)

SELECT
  SUM(total_size_mb) AS total_size_mb
FROM
  system.partitions
WHERE
  table_name = '
TABLE_NAME
'

查看每个表的大小(MB)

SELECT
  table_name,
  SUM(total_size_mb) AS total_size_mb
FROM
  system.partitions
WHERE
  table_name IN ('foo', 'bar', 'baz')
GROUP BY
  table_name

查看每个表的压缩分区总大小(字节)

SELECT
  table_name,
  SUM(total_l0_bytes) + SUM(total_l1_bytes) + SUM(total_l2_bytes) AS total_bytes
FROM
  system.compactor
WHERE
  table_name IN ('foo', 'bar', 'baz')
GROUP BY
  table_name

查看特定表的压缩分区总大小(字节)

SELECT
  SUM(total_l0_bytes) + SUM(total_l1_bytes) + SUM(total_l2_bytes) AS total_bytes
FROM
  system.compactor
WHERE
  table_name = '
TABLE_NAME
'

压缩

查看每个表的压缩总计

SELECT
  table_name,
  SUM(total_l0_files) AS total_l0_files,
  SUM(total_l1_files) AS total_l1_files,
  SUM(total_l2_files) AS total_l2_files,
  SUM(total_l0_bytes) AS total_l0_bytes,
  SUM(total_l1_bytes) AS total_l1_bytes,
  SUM(total_l2_bytes) AS total_l2_bytes
FROM
  system.compactor
WHERE
  table_name IN ('foo', 'bar', 'baz')
GROUP BY
  table_name

查看特定表的压缩总计

SELECT
  SUM(total_l0_files) AS total_l0_files,
  SUM(total_l1_files) AS total_l1_files,
  SUM(total_l2_files) AS total_l2_files,
  SUM(total_l0_bytes) AS total_l0_bytes,
  SUM(total_l1_bytes) AS total_l1_bytes,
  SUM(total_l2_bytes) AS total_l2_bytes
FROM
  system.compactor
WHERE
  table_name = '
TABLE_NAME
'

此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

InfluxDB 3 开源版本现已公开发布 Alpha 版

InfluxDB 3 开源版本现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可授权。

作为 Alpha 版本的一部分,我们将发布两款产品。

InfluxDB 3 Core 是我们新的开源产品。它是一个用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询能力、只读副本、高可用性、可扩展性和细粒度的安全性。

有关如何开始使用的更多信息,请查看: