🛡️較早收集於 80m

解決 PB 級 ClickHouse 叢集中的隱藏鎖定競爭問題

解決 PB 級 ClickHouse 叢集中的隱藏鎖定競爭問題
PostLinkedIn
🛡️閱讀原文: Cloudflare Blog

💡學習如何除錯 AI 訓練管線所使用的大規模資料基礎設施中,隱蔽的效能瓶頸。

⚡ 30-Second TL;DR

有什麼變化

在分區操作期間發現 ClickHouse 查詢規劃器中存在嚴重的鎖定競爭。

為什麼重要

這凸顯了大型資料基礎設施中深度可觀測性的重要性。它提醒開發者,標準指標可能會遺漏複雜分散式系統中的關鍵效能瓶頸。

下一步行動

若您運行大規模 ClickHouse 叢集,請審查查詢規劃器日誌與分區變更頻率,以主動識別潛在的鎖定競爭問題。

誰應關注:Developers & AI Engineers

關鍵要點

  • 在分區操作期間發現 ClickHouse 查詢規劃器中存在嚴重的鎖定競爭。
  • 標準監控指標無法顯示該瓶頸,需要深入的除錯分析。
  • 向 ClickHouse 提交上游修補程式以改善併發性與效能。
  • 在解決關鍵計費作業停滯的同時,維持了 PB 級資料的完整性。

🧠 深度解析

AI-generated analysis for this event.

🔑 增強重點摘要

  • 該隱藏瓶頸特別難以察覺,因為傳統的CPU、記憶體和I/O利用率等監控指標均顯示正常,需要使用更進階的「Real」追蹤(採樣所有執行緒,包括阻塞的執行緒)才能識別出鎖競爭 [11]
  • 觸發此問題的特定分區變更,是將一個欄位新增到PB級資料表的分區鍵中,這是一個複雜的DDL操作,旨在實現按租戶資料保留 [11]
  • ClickHouse的MergeTree引擎雖然設計為透過不可變資料部分實現高併發,但在執行ALTER TABLE等DDL操作時仍會獲取排他性表級別鎖,這可能因分區鍵變更而加劇鎖競爭 [7, 9, 14]。
  • 其他主要ClickHouse使用者,如Tinybird,在2025年也曾遇到並解決了類似的、長達一年的隱藏鎖競爭問題,特別是與管理全域和查詢特定物件的Context及ContextSharedPart實例中的全域互斥鎖相關,這表明ClickHouse核心架構中存在一類重複出現的併發挑戰 [23, 26]。
📊 競品分析▸ Show
特徵/產品ClickHouseGoogle BigQuerySnowflakeAmazon RedshiftApache DruidStarRocks
類型開源OLAP資料庫雲端資料倉儲雲端資料倉儲雲端資料倉儲開源OLAP資料庫分佈式OLAP資料庫
部署自託管/雲端雲端 (Google Cloud)多雲雲端 (AWS)自託管/雲端自託管/雲端
即時分析極佳,亞秒級延遲 [1, 2]較高延遲,批次導向 [1, 2]不為即時分析設計 [1]傳統資料倉儲工作負載競爭力強,但即時分析通常較慢 [2]優化用於時間序列資料和即時攝取 [2]針對現代分析需求,高併發性能 [6]
擴展性PB級資料,但叢集擴展需手動重新平衡 [6, 11]真正無伺服器,無需容量規劃 [1]計算與儲存分離,易於擴展 [1]深度AWS整合,伺服器less選項 [2]優化用於時間序列資料和即時攝取 [2]解決ClickHouse擴展挑戰,內建成本優化器 [6]
併發性單伺服器查詢性能好,但複雜、高併發查詢可能性能下降 [6]查詢量不可預測/零星時表現良好 [1]易於使用,最少調優 [1]成熟產品,功能廣泛 [1]針對極端規模和嚴格延遲 [1]卓越的多表連接性能,高併發場景下性能優異 [6]
資料變更對資料更新支援有限,頻繁更新可能導致性能波動 [6]N/AN/AN/AN/A支援增量更新的實體化視圖 [6]
多表連接難以處理多表連接,通常需要上游去正規化 [6]卓越的即席查詢 [1]N/AN/AN/A類領先的多表連接性能,無需去正規化 [6]
操作複雜性可管理的操作複雜性,但自託管需要專業知識 [1, 2]零運營開銷 [1]最小化調優,易於使用 [1]成熟產品,廣泛的工具生態系統 [2]比ClickHouse操作更複雜 [1]簡化資料攝取管道 [6]
成本模型通常比雲端資料倉儲在規模上更具成本效益 [1]按查詢計費,規模大時可能昂貴 [1]規模大時昂貴 [1]N/AN/AN/A

🛠️ 技術深入

  • ClickHouse的MergeTree家族引擎將資料組織成不可變的資料部分(parts)。每次INSERT操作都會建立一個新的資料部分,這些部分會由背景程序合併為更大的部分 [9, 14, 19, 22]。
  • 資料部分在磁碟上按主鍵排序,並可根據分區表達式進行分區。查詢時,分區剪枝(partition pruning)機制可跳過不相關的資料,從而加速查詢 [14, 19, 22]。
  • ClickHouse採用多種鎖定機制,包括表級別的讀寫鎖(Table RW locks,用於DDL操作與查詢之間的結構鎖定)、資料部分鎖(Part locks,在合併和讀取資料部分期間使用)、ZooKeeper分佈式鎖(用於複製表協調)以及互斥鎖(Mutex locks,用於進程內共享狀態的序列化) [8]
  • DDL操作(如ALTER TABLE、DROP TABLE、RENAME TABLE)會獲取排他性表級別鎖,這會阻塞併發的讀寫操作 [7, 8]。變更分區鍵的ALTER TABLE操作尤其可能導致鎖競爭,因為它涉及對表結構的重大修改 [7, 11]。
  • 查詢規劃器在執行查詢時會與ContextContextSharedPart物件互動。ContextSharedPart儲存全域共享物件(如執行緒池、伺服器路徑、叢集資訊),而Context儲存查詢或會話特定的物件(如查詢設定、快取)。在某些情況下,這些物件的同步曾依賴單一全域互斥鎖,導致高併發場景下的瓶頸 [23, 26]。
  • Cloudflare的除錯過程顯示,標準的CPU追蹤(僅採樣活動執行緒)無法揭示問題,需要切換到「Real」追蹤(採樣所有執行緒,包括阻塞的執行緒)才能發現隱藏的鎖競爭 [11]
  • 解決方案涉及開發上游修補程式以改善併發性。Tinybird的類似解決方案是將單一全域互斥鎖替換為ContextSharedPart的全域讀寫互斥鎖和每個Context的局部讀寫互斥鎖 [23]
  • 用戶可透過system.processessystem.query_log等系統表來監控鎖等待事件,並檢查ProfileEvents['RWLockReadersWaitMilliseconds']ProfileEvents['RWLockWritersWaitMilliseconds']等指標來診斷鎖競爭 [7, 8]。

🔮 前景展望AI analysis grounded in cited sources

ClickHouse將進一步增強其內部併發控制機制。
Cloudflare和其他主要用戶(如Tinybird)發現並解決了隱藏的鎖競爭問題,這將促使ClickHouse核心開發者優先改進其查詢規劃器和DDL操作的併發處理能力。
大型ClickHouse部署的穩定性和性能將得到顯著提升。
解決PB級叢集中的關鍵鎖定競爭問題,特別是在分區變更等DDL操作期間,將減少延遲並提高高併發分析工作負載的可靠性。
ClickHouse生態系統中的監控和除錯工具將變得更加精細。
由於標準指標未能檢測到此類隱藏瓶頸,未來將需要更深入的追蹤和分析工具,例如「Real」追蹤,以幫助用戶識別和解決類似的複雜性能問題。

時間線

2009
ClickHouse開發開始 [12]
2012
在Yandex.Metrica投入生產 [12]
2016
開源發布 (Apache 2.0) [12]
2022-01
Cloudflare建立「Ready-Analytics」系統,大量使用ClickHouse [11]
2025-04-24
Tinybird發布部落格文章,詳述解決ClickHouse中與Context相關的長達一年的鎖競爭問題 [23]
2025-11-18
Cloudflare發生一次重大服務中斷,部分原因是一個ClickHouse查詢返回重複的元資料,導致Rust代理服務崩潰 [25, 29]
2026-05-14
Cloudflare發布部落格文章,描述解決PB級ClickHouse叢集中查詢規劃器隱藏鎖競爭問題的經驗 [4, 11]
📰

AI 週報

閱讀本週精選 AI 大事摘要 →

👉相關動態

AI 策展新聞聚合。所有內容版權歸原始發布者所有。
原始來源: Cloudflare Blog