cte_max_memory_bytes¶
cte_max_memory_bytes限制单个查询在每个 CN 上为递归 CTE 批次保留的内存。
描述¶
cte_max_memory_bytes 是同时具有 GLOBAL 和 SESSION 作用域的动态系统变量。当 CN 上递归 CTE 批次的预估内存超过会话值时,查询会因递归 CTE 内存配额错误而中止。该值是近似的 OOM 熔断器,并非对语句中每个算子的字节精确计费。
默认值为 1073741824 字节(1 GiB),有效范围为 0 至 1099511627776 字节(1 TiB)。设为 0 可禁用该熔断器。使用 cte_max_recursion_depth 限制递归迭代次数;递归 CTE 规则参见 WITH(公共表达式)。
语法¶
SET [GLOBAL | SESSION] cte_max_memory_bytes = number_of_bytes
该变量可以动态修改。不指定作用域关键字时,默认修改 SESSION 值。
参数说明¶
cte_max_memory_bytes 接受 0 至 1099511627776 范围内的非负整数(单位为字节)。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;