ClickHouse 系列報錯


1. ClickHouse 查詢時,報錯:Memory limit (for query) exceeded: would use 9.38 GiB (attempt to allocate chunk of 135439453 bytes), maximum: 9.31 GiB

1.1 ClickHouse 環境

1.2 報錯原因

默認情況下,ClickHouse會限制group by使用的內存量(它使用 hash table來處理group by)。這很容易解決 - 如果你有空閑的內存,增加這個參數

1.3 解決方法

1. 內存足夠情況下
SET max_memory_usage = 128000000000; #128G
2. 內存不足情況下

GROUP BY中允許將臨時數據轉存到磁盤上,以限制對內存的使用

set max_bytes_before_external_group_by=20000000000; #20G,默認值為0,表示在GROUP BY中啟動將臨時數據轉存到磁盤上的內存閾值。

# 使用max_bytes_before_external_group_by時,建議將max_memory_usage設置為它的兩倍。這是因為一個聚合需要兩個階段來完成:
#(1)讀取數據並形成中間數據 
#(2)合並中間數據。臨時數據的轉存只會發生在第一個階段。
# 如果沒有發生臨時文件的轉存,那么階段二將最多消耗與1階段相同的內存大小。
set max_memory_usage=40000000000; #40G

參考:https://clickhouse.yandex/docs/zh/query_language/select/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM