clickhouse处理超时问题

以下设置可以调整users.xml参数,或者使用SQL-driven来管理用户权限,通过执行以下sql也可以达到同等效果。

一、HTTP协议(8123端口)

  HTTP协议是ClickHouse在生产环境中最常使用的交互方式,包括官方提供的jdbc driver、阿里云DMS、DataGrip,后台使用的都是HTTP协议。HTTP协议常用的端口号为8123。

1.如何处理distributed_ddl_task_timeout超时问题

分布式DDL查询(带有 on cluster clause)的执行等待时间,系统默认是180s。您可以执行以下命令来设置全局参数,设置后需要重启集群。

 
set global on cluster default distributed_ddl_task_timeout = 1800;

 

由于分布式DDL是基于zookeeper构建任务队列异步执行,执行等待超时并不代表查询失败,只表示之前发送还在排队等待执行,用户不需要重复发送任务。

2.如何处理max_execution_time超时问题

一般查询的执行超时时间,默认设置是7200s,jdbc driver、DataGrip上默认是30s。超时限制触发之后查询会自动取消。用户可以进行查询级别更改,例如select * from system.numbers settings max_execution_time = 3600,也可以执行以下命令来设置全局参数。
 
set global on cluster default max_execution_time = 3600;

 

3.如何处理socket_timeout超时问题

HTTP协议在监听socket返回结果时的等待时间,默认设置是7200s,jdbc driver、DataGrip上默认是30s。该参数不是Clickhouse系统内的参数,它属于jdbc在HTTP协议上的参数,但它是会影响到前面的max_execution_time参数设置效果,因为它决定了客户端在等待结果返回上的时间限制。所以一般用户在调整max_execution_time参数的时候也需要配套调整socket_timeout参数,略微高于max_execution_time即可。用户设置参数时需要在jdbc链接串上添加socket_timeout这个property,单位是毫秒,例如:'jdbc:clickhouse://127.0.0.1:8123/default?socket_timeout=3600000'。

4.如何处理使用SLB链接时的异常断链

SLB链接在长时间内没有数据报文发送时会自动断开链接,客户端收到”read timeout“错误,查询无法追踪。对于这种情况可以执行以下命令来设置全局参数,设置后需要重启集群。
 
set global on cluster default send_progress_in_http_headers = 1; 
set global on cluster default http_headers_progress_interval_ms = 60000; 
--对于最新版本您需要使用如下命令,设置失败时可以先申请小版本升版。
 
set global on cluster default http_server_enable_tcp_keep_alive = 1; 
set global on cluster default tcp_keep_alive_timeout = 60; 

 

开启send_progress_in_http_headers后,ClickHouse服务端会不断发送包含查询进度的HTTP-Header报文给客户端,这样就会一直有数据报文流通,避免链接断开。

因为各种原因客户端失联后,HTTP协议发送的查询仍然会继续执行。用户可以在系统表追踪到查询是否成功执行。
--查询集群中所有实例当前正在running的查询:
 
select * from remote(default, system, processes) where query like 'XXX'
--查询当天的历史查询结果,包括是否成功、已经失败的错误信息:
 
select * from remote(default, system, query_log) where event_date = toDate(now()) and query like 'XXX'

 

二、TCP协议(9000端口)

  TCP协议最常使用的场景是ClickHouse自带的命令行工具进行交互分析时,常见端口号为9000。因为TCP协议里有链接定时探活报文,所以它不会出现socker层面的超时问题。只需关注distributed_ddl_task_timeout和max_execution_time参数的超时,设置方法和HTTP协议一致。

posted @ 2022-03-07 16:22  渐逝的星光  阅读(4057)  评论(0编辑  收藏  举报