по http большую табличку, сделал http запрос, читаю боди, все хорошо, но ровно через час отваливается, и в body дописывает:
Code: 159, e.displayText() = DB::Exception: Timeout exceeded: elapsed 3600.121469906 seconds, maximum: 3600: \nCode: 159, e.displayText() = DB::Exception: Timeou
читаю примерно на go вот так:
```
req := resty.New().R().
SetContext(ctx).
SetHeaders(config.HTTPAuthHeaders()).
SetQueryParam("database", config.Database).
SetBody([]byte(query))
url := fmt.Sprintf("%v://%v:%v/?database=%v", config.HTTPProtocol(), host, config.HTTPPort, config.Database)
r, err := req.Post(url)
```
Ну так у вас тайм аут на 1 час стоит, а потом сессию закрывает clickhouse
Я пробовал его крутить, он чот не крутится, судя по всему это idle_connection_timeout, но я активно читаю из тела ответа
socket_timeout параметр сессии
Хм, ша попробую поставить его
url := fmt.Sprintf("%v://%v:%v/?database=%v&socket_timeout=360000", config.HTTPProtocol(), host, config.HTTPPort, config.Database) вот так его переопределить?
send_timeout и receive_timeout лучше в URL добавлять и со стороны resty SetTimeout сделать
делал вот так: req := resty.New().SetTimeout(time.Hour * 24).R(). SetContext(ctx). SetHeaders(config.HTTPAuthHeaders()). SetQueryParam("database", config.Database). SetBody([]byte(query)) url := fmt.Sprintf("%v://%v:%v/?database=%v&send_timeout=360000&receive_timeout=360000&idle_connection_timeout=360000", config.HTTPProtocol(), host, config.HTTPPort, config.Database) r, err := req.Post(url) Code: 159, e.displayText() = DB::Exception: Timeout exceeded: elapsed 3600.904620885 seconds, maximum: 3600: \nCode: 159, e.displayText() = DB::Exception: Timeou
вам админы ограничили max_execution_time https://clickhouse.com/docs/en/operations/settings/query-complexity/#max-execution-time
Обсуждают сегодня