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