这些设置可在 system.settings 中查看,并由源代码自动生成。
max_execution_speed
每秒最大执行行数。在每个数据块上,都会在
timeout_before_checking_execution_speed
超时后进行检查。如果执行速度过高,系统会降低执行速度。
max_execution_speed_bytes
每秒允许的最大执行字节数。当
timeout_before_checking_execution_speed
到期时,会在每个数据块上进行检查。如果执行速度过高,则会降低执行速度。
max_execution_time
查询的最大执行时间 (单位为秒) 。
max_execution_time 参数可能有些不好理解。
它的工作方式是根据当前查询的执行速度进行插值计算
(这种行为由 timeout_before_checking_execution_speed 控制) 。
如果预计执行时间超过指定的 max_execution_time,ClickHouse 将中断查询。
默认情况下,timeout_before_checking_execution_speed
设置为 10 秒。这意味着查询执行 10 秒后,ClickHouse
会开始估算总执行时间。比如,如果 max_execution_time
设置为 3600 秒 (1 小时) ,那么当估算出的执行时间超过 3600 秒限制时,ClickHouse 就会终止该查询。
如果将 timeout_before_checking_execution_speed
设置为 0,ClickHouse 将以实际时钟时间作为 max_execution_time 的依据。
如果查询运行时间超过指定秒数,其行为将由
timeout_overflow_mode 决定,默认值为 throw。
max_execution_time_leaf
其语义与 max_execution_time 类似,但仅
适用于分布式或远程查询中的叶节点。
例如,如果我们希望将叶节点上的执行时间限制为 10s,但
对初始节点不设限制,那么在嵌套子查询的设置中,应使用 max_execution_time_leaf,而不是 max_execution_time:
SELECT count()
FROM cluster(cluster, view(SELECT * FROM t SETTINGS max_execution_time = 10));我们可以将 max_execution_time_leaf 作为查询设置使用:
SELECT count()
FROM cluster(cluster, view(SELECT * FROM t)) SETTINGS max_execution_time_leaf = 10;