[Clickhouse] Clickhouse 報SQLException : Read timed out

2023-12-13 15:00:18

1 問題描述

在使用Clickhouse(21.3.4.25)進行巨量資料量地資料查詢,高頻報出 SQLException : Read timed out 錯誤

2 問題分析

2.1 單次查詢:耗時約4s

2.2 並行20查詢:報SQLException Read timeout,並行5查詢:正常

2.3 整個SQL :查詢業務邏輯複雜(多層巢狀、Join、200餘行)

2.4 整個Query SQL 的查詢基表:基於1個36億級(6W Inner Join 6W)的檢視表

2.x 問題結論及優化方向

  • 根本原因:
  • SQL邏輯和所消耗的資源較高,達到了CK資料庫的資源、效能瓶頸。(Clickhouse本身也不支援高並行查詢,官網/最佳實踐的建議:單表查詢,儘可能減少join、最高單表並行100)
  • 個人優化建議:
  • 1、優化SQL(可結合物化檢視,如果擔心統計不準(大部分情況下,誤差概率極低、較小),可先主動執行 optimze table {table} final 指令做合併,再執行 Query SQL)
  • 2、嘗試調整連線引數(如:?socket_timeout=600000,能一定程度上減少此類報錯)
由於資料量過大,查詢請求太久,導致clickhouse連線超時。
建議在clickhouse連線字串後面加上引數:`?socket_timeout=600000`再驗證
socket_timeout的單位是ms,可以根據實際情況更改大小。

X 參考文獻

  • clickhouse