sort_spill_mem

sort_spill_mem 系统变量用于设置排序操作的内存阈值(字节)。当排序操作消耗的内存超过 此值时,MatrixOne 会将中间排序数据溢写到磁盘以避免内存不足。设置为 0 表示禁用排序溢 写,所有排序数据保留在内存中。提高此值可以在不溢写的情况下运行更大的排序操作,但会增加 内存消耗。

sort_spill_mem 系统变量控制查询执行期间排序溢写磁盘行为的内存限制。当查询需要排序大 量数据且内存不足时,将 sort_spill_mem 设为正值可让中间数据写入临时磁盘存储,避免查询 因内存不足而失败。

语法

SET GLOBAL sort_spill_mem = value; SET SESSION sort_spill_mem = value;

查询当前值:

SHOW VARIABLES LIKE ‘sort_spill_mem’; SELECT @@sort_spill_mem; SELECT @@global.sort_spill_mem;

参数说明

属性

变量类型

int

作用域

Both

是否动态

默认值

0

可选值

01099511627776(1 TiB)

示例

DROP DATABASE IF EXISTS sort_spill_demo;
CREATE DATABASE sort_spill_demo;
USE sort_spill_demo;

CREATE TABLE t1(id INT, grp INT);
INSERT INTO t1 VALUES (1, 40), (2, 10), (3, 20), (4, 10), (5, 30), (6, 20);

SHOW VARIABLES LIKE 'sort_spill_mem';

SET @@sort_spill_mem = 1;
SHOW VARIABLES LIKE 'sort_spill_mem';

SET @@max_dop = 1;

SELECT id, grp FROM t1 WHERE id <= 6 ORDER BY grp, id;

SET @@sort_spill_mem = 0;
SHOW VARIABLES LIKE 'sort_spill_mem';

DROP TABLE t1;
DROP DATABASE sort_spill_demo;

限制

  • sort_spill_mem 以字节为单位。默认值 0 表示禁用溢写磁盘;如果内存不足,排序操作将 失败并报内存不足错误。

  • 溢写会产生 I/O 开销;启用溢写后查询可能比纯内存执行更慢。

  • 实际溢写行为还依赖于 max_dop 设置和可用的临时存储空间。