詳解 | TiDB 2.0 GA is here!

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

去年十月份的時候,我們釋出了 TiDB 1.0 版本,為此我們日夜兼程奮鬥了兩年半時間,我們認為 1.0 版本達到了可在生產環境中使用的程度。在接下來的六個月中,我們一方面維護 1.0 版本的穩定性並且增加必要的新特性,另一方面馬不停蹄的開發 2.0 版本。經過半年時間,6 個 RC 版本,今天 TiDB 2.0 GA 版本正式釋出。

2.0 版本規劃

在 2.0 版本的規劃階段,我們對“這個版本需要做什麼”進行了深入思考,我們根據現有使用者的情況、技術發展趨勢以及社群的聲音,認為 2.0 版本需要聚焦在以下幾點:

  • 保證 TiDB 的穩定性以及正確性。這兩點是一個資料庫軟體的基礎功能,作為業務的基石,任何一點抖動或者錯誤都可能對業務造成巨大的影響。目前已經有大量的使用者線上上使用 TiDB,這些使用者的資料量在不斷增加、業務也在不斷演進。我們非常關注 TiDB 叢集如何保持長期穩定執行、如何減小系統的抖動、如何進行智慧的排程,為此做了大量的調研和分析。
  • 提升 TiDB 在大資料量下的查詢效能。從我們接觸下來的使用者來看,很多客戶都有少則上百 GB,多則上百 TB 的資料,一方面資料會持續增加,另一方面也希望能對這些資料做實時的查詢。所以如果能提升大資料量下的查詢效能,對使用者會很有幫助。
  • 優化 TiDB 的易用性和可維護性。TiDB 整套系統的複雜性比較高,運維及使用的難度要大於單機資料庫,所以我們希望能提供儘可能方便的方案幫助使用者使用 TiDB。比如儘可能簡化部署、升級、擴容方式,儘可能容易的定位系統中出現的異常狀態。

圍繞上面三點原則,我們做了大量的改進,一些是對外可見(如 OLAP 效能的顯著提升、監控項的大量增加以及運維工具的各項優化),還有更多的改進是隱藏在資料庫背後,默默的提升整個資料庫的穩定性以及正確性。

正確性和穩定性

在 1.0 版本釋出之後,我們開始構建和完善自動化測試平臺 Schrodinger,徹底告別了之前靠手工部署叢集測試的方式。同時我們也新增了非常多的測試用例,做到測試從最底層 RocksDB,到 Raft,再到 Transaction,然後是 SQL 都能覆蓋。

在 Chaos 測試上面,我們引入了更多的錯誤注入工具,例如使用 systemtap 對 I/O 進行 delay 等,也在程式碼特定的業務的邏輯進行錯誤注入測試,充分保證 TiDB 在異常條件下面也能穩定執行。

之前我們做了很多 TLA 的論證工作,也有一些簡單的測試,1.0 之後我們開始使用 TLA 系統進行論證,保證我們的實現在設計上面都是正確的。

在儲存引擎方面,為了提升大規模叢集的穩定性和效能,我們優化了 Raft 的流程,引入 Region Merge、Raft Learner 等新特性;優化熱點排程機制,統計更多的資訊,並根據這些資訊做更合理的排程;優化 RocksDB 的效能,使用 DeleteFilesInRanges 等特性,提升空間回收效率,降低磁碟負載,以及更加平滑地使用磁碟資源等等。

OLAP 效能優化

在 2.0 版本中,我們重構了 SQL 優化器和執行引擎,希望能儘可能快的選擇最優查詢計劃並且儘可能高效地執行查詢計劃。

1.0 版本已經從基於規則的查詢優化器轉向基於代價的查詢優化器,但是還不夠完善,在 2.0 版本中,我們一方面優化統計資訊的精確度以及更新及時程度,另一方面提升 SQL 優化器的能力,對查詢代價的估算更加精準、對複雜過濾條件的分析更加細緻、對關聯子查詢的處理更加優雅、對物理運算元的選擇更加靈活準確。

在這一版本中,SQL 執行引擎引入新的內部資料表示方式 — Chunk,一個結構中儲存一批資料而不僅是一行資料,同一列的資料在記憶體中連續存放,使得記憶體使用更緊湊,這樣帶來了幾點好處:1. 顯著減小了記憶體消耗; 2. 批量分配記憶體,減小了 GC 開銷;3. 運算元之間可以對資料進行批量傳遞,減小呼叫開銷;4. 在某些場景下,可以進行向量計算以及減小 CPU 的 Cache Miss 的情況。

完成上述兩項改動之後,TiDB 在 OLAP 場景下的效能有了大幅的質的提升,從 TPC-H 的對比結果https://github.com/pingcap/docs-cn/blob/master/benchmark/tpch.md 來看,所有的 Query 在 2.0 中都執行得更快,一些 Query 大多數都有幾倍甚至數量級的提升,特別是一些 1.0 中跑不出結果的 Query 在 2.0 中都能順利執行。

易用性和可運維性

為了讓 TiDB 更容易被安裝和使用,監控、運維、工具方面我們也做了諸多優化。

在監控方面,增加了過百個監控項,同時通過 HTTP 介面、SQL 語句等方式暴露出一些執行時資訊,用於系統調優或者是定位系統中存在的問題。

在運維方面,我們運維工具做了優化,簡化操作流程,降低操作複雜度及操作過程對於線上的影響。同時功能也更加豐富,支援自動部署 Binlog 元件、支援啟用 TLS。

版本升級

從 TiDB 1.0 到 2.0 可以進行滾動升級,具體步驟可以參考 這篇文件

One more thing

我們也同時釋出了 TiSpark 1.0 GA 版本,瞭解一下?

相關文章

資料庫 最新文章