小小小小小小小小小小码农 2023-09-15 16:04 采纳率: 0%
浏览 15

求解clickhouse 使用的一个疑惑

以下sql中 select bitmapBuild([1,2,3,4]) 代表不同的表查询得到的bitmap结果
单节点查询正常

with
              (select bitmapBuild([1,2,3,4]) ) as u1,
              (select bitmapBuild([1,2,3,4]) ) as u2,
              (select bitmapBuild([1,2,3,4]) ) as u3,
              (select bitmapBuild([1,2,3,4]) ) as u4,
              (select bitmapBuild([1,2,3,4]) ) as u5,
             (select bitmapAnd(bitmapAnd(bitmapAnd(bitmapAnd(u1,u2),u3),u4),u5) ) as u
         select bitmapCardinality(u)

放在集群里面

select sum(b) from cluster('ck_rep2',
             view(
                     with
                     (select bitmapBuild([1,2,3,4]) ) as u1,
                     (select bitmapBuild([1,2,3,4]) ) as u2,
                     (select bitmapBuild([1,2,3,4]) ) as u3,
                     (select bitmapBuild([1,2,3,4]) ) as u4,
                     (select bitmapBuild([1,2,3,4]) ) as u5,
                     (select bitmapAnd(bitmapAnd(bitmapAnd(bitmapAnd(u1,u2),u3),u4),u5) ) as u
                     select bitmapCardinality(u) as b
                 )
             )
;
报错
Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.34 GiB (attempt to allocate chunk of 4194320 bytes)
减少一个表查询
select sum(b)
         from cluster('ck_rep2',
             view(
                with
                    (select bitmapBuild([1,2,3,4]) ) as u1,
                (select bitmapBuild([1,2,3,4]) ) as u2,
                (select bitmapBuild([1,2,3,4]) ) as u3,
                (select bitmapBuild([1,2,3,4]) ) as u4,
                (select bitmapAnd(bitmapAnd(bitmapAnd(u1,u2),u3),u4) ) as u
                    select bitmapCardinality(u) as b
                 )
             )
;
Code: 168, e.displayText() = DB::Exception: AST is too big. Maximum: 500000: (after expansion of aliases) (version 21.8.10.19 (official build))
再减少一个表查询
select sum(b)
         from cluster('ck_rep2',
                      view(
                              with
                                  (select bitmapBuild([1,2,3,4]) ) as u1,
                              (select bitmapBuild([1,2,3,4]) ) as u2,
                              (select bitmapBuild([1,2,3,4]) ) as u3,
                              (select bitmapAnd(bitmapAnd(u1,u2),u3) ) as u
                                  select bitmapCardinality(u) as b
                          )
             )
;
Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.32 GiB (attempt to allocate chunk of 4194512 bytes), maximum: 9.31 GiB (version 21.8.10.19 (official build))
继续减少
select sum(b)
         from cluster('ck_rep2',
                      view(
                              with
                                  (select bitmapBuild([1,2,3,4]) ) as u1,
                              (select bitmapBuild([1,2,3,4]) ) as u2,
                              (select bitmapAnd(u1,u2) ) as u
                                  select bitmapCardinality(u) as b
                          )
             );
可以得到结果

我能理解这个clickhouse的一个bug吗,有哪位能解答一下为什么

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-15 16:10
    关注

    引用 皆我百晓生 小程序回复内容作答:
    根据您提供的信息,这可能是ClickHouse的一个限制或bug导致的问题,当在集群中执行复杂的查询时发生了内存限制错误。ClickHouse在处理大数据量时有一些内存限制,以避免溢出和性能问题。

    当您在查询中增加更多的表或操作时,查询中涉及的数据和中间计算结果的大小会增长。当达到了ClickHouse可用内存的限制时,就会发生内存限制错误。

    在您的情况中,当在集群中执行具有较大数据量和复杂操作的查询时,ClickHouse尝试分配超过其可用内存限制的内存块,因此导致内存限制错误。

    解决此问题的一种方法是增加ClickHouse集群的可用内存,以容纳更大的查询。您可以尝试在ClickHouse配置中增加内存限制的设置,如max_memory_usage

    另一种方法是优化您的查询,以减少内存使用量。您可以检查查询的条件和操作,看看是否有可以优化的地方,例如减少中间计算步骤、减少涉及的数据量等。此外,您还可以尝试将查询拆分为多个较小的查询并进行逐步操作,以减少内存使用量。

    请记住,ClickHouse是一个非常强大和高性能的分布式数据库,但在处理大数据量时可能会有一些限制和挑战。因此,在使用ClickHouse时,了解其内存和资源限制,并进行适当的优化和调整非常重要。如果您的问题仍然存在,请考虑提供更具体的信息和示例,以便更深入地分析和理解您遇到的问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月15日

悬赏问题

  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计