问题现象
- 环境:QuestDB数据库运行于Windows系统
- 触发场景:电脑直接断电后重新开机
- 表现症状:
- 数据库可以正常读取数据
- 所有写入操作失败
- 日志中可能出现
database locked
或写权限相关错误
临时解决方案
原文链接:https://questdb.com/docs/reference/sql/alter-table-set-type/
- 关闭表的WAL(Write-Ahead Logging):
ALTER TABLE weather SET TYPE BYPASS WAL;
- 重启QuestDB服务
- 重新开启WAL:
ALTER TABLE weather SET TYPE WAL;
- 再次重启服务
永久解决方案
修改QuestDB配置文件server.conf
:
# 文件路径:\questdb\bin\qdbroot\conf\server.conf
cairo.commit.mode=sync
📌 修改后需重启服务生效
问题根本原因
- 异常断电导致:
- 未能正常执行数据库关闭流程
.lock
文件残留导致自我保护
- WAL机制冲突:
- 断电时正在进行的事务未能完整提交
- 默认配置风险:
- 默认
async
提交模式在断电时更易出错
- 默认
运维建议
为服务器配置UPS电源,设置ups没电自动正常关机
参考
https://github.com/questdb/questdb/issues/3372
[加速]https://github.com/questdb/questdb/issues/3372