TiDB 3.0 GA Release Notes

Overview

2019 年 6 月 28 日,TiDB 發佈 3.0 GA 版本,對應的 TiDB Ansible 版本爲 3.0.0。
相比於 V2.1,V3.0.0 版本在如下方面有重要改進:html

  • 穩定性方面,顯著提高了大規模集羣的穩定性,集羣支持 150+ 存儲節點,300+ TB 存儲容量長期穩定運行。
  • 易用性方面有顯著的提高,下降用戶運維成本,例如:標準化慢查詢日誌,制定日誌文件輸出規範,新增 EXPLAIN ANALYZE,SQL Trace 功能方便排查問題等。
  • 性能方面,與 2.1 相比,TPC-C 性能提高約 4.5 倍,Sysbench 性能提高 50%+。 因支持 View,TPC-H 50G Q15 可正常運行。
  • 新功能方面增長了窗口函數、視圖(實驗特性)、分區表、插件系統、悲觀鎖(實驗特性)、SQL Plan Management 等特性。

TiDB

  • 新功能算法

    • 新增 Window Function,支持全部 MySQL 8.0 中的窗口函數,包括 NTILELEADLAGPERCENT_RANKNTH_VALUECUME_DISTFIRST_VALUELAST_VALUERANKDENSE_RANKROW_NUMBER 函數
    • 新增 View 功能(實驗特性
    • 完善 Table Partition 功能:sql

      • Range Partition
      • Hash Partition
    • 新增插件系統,官方提供 IP 白名單(企業版特性),審記日誌(企業版特性)等插件
    • 新增 SQL Plan Management 功能,經過綁定 SQL 執行計劃確保查詢的穩定性(實驗特性
  • SQL 優化器數據庫

    • 優化NOT EXISTS 子查詢,轉化爲 Anti Semi Join 提高性能
    • 優化 Outer Join 常量傳播,新增 Outer Join 消除優化規則,避免無效計算,提高性能
    • 優化 IN 子查詢,先聚合後執行 Inner Join,提高性能
    • 優化 Index Join,適應更多的場景,提高性能
    • 優化 Range Partition 的 Partition Pruning 優化規則,提高性能
    • 優化 _tidb_rowid 查詢邏輯,避免全表掃描,提高性能
    • 當過濾條件中包含相關列時,在抽取複合索引的訪問條件時儘量多地匹配索引的前綴列,提高性能
    • 利用列之間的順序相關性,提高代價估算準確度
    • 基於統計信息的貪心算法及動態規劃算法改進了 Join Order,提高多表關聯的執行速度
    • 新增 Skyline Pruning,利用規則防止執行計劃過於依賴統計信息,提高查詢的穩定性
    • 提高單列索引上值爲 NULL 時行數估算準確度
    • 新增 FAST ANALYZE,經過在各個 Region 中隨機採樣避免全表掃描的方式提高統計信息收集性能
    • 新增單調遞增的索引列增量 Analyze 功能,提高統計信息收集性能
    • 支持 DO 語句中使用子查詢
    • 支持在事務中使用 Index Join
    • 優化 prepare/execute,支持不帶參數的 DDL 語句
    • 修改變量 stats-lease 值爲 0 時系統的行爲,使其自動加載統計
    • 新增導出歷史統計信息功能
    • 新增導入導出列的關聯性信息功能
  • SQL 執行引擎安全

    • 優化日誌輸出,EXECUTE 語句輸出用戶變量,COMMIT 語句輸出慢查詢日誌,方便排查問題
    • 新增 EXPLAIN ANALYZE 功能,提高SQL 調優易用性
    • 新增 admin show next_row_id 功能,方便獲取下一行 ID
    • 新增JSON_QUOTEJSON_ARRAY_APPENDJSON_MERGE_PRESERVEBENCHMARKCOALESCENAME_CONST 6 個內建函數
    • 優化 Chunk 大小控制邏輯,根據查詢上下文件動態調整,下降 SQL 執行時間和資源消耗,提高性能
    • 新增 TableReaderIndexReaderIndexLookupReader 算子內存追蹤控制
    • 優化 Merge Join 算子,使其支持空的 ON 條件
    • 優化單個表列較多時寫入性能,提高數倍性能
    • 經過支持逆序掃數據提高 admin show ddl jobs 的性能
    • 新增 split table region 語句,手動分裂表的 Region,緩解熱點問題
    • 新增 split index region 語句,手動分裂索引的 Region 緩解熱點問題
    • 新增黑名單禁止下推表達式到 Coprocessor 功能
    • 優化 Expensive Query 日誌,在日誌中打印執行時間或者使用內存超過閾值的 SQL 查詢
  • DDL網絡

    • 支持字符集從 utf8 轉換到 utf8mb4 的功能
    • 修改默認字符集從 utf8 變爲 utf8mb4
    • 新增 alter schema 語句修改數據庫 charset 和 collation 功能
    • 新增 ALTER ALGORITHM INPLACE/INSTANT 功能
    • 新增 SHOW CREATE VIEW 功能
    • 新增 SHOW CREATE USER 功能
    • 新增快速恢復誤刪除的表功能
    • 新增動態調整 ADD INDEX 的併發數功能
    • 新增 pre_split_regions 選項,在 CREATE TABLE 時預先分配 Region,緩解建表後大量寫入形成的寫熱點問題
    • 新增經過 SQL 語句指定表的索引及範圍分裂 Region,緩解熱點問題
    • 新增 ddl_error_count_limit 全局變量,控制 DDL 任務重次數
    • 新增列屬性包含 AUTO_INCREMENT 時利用 SHARD_ROW_ID_BITS 打散行 ID 功能,緩解熱點問題
    • 優化無效 DDL 元信息存活時間,使集羣升級後一段時間 DDL 操做比較慢的狀況變短
  • 事務多線程

    • 新增悲觀事務模型(實驗特性
    • 優化事務處理邏輯,適應更多場景,具體以下:併發

      • tidb_disable_txn_auto_retry 的默認值爲 on,即不會重試非自動提交的事務
      • 新增 tidb_batch_commit 系統變量控制將事務拆分紅多個事務併發執行
      • 新增 tidb_low_resolution_tso 系統變量控制批量獲取 tso 個數,減小事務獲取 tso 的次數以適應某些數據一致性要求較低的場景
      • 新增 tidb_skip_isolation_level_check 變量控制事務檢查隔離級別設置爲 SERIALIZABLE 時是否報錯
      • 修改 tidb_disable_txn_auto_retry 系統變量的行爲,修改成影響全部的可重試錯誤
  • 權限管理框架

    - 對 `ANALYZE`、`USE`、`SET GLOBAL`、`SHOW PROCESSLIST` 語句進行權限檢查
    - 新增基於角色的權限訪問控制功能 (RBAC)(**實驗特性**)
  • Server運維

    • 優化慢查詢日誌,具體包括:

      • 重構慢查詢日誌格式
      • 優化慢查詢日誌內容
      • 優化查詢慢查詢日誌的方法,經過內存表 INFORMATION_SCHEMA.SLOW_QUERYADMIN SHOW SLOW 語句查詢慢查詢日誌
    • 制定日誌格式規範,重構日誌系統,方便工具收集分析
    • 新增 SQL 語句管理 TiDB Binlog 服務功能,包括查詢狀態,開啓 TiDB Binlog,維護髮送 TiDB Binlog 策略
    • 新增經過 unix_socket 方式鏈接數據庫
    • 新增 SQL 語句 Trace 功能
    • 新增 /debug/zip HTTP 接口,獲取 TiDB 實例的信息,方便排查問題
    • 優化監控項,方便排查問題,以下:

      • 新增 high_error_rate_feedback_total 監控項,監控真實數據量與統計信息估算數據量之間的差距
      • 新增 Database 維度的 QPS 監控項
    • 優化系統初始化流程,僅容許 DDL Owner 執行初始化操做,縮短初始化或升級過程當中的啓動時間
    • 優化 kill query 語句執行邏輯,提高性能,確保資源正確釋放
    • 新增啓動選項 config-check 檢查配置文件合法性
    • 新增 tidb_back_off_weight 系統變量,控制內部出錯重試的退避時間
    • 新增 wait_timeoutinteractive_timeout 系統變量,控制鏈接空閒超過變量的值,系統自動斷開鏈接。
    • 新增鏈接 TiKV 的鏈接池,減小鏈接建立時間
  • 兼容性

    • 支持 ALLOW_INVALID_DATES SQL mode
    • 支持 MySQL 320 握手協議
    • 支持將 unsigned bigint 列聲明爲自增列
    • 支持 SHOW CREATE DATABASE IF NOT EXISTS 語法
    • 優化 load data 對 CSV 文件的容錯
    • 過濾條件中包含用戶變量時謂詞不下推,兼容 MySQL Window Function 中使用用戶變量行爲

PD

  • 新增從單個節點重建集羣的功能
  • 將 Region 元信息從 etcd 移到 go-leveldb 存儲引擎,解決大規模集羣 etcd 存儲瓶頸問題
  • API

    • 新增 remove-tombstone 接口,用於清理 Tombstone Store
    • 新增 ScanRegions 接口,用於批量查詢 Region 信息
    • 新增 GetOperator 接口,用於查詢運行中的 Operator
    • 優化 GetStores 接口的性能
  • 配置

    • 優化配置檢查邏輯,防止配置項錯誤
    • 新增 enable-two-way-merge,用於控制 Region merge 的方向
    • 新增 hot-region-schedule-limit,用於控制熱點 Region 調度速度
    • 新增 hot-region-cache-hits-threshold,連續命中閥值用於判斷熱點
    • 新增 store-balance-rate 配置,用於控制每分鐘產生 balance Region Operator 數量的上限
  • 調度器優化

    • 添加 Store Limit 機制限制調度速度,使得速度限制適用於不一樣規模的集羣
    • 添加 waitingOperator 隊列,用於優化不一樣調度器之間資源競爭的問題
    • 支持調度限速功能,主動向 TiKV 下發調度操做,限制單節點同時執行調度任務的個數,提高調度速度
    • Region Scatter 調度再也不受 limit 機制限制,提高調度的速度
    • 新增 shuffle-hot-region 調度器,解決穩定性測試易用性問題
  • 模擬器

    • 新增數據導入場景模擬
    • 新增爲 Store 設置不一樣的心跳間隔的功能
  • 其餘

    • 升級 etcd,解決輸出日誌格式不一致,prevote 時選舉不出 Leader,Lease 死鎖等問題
    • 制定日誌格式規範,重構日誌系統,方便工具收集分析
    • 新增調度參數,集羣 Label 信息,PD 處理 TSO 請求的耗時,Store ID 與地址信息等監控指標

TiKV

  • 新增分佈式 GC 以及並行 Resolve Lock 功能,提高 GC 的性能
  • 新增逆向 raw_scanraw_batch_scan 功能
  • 新增多線程 Raftstore 和 Apply 功能,提高單節點內可擴展性,提高單節點內併發處理能力,提高單節點的資源利用率,下降延時,同等壓力狀況下性能提高 70%
  • 新增批量接收和發送 Raft 消息功能,寫入密集的場景 TPS 提高 7%
  • 新增 Apply snapshot 以前檢查 RocksDB level 0 文件的優化,避免產生 Write stall
  • 新增 Titan 存儲引擎插件,提高 Value 超過 1KiB 時系統的性能,必定程度上緩解寫放大問題(實驗特性
  • 新增悲觀事務模型(實驗特性
  • 新增經過 HTTP 方式獲取監控信息功能
  • 修改 Insert 語義,僅在 Key 不存在的時候 Prewrite 才成功
  • 制定日誌格式規範,重構日誌系統,方便工具收集分析
  • 新增配置信息,Key 越界相關的性能監控指標
  • RawKV 使用 Local Reader,提高性能
  • Engine

    • 優化內存管理,減小 Iterator Key Bound Option 的內存分配和拷貝,提高性能
    • 支持多個 column family 共享 block cache,提高資源的利用率
  • Server

    • 優化 batch commands 的上下文切換開銷,提高性能
    • 刪除 txn scheduler
    • 新增 read index,GC worker 相關監控項
  • RaftStore

    • 新增 hibernate Regions 功能,優化 RaftStore CPU 的消耗(實驗特性
    • 刪除 local reader 線程
  • Coprocessor

    • 重構計算框架,實現向量化算子、向量化表達式計算、向量化聚合,提高性能
    • 支持爲 TiDB EXPLAIN ANALYZE 語句提供算子執行詳情
    • 改用 work-stealing 線程池模型,減小上下文切換

Tools

  • TiDB Lightning

    • 支持數據表重定向同步功能
    • 新增導入 CSV 文件功能
    • 提高 SQL 轉 KV 對的性能
    • 單表支持批量導入功能,提高單表導入的性能
    • 支持將大表的數據和索引分別導入,提高 TiKV-Importer 導入數據性能
    • 支持對新增文件中缺乏 Column 數據時使用 row id 或者列的默認值填充缺乏的 column 數據
    • TiKV-Importer 支持對 upload SST 到 TiKV 限速功能
  • TiDB Binlog

    • Drainer 新增 advertise-addr 配置,支持容器環境中使用橋接模式
    • Pump 使用 TiKV GetMvccByKey 接口加快事務狀態查詢
    • 新增組件之間通信數據壓縮功能,減小網絡資源消耗
    • 新增 Arbiter 工具支持從 Kafka 讀取 binlog 並同步到 MySQL 功能
    • Reparo 支持過濾不須要被同步的文件的功能
    • 新增同步 Generated column 功能
    • 新增 syncer.sql-mode 配置項,支持採用不一樣的 SQL mode 解析 DDL
    • 新增 syncer.ignore-table 配置項,過濾不須要被同步的表
  • sync-diff-inspector

    • 新增 checkpoint 功能,支持從斷點繼續校驗的功能
    • 新增 only-use-checksum 配置項,控制僅經過計算 checksum 校驗數據的一致性
    • 新增採用 TiDB 統計信息以及使用多個 Column 劃分 Chunk 的功能,適應更多的場景

TiDB Ansible

  • 升級監控組件版本到安全的版本

    • Prometheus 從 2.2.1 升級到 2.8.1 版本
    • Pushgateway 從 0.4.0 升級到 0.7.0 版本
    • Node_exporter 從 0.15.2 升級到 0.17.0 版本
    • Alertmanager 從 0.14.0 升級到 0.17.0 版本
    • Grafana 從 4.6.3 升級到 6.1.6 版本
    • Ansible 從 2.5.14 升級到 2.7.11 版本
  • 新增 TiKV summary 監控面板,方便查看集羣狀態
  • 新增 TiKV trouble_shooting 監控面板,刪除重複項,方便排查問題
  • 新增 TiKV details 監控面板,方便調試排查問題
  • 新增滾動升級併發檢測版本是否一致功能,提高滾動升級性能
  • 新增 lightning 部署運維功能
  • 優化 table-regions.py 腳本,新增按表顯示 leader 分佈功能
  • 優化 TiDB 監控,新增以 SQL 類別顯示延遲的監控項
  • 修改操做系統版本限制,僅支持 CentOS 7.0 及以上,Red Hat 7.0 及以上版本的操做系統
  • 新增預測集羣最大 QPS 的監控項,默認隱藏

官網連接https://www.pingcap.com/index.html

相關文章
相關標籤/搜索