max_temporary_columns
运行查询时,必须同时保存在 RAM 中的临时列最大数量,包括常量列。如果查询因中间计算而在内存中生成的临时列数超过指定数量,则会抛出异常。0 表示不受限制。
max_temporary_data_on_disk_size_for_query
所有并发运行的查询在磁盘上使用的临时 File 的最大总数据量,单位为字节。 可能的值:- 正整数。
0— 不受限制 (默认)
max_temporary_data_on_disk_size_for_user
同一用户所有并发运行的查询在 disk 上的临时 File 所占数据量上限,单位为字节。 可能的值:- 正整数。
0— 不受限制 (默认)
max_temporary_non_const_columns
与max_temporary_columns 类似,该设置表示执行查询时需要同时保存在 RAM 中的临时列的最大数量,但不包括常量列。
执行查询时经常会生成常量列,但它们几乎不消耗计算资源。
max_temporary_table_memory_usage
单个使用Memory 引擎的临时表最多可占用的内存字节数。
该设置适用于通过 CREATE TEMPORARY TABLE 创建的表,包括使用默认临时表引擎创建的表
(参见 default_temporary_table_engine) ,其计算方式与 system.tables 中的 total_bytes 相同。
每次向该表执行 INSERT (包括 CREATE TEMPORARY TABLE ... AS SELECT) 时都会检查此限制:接收数据期间检查一次,
添加数据之前再检查一次。如果表会超出该限制,INSERT 将抛出错误代码为
TOO_MANY_BYTES 的异常,且不会添加数据。使用多个线程写入的 INSERT (参见
max_insert_threads) 会分别添加各线程的数据,因此当某个线程抛出异常时,其他部分线程的数据可能已经添加,
但表的大小始终不会超出该限制。该值取自 INSERT 查询的设置。
执行变更 (ALTER TABLE ... UPDATE、MATERIALIZE COLUMN 等) 后也会检查此限制,所用的值取自
ALTER 查询的设置:如果变更后的数据会超出该限制,变更将抛出错误代码为
TOO_MANY_BYTES 的异常,且数据保持不变。
请注意,Memory 引擎的 max_bytes_to_keep 设置与此不同:它会淘汰最旧的数据,而不是
拒绝新数据。如果两者同时设置,则先执行淘汰。
可选值:
- 正整数。
0— 不限制 (默认值)
max_temporary_table_size_bytes_compressed
单个使用MergeTree 家族引擎的临时表在磁盘上的数据 (压缩后) 的最大字节数。
该设置适用于通过 CREATE TEMPORARY TABLE 创建的表,其计算方式与 system.tables 中的 total_bytes 相同,
即所有活跃数据分区片段的大小之和。
每次向该表执行 INSERT (包括 CREATE TEMPORARY TABLE ... AS SELECT) 时,都会在提交每个新的
数据分区片段之前检查该限制:如果表的大小将超出限制,INSERT 会抛出错误代码为 TOO_MANY_BYTES 的异常,
且不会添加该 part。同一 INSERT 此前已提交的 parts 仍会保留在表中,这与插入多个块的 INSERT
过程中发生其他错误时的行为一致。该值取自 INSERT 查询的设置。
向表中添加已有 parts 的操作也受同样的限制,其值取自各自查询的设置:ATTACH PART、ATTACH PARTITION、ATTACH PARTITION ... FROM、REPLACE PARTITION ... FROM
以及 CREATE TEMPORARY TABLE ... CLONE AS。只要这些操作会增加表的大小,就会被整体拒绝。对于 ATTACH PARTITION,会在附加之前对其所有 parts 统一检查一次,
因此与之并发执行的写入操作可能会导致表略微超出限制。
后台合并和变更 (ALTER TABLE ... UPDATE、
MATERIALIZE COLUMN 等) 写入的 parts 不受检查,因此会使数据变大的变更可能导致表超出限制。
可选值:
- 正整数。
0— 不限制 (默认)
max_temporary_table_size_bytes_uncompressed
使用MergeTree 家族引擎的单个临时表中未压缩数据的最大字节数。
该设置适用于通过 CREATE TEMPORARY TABLE 创建的表,其计算方式与 system.tables 中的 total_bytes_uncompressed
一致。
该限制的检查方式与 max_temporary_table_size_bytes_compressed 相同。
可选值:
- 正整数。
0— 不限制 (默认)
max_temporary_tables
单个会话中可同时存在的临时表的最大数量。 仅统计通过CREATE TEMPORARY TABLE 创建的表:随查询发送的外部数据所对应的表,以及为 GLOBAL IN / GLOBAL JOIN 或 materialized CTE 在内部构建的临时表,均不计入。
每次创建新临时表时都会检查该限制。如果会话中的临时表数量已达到此值,则会抛出错误代码为 TOO_MANY_TABLES 的异常。使用 CREATE OR REPLACE TEMPORARY TABLE 替换已有临时表不会增加表的数量,因此始终允许执行。
可选值:
- 正整数。
0— 不限制 (默认)