概述
你可能会遇到 ClickHouse TCP 连接 (即通过命令行客户端建立的连接) 在执行一定数量的查询后,或达到一定耗时后自动断开。 断开后,不会自动重连 (除非由其他操作触发, 例如在命令行客户端中再次发送查询) 。
可通过将服务器设置
tcp_close_connection_after_queries_num (用于查询限制)
或 tcp_close_connection_after_queries_seconds (用于持续时间限制) 设置为大于 0 来启用连接限制。
如果两个限制都已启用,则哪个限制先达到,连接就会先因其而关闭。
当达到限制并断开连接时,客户端会收到
TCP_CONNECTION_LIMIT_REACHED 异常,并且触发断开的那条查询绝不会被处理。
查询限制
假设将 tcp_close_connection_after_queries_num 设置为 N,则该连接最多允许
N 个成功查询。到第 N + 1 个查询时,客户端会断开连接。
每个已处理的查询都会计入查询限制。因此,连接命令行客户端时, 可能会自动执行一条初始系统警告查询,这也会计入限制。
当 TCP 连接处于空闲状态时 (即在一段时间内未处理查询,
该时长由会话设置 poll_interval 指定) ,此前累计的查询次数会重置为 0。
这意味着,如果期间发生空闲,
单个连接中的查询总次数可能会超过
tcp_close_connection_after_queries_num。
持续时间限制
连接持续时间从客户端一建立连接时就开始计算。
在经过 tcp_close_connection_after_queries_seconds 秒后,客户端会在下一次执行查询时断开连接。