跳转到主要内容
本页列出了 clickhouse-go v2.x 中所有可配置选项。若需查看包含代码示例的指南,请参阅配置
版本标注clickhouse-go v2.35.0 及更高版本中新增的选项,会在其说明旁标注 (自 vX.Y.Z 起)。没有 “Since” 标记的选项自 v2.0 起即已可用,并包含在所有受支持的版本中。

选项的设置方式

选项可在三个作用范围内设置: 当多个作用范围重叠时,范围越具体,优先级越高:批次 > 查询 > 连接。对于 Settings,查询级别的键会与连接级别的键合并;如果发生冲突,则以查询级别为准。 通过 Options 结构体:
通过 DSN 连接字符串:
通过 Connector (使用 Options 结构体的 database/sql) :
通过 Context (按查询) :

连接选项

协议和连接


身份验证


超时

已空闲的 ClickHouse Cloud 服务会被暂停,并在收到第一个传入连接时唤醒。唤醒通常需要几十秒,在此期间拨号会阻塞。如果 DialTimeout 低于唤醒时间,则空闲一段时间后的第一次查询会因拨号超时而失败,而不是正常执行。对于可能是第一个访问已休眠服务的 client,请将 DialTimeout 设为 1m2m。代价是在真实故障期间检测失败会更慢——拨号会一直阻塞到完整超时时间后才报错——因此更建议只对首次连接应用较高的超时,或在单个查询上使用 Context deadline 来限制端到端耗时。

连接池

仅适用于 database/sqlConnMaxIdleTime 是 Go 标准 database/sql 连接池设置。它不在 clickhouse.Options struct 中,也不能通过 clickhouse.Open() 设置。请在 OpenDB() 之后设置:
用法详见 连接池

标准 database/sql 连接池设置

使用 clickhouse.OpenDB()sql.Open("clickhouse", dsn) 时,返回的 *sql.DB 支持 Go 的标准连接池方法。OpenDB() 会自动应用 Options 中的前三项:
ClickHouse API (clickhouse.Open)clickhouse.Open() 返回的连接不支持这些方法。ClickHouse API 会直接使用 Options 结构体中的字段,在内部管理自己的连接池。

压缩

按协议划分的压缩方法支持情况:

TLS

代码示例请参见 TLS

日志

完整示例请参见日志

缓冲区与内存


HTTP 专用

在 Native 协议下会被静默忽略这些选项仅影响 Protocol: clickhouse.HTTP。使用 Native 协议时,它们会被静默忽略,并且不会产生任何错误或警告。
双层 HTTP 连接池使用 HTTP 时,存在两个连接池:
  • 第 1 层 (应用层) : MaxIdleConns / MaxOpenConns — 控制 httpConnect 对象
  • 第 2 层 (传输层) : HttpMaxConnsPerHost — 控制底层 TCP 连接
Native 协议采用简单的 1:1 映射,并会忽略 HttpMaxConnsPerHost

高级连接


客户端信息


ClickHouse 服务器设置

常见设置:

Context 级别查询选项

使用 clickhouse.Context() 为每个查询单独设置:
Context 截止时间的行为如果 Context 的截止时间 > 1 秒,max_execution_time 会自动设为 seconds_remaining + 5。这会覆盖任何手动设置的值。

批次选项

传递给 PrepareBatch()。导入:github.com/ClickHouse/clickhouse-go/v2/lib/driver

速查表

连接池大小建议

超时建议

DSN 参数速查


故障排查

连接池耗尽:“acquire conn timeout”

**原因:**连接池已耗尽——所有 MaxOpenConns 连接都在使用中,且在 DialTimeout 期限内没有连接可用。 解决方法 请按顺序尝试以下步骤,并在调整参数前先排查根本原因:
  1. 检查是否有长时间运行并占用连接的查询:SELECT query_id, elapsed FROM system.processes ORDER BY elapsed DESC。如果有,先处理这些慢查询。
  2. 如果你运行的是长生命周期的批次 (从 PrepareBatch()Send() 之间相隔数分钟或数小时) ,请使用 WithReleaseConnection(),以便在批次保持打开期间将连接归还到连接池。
  3. 增加 MaxOpenConns,使其与实际观测到的并发度相匹配。
  4. 仅当预期会出现突发流量,且等待获取连接确实是瓶颈时,才增加 DialTimeout

读取超时和连接重置错误

原因: 等待服务器响应时超过了 ReadTimeout,或者连接被服务器/网络关闭。 解决方法:
  • 对长时间运行的查询增大 ReadTimeout
  • 使用 Context deadline 控制每个查询的超时时间
  • 检查 ClickHouse 服务端的 max_execution_time 限制

”Code: 516. 身份验证失败”

原因: 用户名或密码错误,或者用户不存在。 解决方法:
  • 对照 system.users 表核实凭据
  • 检查 DSN 密码中的特殊字符是否存在 URL 编码问题
  • 确认该用户有权访问指定数据库

TLS 证书错误

内存逐渐增长

原因: 空闲连接的缓冲区大量积累。 解决方法:
  • 在内存受限的环境中设置 FreeBufOnConnRelease: true
  • 减少 MaxIdleConns 以限制空闲连接数
  • 如果使用压缩,减小 MaxCompressionBuffer
  • 调低 ConnMaxLifetime,让连接更频繁地轮换
最后修改于 2026年7月2日