Mutation簡介
Clickhouse Mutation操作是通過ALTER TABLE命令執行的,它可以用于更新(UPDATE)或刪除(DELETE)表中的數據。這種操作在某些情況下非常有用,但通常不推薦頻繁使用,因為它可能對性能產生影響。
使用ALTER TABLE ... UPDATE命令可以更新表中的行:
ALTER TABLE viid_person ON CLUSTER vss_test UPDATE score = score + 5 WHERE id > 10;
這個操作是異步執行的,意味著它將在后臺進行,可能不會立即在表中看到更新的效果。
使用ALTER TABLE ... DELETE命令可以刪除表中的行:
ALTER TABLE table_name DELETE WHERE condition;
和更新操作一樣,刪除操作也是異步的。
監控Mutation進度
在ClickHouse中,監控Mutation操作的進度和狀態可以通過系統表system.mutations來實現。這個表記錄了MergeTree表的mutation操作及其執行狀態的信息。
mutations表部分字段如下:
database: 應用mutation的數據庫名稱。table: 應用mutation的表名稱。mutation_id: mutation的ID,對于復制表,這些ID對應于ZooKeeper中相應目錄下的znode名稱;對于非復制表,ID對應表的數據目錄中的文件名 。command: mutation命令字符串,即ALTER TABLE [db.]table語句之后的部分。create_time: mutation命令提交執行的日期和時間。parts_to_do: 需要應用mutation的part的數量。is_done: mutation是否完成的標志,1表示完成,0表示仍在進行中。
要跟蹤正在進行的mutation操作,可以使用下面的語句:
SELECT * FROM system.mutations WHERE is_done = 0;
is_done=0表示所有尚未完成的mutation操作。
system.mutations表還包含以下列來提供額外信息:
latest_failed_part: 最近不能mutation的part的名稱。latest_fail_time: 最近的一個mutation失敗的時間。latest_fail_reason: 導致最近part的mutation失敗的異常消息。
這些信息可以幫助定位mutation過程中出現的問題 。
system.mutations表中的記錄不會立即刪除,mutations保留的記錄數通過參數finished_mutations_to_keep來設定,當mutations記錄數超過設定值時,超出數量的記錄會被刪除。