排查写入数据的问题
了解如何避免意外结果以及从写入 InfluxDB 3 Core 的错误中恢复。
处理写入响应
当您发送写入请求时,InfluxDB 3 Core 会执行以下操作:
验证请求。
如果成功,则尝试从请求正文中摄取数据;否则,会响应一个错误状态。
摄取或拒绝批次中的数据,并返回以下 HTTP 状态码之一:
204 No Content:批次中的所有数据都已摄取。400 Bad Request:部分或全部数据已被拒绝。未被拒绝的数据已被摄取并且可查询。
响应正文包含有关被拒绝的点的错误详情,最多包含 100 个点。
写入是同步的——响应状态指示写入的最终状态,所有摄取的数据均可查询。
为确保 InfluxDB 按您请求的顺序处理写入,请在发送下一个请求之前等待响应。
查看 HTTP 状态码
InfluxDB 3 Core 使用常规的 HTTP 状态码来指示请求的成功或失败。响应正文的 message 属性可能包含有关错误的额外详细信息。写入请求返回以下状态码:
| HTTP 响应码 | 消息 | 描述 |
|---|---|---|
204 "Success" | 如果 InfluxDB 摄取了数据 | |
400 "Bad request" | 关于被拒绝的点的错误详情,最多 100 个点:line 包含第一个被拒绝的行,message 描述被拒绝的原因 | 如果部分或全部请求数据不被允许(例如,格式错误或超出存储桶的保留期),响应正文会指示是否发生了部分写入或所有数据都被拒绝。 |
401 "Unauthorized" | 如果 Authorization 标头缺失或格式错误,或者 token 没有写入数据库的权限。请参阅使用凭据的写入 API 示例。 | |
404 "Not found" | 请求的资源类型(例如,“organization”或“database”)和资源名称 | 如果未找到请求的资源(例如,组织或数据库) |
500 "Internal server error" | 错误的默认状态 | |
503 “Service unavailable” | 如果服务器暂时无法接受写入。Retry-After 标头描述了何时可以再次尝试写入。 |
如果您的数据未写入数据库,请参阅如何排查被拒绝的点。
故障排除
如果您注意到数据库中缺少数据,请执行以下操作:
- 检查响应正文中的
message属性以获取错误详情。 - 如果
message描述了字段错误,请排查被拒绝的点。 - 验证所有行是否包含有效的语法(行协议)。
- 验证数据中的时间戳是否与请求中的精度参数匹配。
- 通过优化写入来减小有效负载大小和网络错误。
排查被拒绝的点
InfluxDB 会拒绝与现有数据模式不匹配的点。
检查被拒绝数据点与同一数据库中的点之间的字段数据类型差异——例如,是否尝试将 string 数据写入 int 字段?
排查写入性能问题
如果您在大量数据摄取期间遇到缓慢的写入性能或超时,请考虑以下几点:
内存配置
InfluxDB 3 Core 使用内存进行查询处理和内部数据操作,包括在持久化过程中将数据转换为 Parquet 格式。对于写入量大的工作负载,内存分配不足可能导致性能问题。
与内存相关的写入问题的症状
- 数据持久化期间写入性能缓慢(通常每 10 分钟一次)
- 大量数据摄取期间响应时间增加
- 服务器日志中与内存相关的错误
解决方案
- 增加
exec-mem-pool-bytes配置以分配更多内存用于数据操作。对于写入量大的工作负载,请考虑将其设置为可用内存的 30-40%。 - 在写入高峰期监控内存使用情况,以识别瓶颈。
- 调整
gen1-duration以控制数据持久化为 Parquet 格式的频率。
针对写入量大工作负载的示例配置
influxdb3 serve \
--exec-mem-pool-bytes PERCENTAGE \
--gen1-duration 15m \
# ... other options将 PERCENTAGE 替换为您要分配的可用内存百分比(例如,对于写入量大的工作负载为 35%)。
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。