磁盘空间不足致QuestDB停写,扩容后如何恢复数据写入?
磁盘耗尽后QuestDB数据写入恢复步骤
针对你遇到的QuestDB v7.3.4磁盘满扩容后WAL显示写入但查询无结果的问题,可按以下步骤排查恢复:
1. 确认WAL回放进度
- 查看QuestDB主日志,寻找
WalReader finished applying WAL类的日志,确认是否存在未完成的WAL回放。磁盘耗尽可能导致WAL回放中断,即便新数据在写入,旧的未回放数据还未同步到表存储。 - 同时检查日志中是否有
corrupted WAL segment等损坏提示,这类错误会导致WAL数据无法正常回放。
2. 验证表分区状态
- 执行SQL查询分区状态:
SELECT * FROM trades PARTITIONS; - 重点关注故障时间附近的分区,若分区处于
RO(只读)状态,大概率是磁盘满时分区文件写入异常。处理方式:- 停止QuestDB服务
- 进入表分区目录(默认路径为
{QuestDB数据根目录}/trades) - 删除后缀为
.tmp的临时损坏文件 - 重启QuestDB服务
3. 强制刷新WAL到表存储
- 执行SQL命令强制同步WAL数据到表文件:
ALTER TABLE trades FLUSH WAL; - 等待1-2分钟后,重新执行查询语句验证:
select * from trades where timestamp >= '2023-11-15T14:06:31.593232';
4. 检查WAL目录完整性
- 定位日志中提到的WAL段路径(默认
{QuestDB数据根目录}/wal/trades_rt~5/wal13388/0),检查该文件是否存在且大小合理。 - 若确认WAL段损坏,可删除该段文件(注意:此操作会丢失该段内的数据,仅在无法修复时执行),随后重启QuestDB让系统重新同步。
5. 确认磁盘权限
- 扩容磁盘后可能导致目录权限变更,确保QuestDB运行用户对数据根目录及所有子目录拥有读写权限,例如:
chown -R questdb:questdb /path/to/questdb/data
内容的提问来源于stack exchange,提问作者Nick The Greek
相关产品推荐
相关产品推荐

