【问题标题】:Clickhouse code 32 DB::Exception: Attempt to read after eofClickhouse 代码 32 DB::Exception: 尝试在 eof 之后读取
【发布时间】:2020-08-31 10:37:35
【问题描述】:

我使用以下脚本在 Clickhouse 上创建了一个字典:

CREATE DICTIONARY IF NOT EXISTS default.testDICT
(
    -- attributes
)
PRIMARY KEY DATETIME, SOMEID, SOMEID2
SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' PASSWORD '' DB 'default' TABLE 'test'))
LIFETIME(MIN 0 MAX 300)
LAYOUT(COMPLEX_KEY_HASHED())

表测试有大约 19 000 000 行。

当我尝试执行选择时

SELECT * FROM testDICT 

,如果我理解得很好,它也会加载字典,它会向我发送以下错误:


Exception on client:
Code: 32. DB::Exception: Attempt to read after eof: while receiving packet from clickhouse-server:9000

Connecting to clickhouse-server:9000 as user default.
Code: 210. DB::NetException: Connection refused (clickhouse-server:9000)


你知道它是什么意思吗?我该如何纠正它?

【问题讨论】:

  • 我认为这是使用字典的错误方法,因为行数很大。我怀疑即使使用cached layout(正如@Denis Zhuravlev 所建议的那样)也无济于事,因为hit rate 会很小,不会很有效。

标签: sql database dictionary clickhouse


【解决方案1】:

19 000 000 行对于字典来说太多了。可能需要 10-20GB 内存。

所以你的 CH 被 OOM 杀手崩溃或杀死。检查sudo dmesg|tail -100

尝试缓存字典布局,一次仅将 19 000 000 的一部分加载到内存中。

【讨论】:

    【解决方案2】:

    按照本博客的建议,在插入之前尝试执行以下操作:set max_insert_threads=32; 我一开始也遇到了同样的错误,但是在我更改了 max_insert_threads 之后,我成功插入了将近 200GB 的数据。

    https://altinity.com/blog/clickhouse-and-redshift-face-off-again-in-nyc-taxi-rides-benchmark

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      相关资源
      最近更新 更多