即时变更
SELECT 查询将自动返回变更后的值。未启用即时变更时,你可能需要等待后台进程完成这些变更后,才能看到变更后的值。
对于 MergeTree 家族的表,可以通过启用查询级设置 apply_mutations_on_fly 来开启即时变更。
示例
SELECT 查询来检查更新结果:
SELECT 查询会立即返回正确结果,无需等待变更生效:
性能影响
SELECT 查询时应用。不过请注意,变更仍会在后台异步物化,而这一过程开销较大。
如果在一段时间内,已提交的变更数量持续超过后台处理的变更数量,那么待应用的未物化变更队列就会不断增长。最终,这将导致 SELECT 查询性能下降。
我们建议将设置 apply_mutations_on_fly 与其他 MergeTree 级别的设置 (如 number_of_mutations_to_throw 和 number_of_mutations_to_delay) 一并启用,以限制未物化变更队列无限增长。
对子查询和非确定性函数的支持
mutations_max_literal_size_to_replace 控制) 。仅支持常量型非确定性函数 (例如函数 now()) 。
这些行为由以下设置控制:
mutations_execute_nondeterministic_on_initiator- 如果为 true,则在发起副本上执行非确定性函数,并在UPDATE和DELETE查询中将其替换为字面量。默认值:false。mutations_execute_subqueries_on_initiator- 如果为 true,则在发起副本上执行标量子查询,并在UPDATE和DELETE查询中将其替换为字面量。默认值:false。mutations_max_literal_size_to_replace- 在UPDATE和DELETE查询中可替换的序列化字面量的最大大小 (以字节为单位) 。默认值:16384(16 KiB) 。