QuestDB 10.0.1 配置参数详解
QuestDB 10.0.1 服务端 server.conf 核心配置参数详解:HTTP/PG/ILP 协议组、存储引擎与 WAL 组、安全认证、部署形态与扩展方式,并给出生产配置模板
QuestDB 10.0.1 配置参数详解
目标:详解 QuestDB 10.0.1 服务端配置文件
server.conf的核心参数:HTTP、PostgreSQL wire、ILP 协议组,存储引擎与 WAL 组,安全认证与资源控制,并给出生产配置模板与部署形态说明。所有默认值均以 QuestDB 10.0.1 实际安装环境核实。
环境信息
- QuestDB 版本:10.0.1
- 配置文件:
/var/lib/questdb/conf/server.conf(安装后 1,833 行,几乎全部为注释,生效参数极少) - 日志配置:
/var/lib/questdb/conf/log.conf - 数据目录:
/var/lib/questdb(db存放表数据) - 默认认证:
http.user=admin、http.password=quest、pg.user=admin、pg.password=quest - 默认端口:9000(HTTP)、9009(ILP TCP)、8812(PG wire)
前置条件
- 已按《Ubuntu 22.04 安装 QuestDB 10.0.1 指南》或《CentOS 8 安装 QuestDB 10.0.1 指南》完成安装
- 拥有对
/var/lib/questdb/conf/server.conf的写权限(属主为questdb用户) - 修改配置后需要重启服务生效:
systemctl restart questdb或questdb.sh restart
参数查看与修改方式
查看当前生效配置
QuestDB 不提供一条命令打印全部生效参数,可通过启动日志确认各协议监听地址,并通过 SQL 查询引擎内部信息:
执行命令:
grep -aE "listening|server-main" /var/lib/questdb/log/questdb-rolling.log.20261003 | tail -5
执行结果:
2026-10-03T09:57:09.889837Z A server-main server is ready to be started
2026-10-03T09:57:10.572061Z A pg-server listening on 0.0.0.0:8812 [fd=839666106657 backlog=64]
2026-10-03T09:57:10.576852Z A tcp-line-server listening on 0.0.0.0:9009 [fd=848256041251 backlog=256]
2026-10-03T09:57:10.612922Z A http-server listening on 0.0.0.0:9000 [fd=856845975845 backlog=256]
修改方式
配置文件每行一个参数,格式为 参数名=值,# 开头为注释(默认值即写在注释中,取消注释并修改即生效)。
示例:修改 PG wire 密码并限制监听地址
pg.password=mysecret
pg.net.bind.to=0.0.0.0:8812
保存后重启:
systemctl restart questdb
环境变量映射
Docker 部署时(见《QuestDB 10.0.1 Docker Compose 部署指南》),所有配置项可用 QDB_ 前缀环境变量注入,规则:配置项大写、点号转下划线。例如 pg.password → QDB_PG_PASSWORD、http.bind.to → QDB_HTTP_BIND_TO。
参数总览
| 配置组 | 参数 | 默认值 | 说明 |
|---|---|---|---|
| 通用 | config.validation.strict | true | 严格校验;非法参数名/值阻止启动并报错 |
| 通用 | query.timeout | 60s | 查询超时时间,超过自动终止 |
| 通用 | shared.worker.count | 0(按 CPU 核数) | 共享 Worker 线程数 |
| 存储 | cairo.wal.enabled | true | 启用 WAL 写入模式 |
| 存储 | cairo.max.uncommitted.rows | 100000 | 未提交最大行数,达到即刷盘 |
| 存储 | cairo.commit.lag | 120000 | 提交延迟上限(毫秒) |
| 存储 | cairo.sql.copy.root | import | COPY CSV 导入根目录(相对数据目录) |
| 存储 | cairo.sql.copy.formats | 内置 | CSV 格式定义文件路径 |
| HTTP | http.enabled | true | 启用 HTTP 服务 |
| HTTP | http.bind.to | 0.0.0.0:9000 | HTTP 监听地址与端口 |
| HTTP | http.user | admin | REST/Web Console 用户名 |
| HTTP | http.password | quest | REST/Web Console 密码 |
| HTTP | http.worker.count | 0(按 CPU 核数) | HTTP 工作线程数 |
| HTTP | http.security.readonly | false | 开启后仅允许查询,禁止 DDL/DML |
| PG | pg.enabled | true | 启用 PostgreSQL wire 协议 |
| PG | pg.net.bind.to | 0.0.0.0:8812 | PG wire 监听地址与端口 |
| PG | pg.user | admin | PG wire 用户名 |
| PG | pg.password | quest | PG wire 密码 |
| PG | pg.worker.count | 0(按 CPU 核数) | PG 工作线程数 |
| ILP | line.tcp.enabled | true | 启用 ILP TCP 服务 |
| ILP | line.tcp.net.bind.to | 0.0.0.0:9009 | ILP TCP 监听地址与端口 |
| ILP | line.tcp.timestamp | n | 时间戳单位:n 纳秒 / ms 毫秒 / us 微秒 / s 秒 |
| ILP | line.udp.enabled | false | 启用 ILP UDP(默认关闭) |
| ILP | line.tcp.auth | 空 | ILP 认证密钥路径(启用后需 TLS) |
| 其他 | telemetry.enabled | true | 匿名使用统计上报,可关闭 |
一、协议与端口配置
QuestDB 同时暴露三种接入协议,端口均可独立配置与启停。
1.1 HTTP / REST / Web Console(9000)
http 组控制 REST API、Web Console 与 ILP over HTTP(POST /write)服务:
http.enabled=true
http.bind.to=0.0.0.0:9000
http.worker.count=4
http.security.readonly=false
💡 说明:
http.security.readonly=true时 Web Console 只能执行查询,不能建表/插入,适合报表与只读业务接入。
1.2 PostgreSQL wire(8812)
pg 组控制 PG wire 协议(psql / 各类 PG 驱动可直连):
pg.enabled=true
pg.net.bind.to=0.0.0.0:8812
pg.user=admin
pg.password=quest
pg.worker.count=4
⚠️ 注意:默认密码
quest为公开已知值,生产环境必须修改。修改pg.password后重启生效。
1.3 ILP(InfluxDB Line Protocol)(9009)
line 组控制 ILP TCP 与 UDP 数据接入:
line.tcp.enabled=true
line.tcp.net.bind.to=0.0.0.0:9009
line.tcp.timestamp=n
line.udp.enabled=false
💡 说明:
line.tcp.timestamp=n表示 ILP 行内时间戳为纳秒。若上游只发送毫秒时间戳,改line.tcp.timestamp=ms可避免时间被误解析为 1970 年。ILP 也可走 HTTP 9000 端口的POST /write,无需单独开 TCP。
二、存储引擎与 WAL 配置
cairo 组控制表存储、分区与写入提交行为:
cairo.wal.enabled=true
cairo.max.uncommitted.rows=100000
cairo.commit.lag=120000
cairo.sql.copy.root=import
| 参数 | 默认值 | 行为说明 |
|---|---|---|
cairo.wal.enabled | true | WAL 模式下写入先落 WAL 再异步合并,故障可恢复;关闭后为旧版直接写入 |
cairo.max.uncommitted.rows | 100000 | 未提交行数阈值,达到后触发提交落盘 |
cairo.commit.lag | 120000 | 最长提交延迟(毫秒),兼顾低延迟与批量合并 |
cairo.sql.copy.root | import | COPY ... FROM 'file.csv' 的文件根目录,默认相对数据目录 |
💡 说明:需要更低写入延迟时调小
cairo.commit.lag(如500);需要更高批量吞吐时调大cairo.max.uncommitted.rows(如1000000)。两者需按业务写入峰值权衡。
三、安全认证与访问控制
QuestDB 10 内置三类认证体系:
| 认证维度 | 配置项 | 默认 | 说明 |
|---|---|---|---|
| REST 认证 | http.user / http.password | admin/quest | 浏览器 Web Console 与 REST 调用需认证(Authorization: Basic) |
| PG 认证 | pg.user / pg.password | admin/quest | psql 与 PG 驱动连接认证 |
| ILP 认证 | line.tcp.auth | 空(不认证) | 设置密钥文件路径后启用 ILP 认证,需配合 TLS |
⚠️ 注意:QuestDB 10 不支持
ALTER USER admin ADD PASSWORD一类 DDL 修改密码,密码只能通过配置文件(或QDB_环境变量)修改后重启生效。
四、资源与性能调优
| 参数 | 默认 | 调优建议 |
|---|---|---|
shared.worker.count | 0(CPU 核数) | 高并发多协议混用时手动指定(如 16),避免线程切换 |
http.worker.count | 0(CPU 核数) | HTTP 压力大时可单独调大 |
pg.worker.count | 0(CPU 核数) | PG 协议高并发查询时单独调大 |
query.timeout | 60s | 长查询业务调大(如 300s),防止大聚合卡死 Worker |
LimitNOFILE(systemd) | 65536(文档默认) | 高并发连接需要提升文件描述符上限 |
五、部署形态与扩展方式
QuestDB 开源版为单机部署形态,本身不提供多节点集群能力(集群属于企业版 QuestDB Enterprise)。
生产环境水平扩展的可行路径:
- 多实例水平拆分:在多台服务器各自部署单节点(见两篇安装指南),应用层按时间范围或业务维度路由写入与查询。
- docker-compose 多实例:同一台服务器上通过多个 compose 服务(不同数据卷、不同
http.bind.to端口)拆分数据集,Web Console 分别访问(见《QuestDB 10.0.1 Docker Compose 部署指南》)。 - 外部集成扩展:写入端用 ILP 批量灌入、查询端用 PG wire 供 BI/报表工具接入;只读场景开启
http.security.readonly=true。 - 企业版升级:需要原生集群(高可用、水平分区)时评估 QuestDB Enterprise。
💡 说明:QuestDB 单节点本身具备极高性能(列式存储 + SIMD 向量化 + 分区裁剪),多数时序场景单机即可支撑,先做容量评估再决定是否多实例。
生产配置模板
根据内存与写入量分级给出最小可用配置(写入 server.conf 并重启生效)。
小规模(4C/8G,写入 < 5 万行/秒)
config.validation.strict=true
query.timeout=60s
http.bind.to=0.0.0.0:9000
http.user=admin
http.password=change_me_http
pg.net.bind.to=0.0.0.0:8812
pg.user=admin
pg.password=change_me_pg
line.tcp.net.bind.to=0.0.0.0:9009
line.tcp.timestamp=n
cairo.max.uncommitted.rows=200000
cairo.commit.lag=1000
telemetry.enabled=false
中大规模(16C/32G,写入 10~50 万行/秒)
config.validation.strict=true
query.timeout=300s
shared.worker.count=16
http.worker.count=8
pg.worker.count=8
http.bind.to=0.0.0.0:9000
http.user=admin
http.password=change_me_http
pg.net.bind.to=0.0.0.0:8812
pg.user=admin
pg.password=change_me_pg
line.tcp.net.bind.to=0.0.0.0:9009
line.tcp.timestamp=n
cairo.max.uncommitted.rows=1000000
cairo.commit.lag=500
telemetry.enabled=false
⚠️ 注意:生产部署务必修改两处密码(
http.password、pg.password),并将 systemd 单元中LimitNOFILE保持 65536 及以上。
常见问题
Q1. 修改配置后重启提示配置校验失败
- 现象:
systemctl restart questdb后服务进入 failed,日志报Unknown configuration property。 - 定位:
config.validation.strict=true时任何非法参数都会阻止启动。 - 解决:
journalctl -u questdb -n 50查看具体参数名,修正或删除该行后重启。
Q2. 端口 9000 被占用如何改端口
- 现象:启动失败,
address already in use。 - 解决:改
http.bind.to=0.0.0.0:19000,同时调整系统防火墙放行新端口。
Q3. 改了 pg.password 后 psql 还是报密码错误
- 现象:改配置重启后仍无法登录。
- 定位:Docker 部署时环境变量
QDB_PG_PASSWORD优先级高于挂载配置文件。 - 解决:检查 compose 环境变量,或直接删掉该环境变量让配置文件生效。
Q4. ILP 时间戳总是 1970 年
- 现象:ILP 写入成功,查询时间列为 1970-01-01。
- 解决:确认
line.tcp.timestamp=n(纳秒),写入端使用date +%s%N生成纳秒时间戳。