文档文档

性能调优

根据您的工作负载特点,配置线程分配、内存设置和其他参数,以优化 InfluxDB 3 Core 的性能。

最佳实践

  1. 从监控开始:在调优前了解当前的瓶颈
  2. 一次更改一个参数:隔离每次更改的影响
  3. 使用类似生产环境的工作负载进行测试:使用真实的数据和查询模式
  4. 记录您的配置:跟踪对您的工作负载有效的配置
  5. 为增长做计划:为流量增长预留空间
  6. 定期审查:随着工作负载的演变,定期重新评估

通用监控原则

在调优性能之前,建立基线指标以识别瓶颈

需要监控的关键指标

  1. 每个核心的 CPU 使用率

    • 监控单个核心利用率,以识别线程池不平衡
    • 注意核心使用率达到 100% 而其他核心空闲的情况(表明线程分配有问题)
    • 使用 top -Hhtop 查看每个线程的 CPU 使用率
  2. 内存消耗

    • 跟踪堆使用量与可用 RAM 的关系
    • 监控查询执行内存池的使用情况
    • 注意 OOM 错误或过度交换(swapping)
  3. IO 和网络

    • 测量写入吞吐量(点/秒)
    • 跟踪查询响应时间
    • 监控云部署的对象存储延迟
    • 使用 iostat 检查磁盘 IO 等待时间

建立基线

# Monitor CPU per thread
top -H -p $(pgrep influxdb3)

# Track memory usage
free -h
watch -n 1 "free -h"

# Check IO wait
iostat -x 1

有关全面的指标监控,请参阅 监控指标

性能的关键设置

线程分配(–num-io-threads)

IO 线程处理 HTTP 请求和行协议解析。默认值:2(通常不足)。

InfluxDB 3 Core 在预留 IO 线程后,会自动将剩余的核心分配给 DataFusion。您可以通过设置 --num-io-threads--datafusion-num-threads 选项来显式配置这两个线程池。

# Write-heavy: More IO threads
influxdb3 --num-io-threads=12 serve \
  --node-id=node0 \
  --object-store=file --data-dir=~/.influxdb3

# Query-heavy: Fewer IO threads
influxdb3 --num-io-threads=4 serve \
  --node-id=node0 \
  --object-store=file --data-dir=~/.influxdb3

为并发写入器增加 IO 线程

如果您有多个并发写入器(例如,Telegraf 代理),默认的 2 个 IO 线程可能会成为写入性能的瓶颈。

内存池(–exec-mem-pool-bytes)

控制查询执行的内存。默认值:RAM 的 70%。

# Increase for query-heavy workloads
influxdb3 --exec-mem-pool-bytes=90% serve \
  --node-id=node0 \
  --object-store=file --data-dir=~/.influxdb3

# Decrease if experiencing memory pressure
influxdb3 --exec-mem-pool-bytes=60% serve \
  --node-id=node0 \
  --object-store=file --data-dir=~/.influxdb3

Parquet 缓存(–parquet-mem-cache-size)

缓存内存中频繁访问的数据文件。

# Enable caching for better query performance
influxdb3 serve \
  --parquet-mem-cache-size=4096 \
  --node-id=node0 \
  --object-store=file --data-dir=~/.influxdb3

WAL 刷新间隔(–wal-flush-interval)

控制写入延迟与吞吐量。默认值:1s。

# Reduce latency for real-time data
influxdb3 --wal-flush-interval=100ms serve \
  --node-id=node0 \
  --object-store=file --data-dir=~/.influxdb3

常见性能问题

高写入延迟

症状:写入响应时间增加,超时,丢弃点

解决方案

  1. 增加 IO 线程(默认值仅为 2)
  2. 减少 WAL 刷新间隔(从 1s 降至 100ms)
  3. 检查磁盘 IO 性能

查询性能缓慢

症状:执行时间长,内存使用高,查询超时

解决方案

  1. 增加 执行内存池(到 90%)
  2. 启用 Parquet 缓存

内存压力

症状:OOM 错误,交换(swapping),内存使用高

解决方案

  1. 减少 执行内存池(到 60%)
  2. 降低快照阈值(--force-snapshot-mem-threshold=70%

CPU 瓶颈

症状:100% CPU 利用率,线程使用不均衡(写入仅使用 2 个核心)

解决方案

  1. 重新平衡 线程分配
  2. 检查是否只有 2 个核心用于写入解析(增加 IO 线程)

“我的 Ingester 只使用了 2 个核心”

为 Ingest 节点增加 --num-io-threads 到 8-16+

按工作负载划分的配置示例

写密集型工作负载(>100k 点/秒)

# 32-core system, high ingest rate
influxdb3 --num-io-threads=12 \
  --exec-mem-pool-bytes=80% \
  --wal-flush-interval=100ms \
  serve \
  --node-id=node0 \
  --object-store=file \
  --data-dir=~/.influxdb3

读密集型工作负载(复杂分析)

# 32-core system, analytical queries
influxdb3 --num-io-threads=4 serve \
  --exec-mem-pool-bytes=90% \
  --parquet-mem-cache-size=2048 \
  --node-id=node0 \
  --object-store=file \
  --data-dir=~/.influxdb3

混合工作负载(实时仪表板)

# 32-core system, balanced operations
influxdb3 --num-io-threads=8 serve \
  --exec-mem-pool-bytes=70% \
  --parquet-mem-cache-size=1024 \
  --node-id=node0 \
  --object-store=file \
  --data-dir=~/.influxdb3

线程分配详情

计算最优线程数

使用此公式作为起点

Total cores = N
Concurrent writers = W
Query complexity factor = Q (1-10, where 10 is most complex)

IO threads = min(W + 2, N * 0.4)
DataFusion threads = N - IO threads

按系统规模划分的配置示例

小型系统(4 核,16 GB RAM)

# Balanced configuration
influxdb3 --num-io-threads=2 serve \
  --exec-mem-pool-bytes=10GB \
  --parquet-mem-cache-size=500 \
  --node-id=node0 \
  --object-store=file \
  --data-dir=~/.influxdb3

中型系统(16 核,64 GB RAM)

# Write-optimized configuration
influxdb3 --num-io-threads=6 serve \
  --exec-mem-pool-bytes=45GB \
  --parquet-mem-cache-size=2048 \
  --node-id=node0 \
  --object-store=file \
  --data-dir=~/.influxdb3

大型系统(64 核,256 GB RAM)

# Query-optimized configuration
influxdb3 --num-io-threads=8 serve \
  --exec-mem-pool-bytes=200GB \
  --parquet-mem-cache-size=10240 \
  --object-store-connection-limit=200 \
  --node-id=node0 \
  --object-store=file \
  --data-dir=~/.influxdb3

内存调优

执行内存池

配置查询执行内存池

# Absolute value in bytes
--exec-mem-pool-bytes=8589934592  # 8GB

# Percentage of available RAM
--exec-mem-pool-bytes=80%  # 80% of system RAM

指南

  • 写密集型:60-70%(为 OS 缓存留出空间)
  • 读密集型:80-90%(最大化查询内存)
  • 混合型:70%(平衡方法)

Parquet 缓存配置

缓存频繁访问的 Parquet 文件

# Set cache size
--parquet-mem-cache-size=2147483648  # 2GB

# Configure cache behavior
--parquet-mem-cache-prune-interval=1m \
--parquet-mem-cache-prune-percentage=20

WAL 和快照调优

控制写入缓冲区带来的内存压力

# Force snapshot when memory usage exceeds threshold
--force-snapshot-mem-threshold=80%

# Configure WAL rotation
--wal-flush-interval=10s \
--wal-snapshot-size=100MB

高级调优选项

对于不太常见的性能优化和详细的配置选项,请参阅

DataFusion 引擎调优

高级 DataFusion 运行时参数

HTTP 和网络调优

请求大小和网络优化

对象存储优化

云对象存储的性能调优

完整的配置参考

有关所有可用配置选项,请参阅

监控与验证

监控线程利用率

# Linux: View per-thread CPU usage
top -H -p $(pgrep influxdb3)

# Monitor specific threads
watch -n 1 "ps -eLf | grep influxdb3 | head -20"

检查性能指标

监控关键指标

-- Query system.threads table (Enterprise)
SELECT * FROM system.threads
WHERE cpu_usage > 90
ORDER BY cpu_usage DESC;

-- Check write throughput
SELECT
  count(*) as points_written,
  max(timestamp) - min(timestamp) as time_range
FROM your_measurement
WHERE timestamp > now() - INTERVAL '1 minute';

验证配置

验证您的调优更改

# Check effective configuration
influxdb3 serve --help-all | grep -E "num-io-threads|num-datafusion-threads"

# Monitor memory usage
free -h
watch -n 1 "free -h"

# Check IO wait
iostat -x 1

常见性能问题

高写入延迟

症状

  • 写入响应时间增加
  • 写入客户端超时
  • 点被丢弃或拒绝

解决方案

  1. 增加 IO 线程:--num-io-threads=16
  2. 减少写入器中的批量大小
  3. 增加 WAL 刷新频率
  4. 检查磁盘 IO 性能

查询性能缓慢

症状

  • 查询执行时间长
  • 查询期间内存使用高
  • 查询超时

解决方案

  1. 增加执行内存池:--exec-mem-pool-bytes=90%
  2. 启用 Parquet 缓存:--parquet-mem-cache-size=4GB
  3. 优化查询模式(更小的时间范围,更少的字段)

内存压力

症状

  • 内存不足错误
  • 频繁的垃圾回收
  • 系统交换(swapping)

解决方案

  1. 减少执行内存池:--exec-mem-pool-bytes=60%
  2. 降低快照阈值:--force-snapshot-mem-threshold=70%
  3. 减小缓存大小
  4. 增加更多 RAM 或减少工作负载

CPU 瓶颈

症状

  • 100% CPU 利用率
  • 线程池使用不均衡
  • 性能停滞

解决方案

  1. 根据工作负载重新平衡线程分配
  2. 增加更多 CPU 核心
  3. 优化客户端批量处理

此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2