Таймаут jdbc-драйвера при запросах дольше 30 секунд

3,917 views
Skip to first unread message

Arthur Tokarchuk

unread,
May 13, 2017, 6:06:02 AM5/13/17
to ClickHouse
Добрый день!

Столкнулся с тем, что при использовании соединения через jdbc-драйвер запросы, обрабатывающиеся до возвращения какого-нибудь результата дольше 30 секунд, завершаются ошибкой (таймаут при чтении).



KEEP_ALIVE_TIMEOUT("keepAliveTimeout", 30 * 1000, ""),

Как увеличить это значение?
Обязательно ли перекомпилировать модуль, или это можно сделать при запуске java через system properties (-D) например?

Yegor Andreenko

unread,
May 13, 2017, 3:22:20 PM5/13/17
to ClickHouse
это скорее socket_timeout, который тоже 30 секунд. https://github.com/yandex/clickhouse-jdbc/blob/master/src/main/java/ru/yandex/clickhouse/settings/ClickHouseConnectionSettings.java#L12
keep_alive будет отвечать за удержание соединения, и тоже может быть определен. 
я в zeppelin задаю properties как
 
common.max_count10000
...
socket_timeout120000

так что думаю через -D должно работать.

Arthur Tokarchuk

unread,
May 17, 2017, 7:23:40 AM5/17/17
to ClickHouse
Спасибо!

К сожалению, решение "в лоб" с  не работает:

java -DkeepAliveTimeout=60000 -Dsocket_timeout=90000 -Djdbc.drivers=ru.yandex.clickhouse.ClickHouseDriver: -Ddbd.port=9001 com.vizdom.dbd.jdbc.Server

В моём случае схема выглядит несколько сложней: джавой запускается модуль JDBC proxy для DBI, где параметром указывается нужный JDBC-драйвер, в данном случае clickhouse.

Dmitry Serbin

unread,
Jul 6, 2017, 3:54:25 AM7/6/17
to ClickHouse
Через -D не работает, т.к. это не системные свойства, а свойства JDBC-соединения. Их можно либо указать явно при создании JDBC-соединения:
ClickHouseDriver.connect(String url, ClickHouseProperties properties)
Либо непосредственно в URI:
jdbc:clickhouse://<server>:<port>?socket_timeout=90000

Вот на эти свойства имеет смысл смотреть в плане настройки таймаутов соединения:
SOCKET_TIMEOUT("socket_timeout", 30000, "")
CONNECTION_TIMEOUT("connection_timeout", 10 * 1000, "connection timeout in milliseconds")
DATA_TRANSFER_TIMEOUT( "dataTransferTimeout", 10000, "Timeout for data transfer. "
+ " socketTimeout + dataTransferTimeout is sent to ClickHouse as max_execution_time. "
+ " ClickHouse rejects request execution if its time exceeds max_execution_time")

среда, 17 мая 2017 г., 14:23:40 UTC+3 пользователь Arthur Tokarchuk написал:
Reply all
Reply to author
Forward
0 new messages