clickhouse-go v2.x. Примеры с кодом см. в разделе Конфигурация.
Пометки о версияхПараметры, добавленные в
clickhouse-go v2.35.0 и новее, помечены как (Начиная с vX.Y.Z) рядом с описанием. Параметры без метки “Начиная с” доступны с v2.0 и присутствуют во всех поддерживаемых версиях.Как задаются параметры
Если области видимости пересекаются, приоритет имеет более конкретный уровень: батч > Query > Connection. Для
Settings ключи уровня запроса объединяются с ключами уровня соединения; при конфликте приоритет у ключей уровня запроса.
Через структуру Options:
Варианты подключения
Протокол и подключение
Аутентификация
Тайм-ауты
Сервис ClickHouse Cloud, который некоторое время не использовался, приостанавливается и пробуждается при первом входящем соединении. Пробуждение обычно занимает несколько десятков секунд, в течение которых попытка подключения блокируется. Если
DialTimeout меньше времени пробуждения, первый запрос после периода простоя завершается ошибкой тайм-аута подключения вместо выполнения.Установите DialTimeout в 1m–2m для клиентов, которые могут первыми обратиться к приостановленному сервису. Компромисс в том, что при реальном сбое обнаружение ошибки будет медленнее — попытка подключения будет блокироваться на весь тайм-аут перед возвратом ошибки, — поэтому лучше ограничить увеличенный тайм-аут только первым подключением или использовать дедлайны контекста для отдельных запросов, чтобы ограничить сквозную задержку.Пул соединений
только для
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
Двухуровневый пул HTTP-соединенийПри использовании HTTP есть два пула соединений:
- Уровень 1 (приложение):
MaxIdleConns/MaxOpenConns— управляет объектамиhttpConnect - Уровень 2 (транспорт):
HttpMaxConnsPerHost— управляет базовыми TCP-соединениями
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.
Решение
Попробуйте выполнить следующие шаги по порядку и определить первопричину, прежде чем менять параметры:
- Проверьте, нет ли длительно выполняющихся запросов, удерживающих соединения:
SELECT query_id, elapsed FROM system.processes ORDER BY elapsed DESC. Если такие запросы есть, сначала разберитесь с ними. - Если вы используете долгоживущие батчи (минуты/часы между
PrepareBatch()иSend()), применяйтеWithReleaseConnection(), чтобы вернуть соединение в пул, пока батч остаётся открытым. - Увеличьте
MaxOpenConnsв соответствии с наблюдаемым параллелизмом. - Увеличивайте
DialTimeoutтолько в том случае, если ожидаются всплески нагрузки и реким узким местом действительно является ожидание получения соединения.
Ошибки тайм-аута чтения и сброса соединения
ReadTimeout при ожидании ответа от сервера, либо соединение было закрыто сервером или сетью.
Решение:
- Увеличьте
ReadTimeoutдля длительно выполняющихся запросов - Используйте дедлайны контекста для управления тайм-аутом отдельных запросов
- Проверьте ограничения
max_execution_timeна стороне ClickHouse server
”Код: 516. Ошибка аутентификации”
- Проверьте учетные данные в таблице
system.users - Проверьте, нет ли проблем с URL-кодированием специальных символов в паролях DSN
- Убедитесь, что у пользователя есть доступ к указанной базе данных
Ошибки TLS-сертификатов
Постепенный рост потребления памяти
- Установите
FreeBufOnConnRelease: trueв средах с ограниченным объёмом памяти - Уменьшите
MaxIdleConns, чтобы ограничить количество бездействующих соединений - Уменьшите
MaxCompressionBuffer, если используете сжатие - Уменьшите
ConnMaxLifetime, чтобы соединения пересоздавались чаще