优化查询
优化 SQL 和 InfluxQL 查询以提高性能并降低其内存和计算 (CPU) 要求。 了解如何使用可观测性工具来分析查询执行并查看指标。
为什么我的查询很慢?
查询性能取决于时间范围和查询复杂性等因素。 如果查询速度低于预期,请考虑以下潜在原因
- 查询跨越较大的时间范围,这会增加正在处理的数据量。
- 查询执行密集型操作,例如
- 使用
ORDER BY
对大型数据集进行排序或重新排序。 - 查询许多字符串值,这在计算上可能很昂贵。
- 使用
提高查询性能的策略
以下设计策略通常可以提高查询性能和资源利用率
仅查询您需要的数据
包含 WHERE 子句
InfluxDB 3 将数据存储在每个分区的 Parquet 文件中。 默认情况下,InfluxDB Clustered 按天对表进行分区,但您也可以自定义分区您的数据。 在查询时,InfluxDB 从对象存储检索文件以响应查询。 为了减少查询需要从对象存储中检索的文件数量,请包含一个WHERE
子句,该子句按时间范围或特定标签值过滤数据。
仅 SELECT 您需要的列
由于 InfluxDB 3 是列式数据库,因此它仅处理查询中选择的列,这可以减轻宽模式对查询性能的影响。
但是,从宽模式检索大量列的非特定查询可能比更具针对性的查询更慢且效率更低——例如,考虑以下查询
SELECT time,a,b,c
SELECT *
如果表包含 10 列,则两个查询之间的性能差异是最小的。 在包含 1000 多列的表中,SELECT *
查询速度较慢且效率较低。
识别和解决瓶颈
要识别性能瓶颈,请学习如何分析查询计划。 查询计划提供运行时指标,例如扫描的文件数,这可能会揭示查询执行中的低效率。
请求帮助以排查查询问题
某些瓶颈可能是由次优查询执行计划引起的,并且超出您的控制范围——例如
- 对已排序的数据进行排序 (
ORDER BY
)。 - 从对象存储中检索许多小的 Parquet 文件,而不是更少、更大的文件。
- 查询许多重叠的 Parquet 文件。
- 执行大量表扫描。
如果您已按照步骤优化和排查查询问题,但它仍然不满足性能要求,请参阅如何报告查询性能问题。
查询跟踪日志记录
目前,客户无法为 InfluxDB 集群启用跟踪日志记录。 InfluxData 工程师可以使用查询计划和跟踪日志记录来帮助查明查询中的性能瓶颈。
请参阅如何报告查询性能问题。
此页内容对您有帮助吗?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子! 我们欢迎并鼓励您提供关于 InfluxDB Clustered 和本文档的反馈和错误报告。 要获得支持,请使用以下资源
拥有年度或支持合同的客户可以联系 InfluxData 支持。