TiDB 2.1 GA Release Notes

PingCAP發表於2018-11-30

2018 年 11 月 30 日,TiDB 釋出 2.1 GA 版。相比 2.0 版本,該版本對系統穩定性、效能、相容性、易用性做了大量改進。

TiDB

SQL 優化器

  • 優化 Index Join 選擇範圍,提升執行效能
  • 優化 Index Join 外表選擇,使用估算的行數較少的表作為外表
  • 擴大 Join Hint TIDB_SMJ 的作用範圍,在沒有合適索引可用的情況下也可使用 Merge Join
  • 加強 Join Hint TIDB_INLJ 的能力,可以指定 Join 中的內表
  • 優化關聯子查詢,包括下推 Filter 和擴大索引選擇範圍,部分查詢的效率有數量級的提升
  • 支援在 UPDATEDELETE 語句中使用 Index Hint 和 Join Hint
  • 支援更多函式下推:ABS/CEIL/FLOOR/IS TRUE/IS FALSE
  • 優化內建函式 IFIFNULL 的常量摺疊演算法
  • 優化 EXPLAIN 語句輸出格式, 使用層級結構表示運算元之間的上下游關係

SQL 執行引擎

  • 重構所有聚合函式,提升 StreamHash 聚合運算元的執行效率
  • 實現並行 Hash Aggregate 運算元,部分場景下有 350% 的效能提升
  • 實現並行 Project 運算元,部分場景有 74% 的效能提升
  • 併發地讀取 Hash JoinInner 表和 Outer 表的資料,提升執行效能
  • 優化 REPLACE INTO 語句的執行速度,效能提升 10x
  • 優化時間型別的記憶體佔用,時間型別資料的記憶體使用降低為原來的一半
  • 優化點查的查詢效能, Sysbench 點查效率提升 60%
  • TiDB 插入和更新寬表,效能提升接近 20 倍
  • 支援在配置檔案中設定單個查詢的記憶體使用上限
  • 優化 Hash Join 的執行過程,當 Join 型別為 Inner Join 或者 Semi Join 時,如果內表為空,不再讀取外表資料,快速返回結果
  • 支援 EXPLAIN ANALYZE 語句,用於檢視 Query 執行過程中各個運算元的執行時間,返回結果行數等執行時統計資訊

統計資訊

  • 支援只在一天中的某個時間段開啟統計資訊自動 ANALYZE 的功能

  • 支援根據查詢的反饋自動更新表的統計資訊

  • 支援通過 ANALYZE TABLE WITH BUCKETS 語句配置直方圖中桶的個數

  • 優化等值查詢和範圍查詢混合的情況下使用直方圖估算 Row Count 的演算法

表示式

  • 支援內建函式:
    • json_contains
    • json_contains_path
    • encode/decode

Server

DDL

  • 支援 Add Index 語句與其他 DDL 語句並行執行,避免耗時的 Add Index 操作阻塞其他操作
  • 優化 Add Index 的速度,在某些場景下速度大幅提升
  • 支援 select tidb_is_ddl_owner() 語句,方便判斷 TiDB 是否為 DDL Owner
  • 支援 ALTER TABLE FORCE 語法
  • 支援 ALTER TABLE RENAME KEY TO 語法
  • Admin Show DDL Jobs 輸出結果中新增表名、庫名等資訊
  • 支援使用 ddl/owner/resign HTTP 介面釋放 DDL Owner 並開啟新一輪 DDL Owner 選舉

相容性

  • 支援更多 MySQL 語法
  • BIT 聚合函式支援 ALL 引數
  • 支援 SHOW PRIVILEGES 語句
  • 支援 LOAD DATA 語句的 CHARACTER SET 語法
  • 支援 CREATE USER 語句的 IDENTIFIED WITH 語法
  • 支援 LOAD DATA IGNORE LINES 語句
  • Show ProcessList 語句返回更準確資訊

PD

可用性優化

  • 引入 TiKV 版本控制機制,支援叢集滾動相容升級
  • PD 節點間 開啟 Raft PreVote,避免網路隔離後恢復時產生的重新選舉
  • 開啟 raft learner 功能,降低排程時出現當機導致資料不可用的風險
  • TSO 分配不再受系統時間回退影響
  • 支援 Region merge 功能,減少後設資料帶來的開銷

排程器優化

  • 優化 Down Store 的處理流程,加快發生當機後補副本的速度
  • 優化熱點排程器,在流量統計資訊抖動時適應性更好
  • 優化 Coordinator 的啟動,減少重啟 PD 時帶來的不必要排程
  • 優化 Balance Scheduler 頻繁排程小 Region 的問題
  • 優化 Region merge,排程時考慮 Region 中資料的行數
  • 新增一些控制排程策略的開關
  • 完善排程模擬器,新增排程場景模擬

API 及運維工具

監控

  • 增加 Filter相關的監控
  • 新增 etcd Raft 狀態機相關監控

效能優化

  • 優化處理 Region heartbeat 的效能,減少 heartbeat 帶來的記憶體開銷
  • 優化 Region tree 效能
  • 優化計算熱點統計的效能問題

TiKV

Coprocessor

Transaction

Raftstore

儲存引擎

  • 修復 RocksDB CompactFiles 的 bug,可能影響 Lightning 匯入的資料
  • 升級 RocksDB 到 v5.15,解決 snapshot 檔案可能會被寫壞的問題
  • 優化 IngestExternalFile,避免 flush 卡住寫入的問題

tikv-ctl

Tools

升級相容性說明

  • 由於新版本儲存引擎更新,不支援在升級後回退至 2.0.x 或更舊版本
  • 新版本預設開啟 raft learner 功能,如果從 1.x 版本叢集升級至 2.1 版本,須停機升級或者先滾動升級 TiKV,完成後再滾動升級 PD
  • 從 2.0.6 之前的版本升級到 2.1.0 之前,最好確認叢集中是否存在正在執行中的 DDL 操作,特別是耗時的 Add Index 操作
  • 因為 2.1 版本啟用了並行 DDL,對於早於 2.0.1 版本的叢集,無法滾動升級到 2.1,可以選擇下面兩種方案:
    • 停機升級,直接從早於 2.0.1 的 TiDB 版本升級到 2.1
    • 先滾動升級到 2.0.1 或者之後的 2.0.x 版本,再滾動升級到 2.1 版本