laijunlin_data 2025-05-26 10:55 采纳率: 80%
浏览 15
已采纳

clickhouse自动合并任务使用内存过大,能通过参数限制吗

#遇到问题的现象描述
clickhouse(22.3.7.28)自动合并任务使用内存过大,能通过参数限制吗?
#问题相关情况
表引擎使用的是ReplicatedMergeTree

img

{
"SELECT \r\n    database,\r\n    table,\r\n        memory_usage,\r\n         memory_usage \/ 1073741824 AS memory_usage_gib, -- 转换为 GiB\r\n    elapsed,\r\n    progress,\r\n    num_parts,\r\n    result_part_name,\r\n    is_mutation,\r\n    total_size_bytes_compressed,\r\n    total_size_marks,\r\n    bytes_read_uncompressed,\r\n    rows_read,\r\n    bytes_written_uncompressed,\r\n    rows_written,\r\n    thread_id,\r\n    merge_type,\r\n    merge_algorithm\r\nFROM system.merges": [
    {
        "database" : "traceablity",
        "table" : "ck_traceability_info",
        "memory_usage" : 12078897917,
        "memory_usage_gib" : 11.24935030657798,
        "elapsed" : 637.926744714,
        "progress" : 0.5586983344726423,
        "num_parts" : 9,
        "result_part_name" : "2025_2663098_2837828_333",
        "is_mutation" : 0,
        "total_size_bytes_compressed" : 31103940946,
        "total_size_marks" : 13675,
        "bytes_read_uncompressed" : 84362162758,
        "rows_read" : 27105999,
        "bytes_written_uncompressed" : 78651449792,
        "rows_written" : 27105999,
        "thread_id" : 41137,
        "merge_type" : "REGULAR",
        "merge_algorithm" : "Vertical"
    }
]}


#解答思路
能否通过设置clickhouse的相关参数进行合并操作的内存限制。

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-05-26 10:55
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    ClickHouse 的自动合并任务使用内存过大,可以通过以下参数来限制:

    1. merge_tree_max_memory_usage:设置合并任务的最大内存使用量。单位为字节,可以设置为一个具体的值,也可以设置为一个百分比(例如 0.5)。
    SET merge_tree_max_memory_usage = '100M';
    
    1. merge_tree_max_rows_in_memory:设置合并任务在内存中最多处理的行数。
    SET merge_tree_max_rows_in_memory = 100000;
    
    1. merge_tree_max_bytes_in_memory:设置合并任务在内存中最多处理的字节数。
    SET merge_tree_max_bytes_in_memory = 100000000;
    
    1. merge_tree_min_merge_size:设置合并任务的最小合并大小。小于这个值的合并将被忽略。
    SET merge_tree_min_merge_size = 100000;
    
    1. merge_tree_max_merge_size:设置合并任务的最大合并大小。超过这个值的合并将被忽略。
    SET merge_tree_max_merge_size = 100000000;
    
    1. merge_tree_max_concurrent_merges:设置合并任务的最大并发数。
    SET merge_tree_max_concurrent_merges = 5;
    
    1. merge_tree_max_merge_threads:设置合并任务的最大线程数。
    SET merge_tree_max_merge_threads = 5;
    

    这些参数可以单独设置,也可以组合使用以达到更好的效果。需要注意的是,这些参数的设置需要根据实际情况进行调整,以避免影响系统性能。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 已采纳回答 5月30日
  • 创建了问题 5月26日