请教有没有懂时序数据库Influxdb的大神,用的默认存储策略,配置参数基本没修改,运行了几个月之后发现cpu占用率一直高居90%左右,通过调查发现是influxdb在合并压缩TSM文件的时候有一个文件合并失败了,然后一直在重复压缩步骤导致CPU高居不下,看日志发现 warn Error compacting TSM files {"log_id": "0hA8vBM0000", "service": "storage-engine", "engine": "tsm1", "tsm1_strategy": "full", "tsm1_optimize": false, "op_name": "tsm1_compact_group", "error": "block read error on hisdb/engine/data/65b1b1f12e9b83f5/autogen/26/000000157-000000001.tsm: decode error: unable to decompress block type float for key 'yx,k=40#!~#t': EOF"}
我用influx_inspect verify 验证有几个.tsm文件确实提示block read error损坏了。然后又用influx_inspect dumptsm导出TMS文件的内容,导出的时候发现又报的dumptsm:EOF,导出失败了,应该是文件中那些block块损坏了导致导出一半在某处断开,然后我又下载了EaseUS Data Recovery Wizard工具恢复.tsm文件,点恢复之后没什么变化,文件大小和恢复之前的一样,而且对恢复后的文件dumptsm还是会报错。请问还有没有什么方法能恢复损坏的.tsm(损坏的文件名000000133-000000004.tsm从文件名可以看出该文件是已经合并压缩过几次了,不知道在哪里出的问题)。
从日志中看到的错误信息提示了 block read error on hisdb/engine/data/65b1b1f12e9b83f5/autogen/26/000000157-000000001.tsm: decode error: unable to decompress block type float for key 'yx,k=40#!~#t': EOF,意味着在对 000000157-000000001.tsm 文件进行解压缩操作时出现了错误。
根据这个错误信息,可以判断出问题是出现在磁盘读取这个 TSM 文件时。可能是文件已经损坏或者在读取过程中被修改或删除,或者硬件或网络问题导致读取错误等等。
如果确认这个 TSM 文件不是必要的数据,可以手动删除这个文件,并在继续操作之前尝试修复磁盘中可能存在的错误。如果这个 TSM 文件中包含了必要的数据,那么就需要考虑如何修复这个文件,可以尝试从备份中恢复,或者从其他节点中获取这个文件的副本。
另外,考虑更新 InfluxDB 的版本,可能是版本问题导致的错误。建议尝试最新版本并升级至最新版本,也许可以解决这个问题。
引用new bing部分指引作答:
根据你提供的信息,可以看出在合并压缩 TSM 文件时,出现了读取错误,导致文件合并失败。具体的错误日志如下所示:
block read error on hisdb/engine/data/65b1b1f12e9b83f5/autogen/26/000000157-000000001.tsm: decode error: unable to decompress block type float for key 'yx,k=40#!~#t': EOF
从日志中可以看出,合并压缩时处理的是一组包含 10 个 TSM 文件的文件组,而最后一个文件 "000000157-000000001.tsm" 出现了读取错误,导致整个文件组合并失败。
这个问题可能是由于文件损坏或文件读取出现错误导致的。如果该问题是由于损坏的文件引起的,则可能需要删除该文件并从备份中恢复数据。如果该问题是由于读取错误引起的,则可能需要检查文件系统、磁盘和硬件设备是否正常运行,并确保在运行 InfluxDB 进程的主机上没有任何 I/O 或磁盘问题。
引用chatGPT作答,根据日志信息看起来是在合并压缩 TSM 文件时出现了解压缩错误(EOF),可能是数据损坏导致的。具体原因可以尝试进行以下排查:
1.检查硬件设备是否存在问题。例如,磁盘读写异常、内存问题等,这些问题可能会导致数据损坏。
2.检查 InfluxDB 是否存在版本问题。尝试更新到最新版本,看是否可以解决问题。
3.尝试手动删除出现问题的 TSM 文件,然后再次运行压缩任务。如果问题仍然存在,那么可能是其他 TSM 文件中的数据存在问题。
4.检查 InfluxDB 的日志文件,看是否有其他错误或异常信息。
5.可以尝试使用 InfluxDB 内置的修复工具进行修复。使用命令 "influx_inspect verify" 或 "influx_inspect verify-series" 可以检查 TSM 文件是否损坏,并尝试恢复文件。
希望以上建议可以帮助你解决问题。
通过使用influx_inspect verify验证发现确实有几个.TSM文件损坏了,然后想使用influx_inspect dumptsm 转储损坏的文件看看里面哪个地方有问题,发现也是转储一半在损坏的地方dumptsm:EOF,转储失败了,请问要如何修复损坏的.tsm文件?
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据日志信息,出现 “unable to decompress block type float for key 'yx,k=40#!#t': EOF”
如果我的回答解决了您的问题,请采纳!