cte_max_memory_bytes

cte_max_memory_bytes 限制单个查询在每个 CN 上为递归 CTE 批次保留的内存。

描述

cte_max_memory_bytes 是同时具有 GLOBALSESSION 作用域的动态系统变量。当 CN 上递归 CTE 批次的预估内存超过会话值时,查询会因递归 CTE 内存配额错误而中止。该值是近似的 OOM 熔断器,并非对语句中每个算子的字节精确计费。

默认值为 1073741824 字节(1 GiB),有效范围为 01099511627776 字节(1 TiB)。设为 0 可禁用该熔断器。使用 cte_max_recursion_depth 限制递归迭代次数;递归 CTE 规则参见 WITH(公共表达式)

语法

SET [GLOBAL | SESSION] cte_max_memory_bytes = number_of_bytes

该变量可以动态修改。不指定作用域关键字时,默认修改 SESSION 值。

参数说明

cte_max_memory_bytes 接受 01099511627776 范围内的非负整数(单位为字节)。0 表示禁用限制,默认值为 1073741824(1 GiB)。

示例

SET SESSION cte_max_memory_bytes = 16777216;
SELECT @@session.cte_max_memory_bytes;
SET SESSION cte_max_memory_bytes = 0;
SELECT @@session.cte_max_memory_bytes;