【问题标题】:Clickhouse-client insert optimizationClickhouse-客户端插入优化
【发布时间】:2022-01-25 07:15:17
【问题描述】:

我将大量 CSV 数据文件插入到已经有大量数据的远程 Clickhouse 数据库中。我正在使用这样的简单脚本:

...
 for j in *.csv; do
      clickhouse-client --max_insert_threads=32 --receive_timeout=30000 --input_format_allow_errors_num=999999999 --host "..." --database "..." --port 9000 --user "..." --password "..." --query "INSERT INTO ... FORMAT CSV" < "$j"
  done
...

所以我的问题是:如何优化这些插入?我已经使用这些选项进行优化:

--max_insert_threads=32 --receive_timeout=30000

clickhouse-client 中是否还有其他选项我应该使用以获得更好的性能以及用于什么目的?一个文件可以是 300-500mb(有时更多)。根据this article,使用并行进程无济于事,这就是我一次插入一个文件的原因。

【问题讨论】:

    标签: database csv clickhouse clickhouse-client


    【解决方案1】:

    max_insert_threads 在这里不适用,它是关于 CH 服务器内部的insert select

    根据这篇文章,使用并行进程无济于事

    应该有帮助(取决于 CPU 和磁盘功率),试试吧

    # parallelism 6 (-P6)
    
    find . -type f -name '*.csv' | xargs -P 6 -n 1 clickhouse-client --input_format_parallel_parsing=0 --receive_timeout=30000 --input_format_allow_errors_num=999999999 --host "..." --database "..." --port 9000 --user "..." --password "..." --query "INSERT INTO ... FORMAT CSV"
    

    我特意设置了input_format_parallel_parsing=0,它可以在多个并行负载的情况下提高整体性能。

    【讨论】:

    • 是的,已经这样做了,它帮助了一点,但没有那么多,我会尝试你建议的这个选项,也许它会有所帮助。 max_insert_threads 呢,如果没有用,我应该删除它?
    • 你可以离开 max_insert_threads 在这种情况下它没有任何意义。
    • 您使用多少个 CPU 内核和哪些磁盘?借助强大的服务器 -P6 可线性提高性能 - 6 倍。
    • 也可以尝试--compress=1 参数或--compress=0
    • 我没有找到任何关于--compress标志的信息,你能告诉它做什么或在哪里可以找到有关它的信息吗?
    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多