clickhouse-go v2.x. Para ver una guía con ejemplos de código, consulta Configuración.
Anotaciones de versiónLas opciones añadidas en
clickhouse-go v2.35.0 o versiones posteriores están marcadas con (Desde vX.Y.Z) junto a su descripción. Las opciones sin la etiqueta “Desde” están disponibles desde la v2.0 y están presentes en todas las versiones compatibles.Cómo se configuran las opciones
Cuando los ámbitos se superponen, prevalece el más específico: Lote > Consulta > Conexión. Para
Settings, las claves del nivel de consulta se combinan con las del nivel de conexión y, en caso de conflicto, prevalecen las del nivel de consulta.
Mediante la estructura Options:
Opciones de conexión
Protocolo y conexión
Autenticación
Tiempos de espera
Un servicio de ClickHouse Cloud que ha estado inactivo entra en pausa y se reactiva con la primera conexión entrante. La reactivación suele tardar unas pocas decenas de segundos, durante las cuales la conexión queda bloqueada. Si
DialTimeout es menor que el tiempo de reactivación, la primera consulta después de un período de inactividad falla con un timeout de conexión en lugar de ejecutarse.Configure DialTimeout en 1m–2m para los clients que puedan ser los primeros en llegar a un servicio inactivo. La contrapartida es una detección de fallos más lenta durante una caída real: los intentos de conexión quedan bloqueados durante todo el tiempo de espera antes de devolver un error, así que prefiera limitar el tiempo de espera más alto a la primera conexión, o use límites de tiempo del contexto en consultas individuales para acotar la latencia de extremo a extremo.Pool de conexiones
Solo
database/sqlConnMaxIdleTime es una configuración estándar del pool de Go database/sql. No está disponible en la estructura clickhouse.Options ni mediante clickhouse.Open(). Configúralo después de OpenDB():Configuración estándar del pool de database/sql
clickhouse.OpenDB() o sql.Open("clickhouse", dsn), el *sql.DB devuelto admite los métodos estándar de pool de Go. OpenDB() aplica automáticamente los tres primeros a partir de Options:
ClickHouse API (clickhouse.Open)Estos métodos no están disponibles en la conexión devuelta por
clickhouse.Open(). La ClickHouse API gestiona su propio pool internamente usando directamente los campos de la estructura Options.Compresión
Compatibilidad de métodos de compresión por protocolo:
TLS
Consulte TLS para ver ejemplos de código.
Registro
Búferes y memoria
Específico de HTTP
Pool HTTP de dos capasAl usar HTTP, hay dos pools de conexiones:
- Capa 1 (aplicación):
MaxIdleConns/MaxOpenConns— controla los objetoshttpConnect - Capa 2 (transporte):
HttpMaxConnsPerHost— controla las conexiones TCP subyacentes
HttpMaxConnsPerHost.Conexión avanzada
Información del cliente
Ajustes del servidor ClickHouse
Ajustes comunes:
Opciones de consulta a nivel de contexto
clickhouse.Context():
Comportamiento del tiempo límite de contextoSi el contexto tiene un tiempo límite > 1 s,
max_execution_time se establece automáticamente en seconds_remaining + 5. Esto anula cualquier valor establecido manualmente.Opciones de lote
PrepareBatch(). Importación: github.com/ClickHouse/clickhouse-go/v2/lib/driver.
Tablas de consulta rápida
Recomendaciones para el dimensionamiento del pool de conexiones
Recomendaciones de timeout
Referencia rápida de los parámetros de DSN
Solución de problemas
Pool de conexiones agotado: “acquire conn timeout”
MaxOpenConns están en uso y ninguna se liberó dentro de DialTimeout.
Solución
Pruebe los siguientes pasos en orden y diagnostique la causa raíz antes de ajustar los parámetros:
- Compruebe si hay consultas de larga duración que mantienen conexiones ocupadas:
SELECT query_id, elapsed FROM system.processes ORDER BY elapsed DESC. Si las encuentra, resuelva primero las consultas lentas. - Si ejecuta lotes de larga duración (minutos/horas entre
PrepareBatch()ySend()), useWithReleaseConnection()para devolver la conexión al pool mientras el lote permanece abierto. - Aumente
MaxOpenConnspara ajustarlo a la concurrencia observada. - Aumente
DialTimeoutsolo si se esperan picos y la espera para adquirir una conexión es el verdadero cuello de botella.
Errores de tiempo de espera de lectura y restablecimiento de conexión
ReadTimeout mientras se esperaba una respuesta del servidor, o el servidor o la red cerraron la conexión.
Solución:
- Aumente
ReadTimeoutpara consultas de larga duración - Use fechas límite de contexto para controlar el tiempo de espera de cada consulta
- Compruebe los límites de
max_execution_timeen el servidor de ClickHouse
”Código: 516. Falló la autenticación”
- Verifique las credenciales en la tabla
system.users - Compruebe si hay problemas de codificación de URL con caracteres especiales en las contraseñas del DSN
- Confirme que el usuario tenga acceso a la base de datos especificada
Errores de certificado TLS
Aumento gradual de memoria
- Establece
FreeBufOnConnRelease: trueen entornos con memoria limitada - Reduce
MaxIdleConnspara limitar las conexiones inactivas - Reduce
MaxCompressionBuffersi usas compresión - Reduce
ConnMaxLifetimepara reciclar las conexiones con más frecuencia