Перейти к основному содержанию
На этой странице описаны все настраиваемые параметры в clickhouse-go v2.x. Примеры с кодом см. в разделе Конфигурация.
Пометки о версияхПараметры, добавленные в clickhouse-go v2.35.0 и новее, помечены как (Начиная с vX.Y.Z) рядом с описанием. Параметры без метки “Начиная с” доступны с v2.0 и присутствуют во всех поддерживаемых версиях.

Как задаются параметры

Параметры доступны на трех уровнях: Если области видимости пересекаются, приоритет имеет более конкретный уровень: батч > Query > Connection. Для Settings ключи уровня запроса объединяются с ключами уровня соединения; при конфликте приоритет у ключей уровня запроса. Через структуру Options:
Через строку DSN:
Через Connector (database/sql со структурой Options):
Через Context (для каждого запроса):

Варианты подключения

Протокол и подключение


Аутентификация


Тайм-ауты

Сервис ClickHouse Cloud, который некоторое время не использовался, приостанавливается и пробуждается при первом входящем соединении. Пробуждение обычно занимает несколько десятков секунд, в течение которых попытка подключения блокируется. Если DialTimeout меньше времени пробуждения, первый запрос после периода простоя завершается ошибкой тайм-аута подключения вместо выполнения.Установите DialTimeout в 1m2m для клиентов, которые могут первыми обратиться к приостановленному сервису. Компромисс в том, что при реальном сбое обнаружение ошибки будет медленнее — попытка подключения будет блокироваться на весь тайм-аут перед возвратом ошибки, — поэтому лучше ограничить увеличенный тайм-аут только первым подключением или использовать дедлайны контекста для отдельных запросов, чтобы ограничить сквозную задержку.

Пул соединений

только для database/sqlConnMaxIdleTime — это стандартная настройка пула Go database/sql. Она недоступна в структуре clickhouse.Options или через clickhouse.Open(). Задайте её после OpenDB():
См. Пул соединений, чтобы узнать подробности использования.

Стандартные настройки пула database/sql

При использовании clickhouse.OpenDB() или sql.Open("clickhouse", dsn) возвращаемый объект *sql.DB поддерживает стандартные методы пула Go. OpenDB() автоматически применяет первые три параметра из Options:
API ClickHouse (clickhouse.Open)Эти методы недоступны для подключения, возвращаемого clickhouse.Open(). API ClickHouse управляет собственным пулом внутри, напрямую используя поля структуры Options.

Сжатие

Поддержка методов сжатия по протоколам:

TLS

См. TLS для примеров кода.

Журналирование

Подробные примеры см. в разделе Логирование.

Буферы и память


Для HTTP

Молча игнорируется при использовании собственного протоколаЭти параметры влияют только на Protocol: clickhouse.HTTP. При использовании собственного протокола они молча игнорируются, без ошибок и предупреждений.
Двухуровневый пул HTTP-соединенийПри использовании HTTP есть два пула соединений:
  • Уровень 1 (приложение): MaxIdleConns / MaxOpenConns — управляет объектами httpConnect
  • Уровень 2 (транспорт): HttpMaxConnsPerHost — управляет базовыми TCP-соединениями
Собственный протокол использует простое соотношение 1:1 и игнорирует HttpMaxConnsPerHost.

Расширенные настройки подключения


Информация о клиенте


Настройки сервера ClickHouse

Распространённые настройки:

Параметры запроса на уровне Context

Задаются для каждого запроса с помощью clickhouse.Context():
Поведение дедлайна контекстаЕсли для контекста задан дедлайн > 1s, 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 для длительно выполняющихся запросов
  • Используйте дедлайны контекста для управления тайм-аутом отдельных запросов
  • Проверьте ограничения max_execution_time на стороне ClickHouse server

”Код: 516. Ошибка аутентификации”

Причина: Неверное имя пользователя, пароль или пользователь не существует. Исправление:
  • Проверьте учетные данные в таблице system.users
  • Проверьте, нет ли проблем с URL-кодированием специальных символов в паролях DSN
  • Убедитесь, что у пользователя есть доступ к указанной базе данных

Ошибки TLS-сертификатов

Постепенный рост потребления памяти

Причина: Накопление больших буферов у бездействующих соединений. Решение:
  • Установите FreeBufOnConnRelease: true в средах с ограниченным объёмом памяти
  • Уменьшите MaxIdleConns, чтобы ограничить количество бездействующих соединений
  • Уменьшите MaxCompressionBuffer, если используете сжатие
  • Уменьшите ConnMaxLifetime, чтобы соединения пересоздавались чаще
Последнее изменение 1 июля 2026 г.