clickhouse-go v2.x. Para um guia com exemplos de código, consulte Configuração.
Anotações de versãoAs opções adicionadas no
clickhouse-go v2.35.0 ou posterior são marcadas com (Desde a vX.Y.Z) ao lado da descrição. As opções sem a tag “Since” estão disponíveis desde a v2.0 e estão presentes em todos os lançamentos com suporte.Como as opções são definidas
Quando os escopos se sobrepõem, o escopo mais específico prevalece: Lote > Consulta > Conexão. Para
Settings, as chaves no nível da consulta são mescladas com as chaves no nível da conexão; em caso de conflito, prevalece o nível da consulta.
Via a struct Options:
database/sql com a struct Options):
Opções de conexão
Protocolo e conexão
Autenticação
Timeouts
Pool de conexões
somente
database/sqlConnMaxIdleTime é uma configuração padrão do pool do Go database/sql. Ela não está disponível na struct clickhouse.Options nem via clickhouse.Open(). Defina-a após OpenDB():Configurações padrão do pool do database/sql
clickhouse.OpenDB() ou sql.Open("clickhouse", dsn), o *sql.DB retornado é compatível com os métodos padrão de pool do Go. OpenDB() aplica automaticamente os três primeiros com base em Options:
ClickHouse API (clickhouse.Open)Esses métodos não estão disponíveis na conexão retornada por
clickhouse.Open(). A ClickHouse API gerencia internamente seu próprio pool usando diretamente os campos da struct Options.Compressão
Suporte a métodos de compressão por protocolo:
TLS
Consulte TLS para ver exemplos de código.
Logging
Buffers e memória
Específico para HTTP
Pooling HTTP em duas camadasAo usar HTTP, há dois pools de conexões:
- Camada 1 (aplicação):
MaxIdleConns/MaxOpenConns— controla objetoshttpConnect - Camada 2 (transporte):
HttpMaxConnsPerHost— controla as conexões TCP subjacentes
HttpMaxConnsPerHost.Conexão avançada
Informações do cliente
Configurações do servidor ClickHouse
Configurações comuns:
Opções de consulta no nível do contexto
clickhouse.Context():
Comportamento do tempo limite do contextoSe o contexto tiver um tempo limite > 1s,
max_execution_time será definido automaticamente como seconds_remaining + 5. Isso substitui qualquer valor definido manualmente.Opções de lote
PrepareBatch(). Import: github.com/ClickHouse/clickhouse-go/v2/lib/driver.
Tabelas de referência rápida
Recomendações de dimensionamento do pool de conexões
Recomendações de timeout
Referência rápida dos parâmetros de DSN
Solução de problemas
Pool de conexões esgotado: “acquire conn timeout”
MaxOpenConns estão em uso, e nenhuma foi liberada dentro de DialTimeout.
Correção
Tente as etapas a seguir em ordem e identifique a causa raiz antes de ajustar os parâmetros:
- Verifique se há consultas de longa execução mantendo conexões ocupadas:
SELECT query_id, elapsed FROM system.processes ORDER BY elapsed DESC. Se encontrar alguma, resolva primeiro as consultas lentas. - Se você executa lotes de longa duração (minutos/horas entre
PrepareBatch()eSend()), useWithReleaseConnection()para devolver a conexão ao pool enquanto o lote estiver aberto. - Aumente
MaxOpenConnspara acompanhar a concorrência observada. - Aumente
DialTimeoutapenas se forem esperados picos de uso e a espera para adquirir conexão for o verdadeiro gargalo.
Timeout de leitura e erros de redefinição de conexão
ReadTimeout foi excedido enquanto se aguardava uma resposta do servidor, ou a conexão foi fechada pelo servidor/rede.
Correção:
- Aumente o
ReadTimeoutpara consultas de longa duração - Use prazos de contexto para controlar o timeout por consulta
- Verifique os limites de
max_execution_timeno lado do servidor do ClickHouse
”Code: 516. Falha na autenticação”
- Verifique as credenciais na tabela
system.users - Verifique se há problemas de codificação de URL com caracteres especiais nas senhas do DSN
- Confirme se o usuário tem acesso ao banco de dados especificado
Erros de certificado TLS
Aumento gradual do uso de memória
- Defina
FreeBufOnConnRelease: trueem ambientes com memória limitada - Reduza
MaxIdleConnspara limitar o número de conexões ociosas - Reduza
MaxCompressionBufferse estiver usando compressão - Diminua
ConnMaxLifetimepara reciclar as conexões com mais frequência