跳至主要内容
跳至主要内容

实时突变

实时突变

当启用实时突变时,更新的行会被立即标记为已更新,后续的 SELECT 查询会自动返回更改后的值。当未启用实时突变时,您可能需要等待通过后台进程应用您的突变才能看到更改后的值。

可以通过启用查询级别设置 apply_mutations_on_fly 来为 MergeTree 系列表启用实时突变。

SET apply_mutations_on_fly = 1;

示例

让我们创建一个表并运行一些突变

CREATE TABLE test_on_fly_mutations (id UInt64, v String)
ENGINE = MergeTree ORDER BY id;

-- Disable background materialization of mutations to showcase
-- default behavior when on-the-fly mutations are not enabled
SYSTEM STOP MERGES test_on_fly_mutations;
SET mutations_sync = 0;

-- Insert some rows in our new table
INSERT INTO test_on_fly_mutations VALUES (1, 'a'), (2, 'b'), (3, 'c');

-- Update the values of the rows
ALTER TABLE test_on_fly_mutations UPDATE v = 'd' WHERE id = 1;
ALTER TABLE test_on_fly_mutations DELETE WHERE v = 'd';
ALTER TABLE test_on_fly_mutations UPDATE v = 'e' WHERE id = 2;
ALTER TABLE test_on_fly_mutations DELETE WHERE v = 'e';

让我们通过 SELECT 查询检查更新的结果

-- Explicitly disable on-the-fly-mutations
SET apply_mutations_on_fly = 0;

SELECT id, v FROM test_on_fly_mutations ORDER BY id;

请注意,当我们查询新表时,行的值尚未更新

┌─id─┬─v─┐
│  1 │ a │
│  2 │ b │
│  3 │ c │
└────┴───┘

现在让我们看看启用实时突变时会发生什么

-- Enable on-the-fly mutations
SET apply_mutations_on_fly = 1;

SELECT id, v FROM test_on_fly_mutations ORDER BY id;

SELECT 查询现在立即返回正确的结果,无需等待应用突变

┌─id─┬─v─┐
│  3 │ c │
└────┴───┘

性能影响

当启用实时突变时,突变不会立即被物化,而仅会在 SELECT 查询期间应用。但是,请注意,突变仍然会在后台异步物化,这是一个繁重的过程。

如果提交的突变数量在一段时间内持续超过后台处理的突变数量,则需要应用的未物化突变的队列将继续增长。这将导致 SELECT 查询性能最终下降。

我们建议将设置 apply_mutations_on_fly 与其他 MergeTree 级别设置(例如 number_of_mutations_to_thrownumber_of_mutations_to_delay)一起启用,以限制未物化突变的无限增长。

子查询和非确定性函数支持

实时突变对子查询和非确定性函数的支持有限。仅支持具有合理大小的结果(由设置 mutations_max_literal_size_to_replace 控制)的标量子查询。仅支持常量非确定性函数(例如函数 now())。

这些行为由以下设置控制

  • mutations_execute_nondeterministic_on_initiator - 如果为 true,则非确定性函数将在发起者副本上执行,并在 UPDATEDELETE 查询中替换为字面量。默认值:false
  • mutations_execute_subqueries_on_initiator - 如果为 true,则标量子查询将在发起者副本上执行,并在 UPDATEDELETE 查询中替换为字面量。默认值:false
  • mutations_max_literal_size_to_replace - 在 UPDATEDELETE 查询中替换的序列化字面量的最大大小(以字节为单位)。默认值:16384 (16 KiB)。
    © . This site is unofficial and not affiliated with ClickHouse, Inc.