2019 年 5 月 10 日,TiDB 發佈 3.0.0-rc.1 版,對應的 TiDB-Ansible 版本爲 3.0.0-rc.1。相比 3.0.0-beta.1 版本,該版本對系統穩定性、易用性、功能、優化器、統計信息以及執行引擎作了不少改進。git
TiDB
-
SQL 優化器github
- 利用列之間的順序相關性提高代價估算準確度,並提供啓發式參數
tidb_opt_correlation_exp_factor
用於控制在相關性沒法被直接用於估算的場景下對索引掃描的偏好程度。
- 當過濾條件中包含相關列時,在抽取複合索引的訪問條件時儘量多地匹配索引的前綴列。
- 用動態規劃決定鏈接的執行順序,當參與鏈接的表數量很少於
tidb_opt_join_reorder_threshold
時啓用。
- 在構造 Index Join 的的內表中,以複合索引做爲訪問條件時,儘量多地匹配索引的前綴列。
- 提高對單列索引上值爲 NULL 的行數估算準確度。
- 在邏輯優化階段消除聚合函數時特殊處理
GROUP_CONCAT
,防止產生錯誤的執行結果。
- 當過濾條件爲常量時,正確地將它下推到鏈接算子的子節點上。
- 在邏輯優化階段列剪裁時特殊處理一些函數,例如
RAND()
,防止產生和 MySQL 不兼容的執行結果。
- 支持
FAST ANALYZE
,經過tidb_enable_fast_analyze
變量控制。該特性經過用對 Region 進行採樣取代掃描整個 region 的方式加速統計信息收集。
- 支持
SQL PLAN MANAGEMENT
。該特性經過對 SQL 進行執行計劃綁定,以確保執行穩定性。該特性目前處於測試階段,僅支持對 SELECT 語句使用綁定的執行計劃,不建議在生產場景中直接使用。
-
執行引擎sql
- 支持對
TableReader
、IndexReader
和 IndexLookupReader
算子進行內存追蹤控制。
- 在慢日誌中展現更多 COPROCESSOR 端執行任務相關細節。如 COPROCESSOR 任務數,平均/最長/90% 執行/等待時間,執行/等待時間最長的 TiKV 地址等。
- 支持 PREPARE 不含佔位符的 DDL 語句。
-
Serverexpress
- TiDB 啓動時,只容許 DDL owner 執行 bootstrap
- 新增
tidb_skip_isolation_level_check
變量控制檢查隔離級別設置爲 SERIALIZABLE 時不報錯
- 在慢日誌中,將隱式提交的時間與 SQL 執行時間融合在一塊兒
- RBAC 權限管理
- 支持
SHOW GRANT
- 支持
SET DEFAULT ROLE
- 支持
GRANT ROLE
- 修正了插件退出時致使 TiDB 退出的問題
- 修正只讀語句被錯誤地放到事務歷史中的問題
- kill 語句能夠更快的結束 SQL 的執行,並快速釋放資源
- 增長啓動選項
config-check
來檢查配置文件的合法性
- 修正非嚴格模式下對於寫入 NULL 字段的合法性檢查
-
DDLbootstrap
- 爲 CREATE TABLE 添加了 pre_split_regions 選項,該選項能夠在建表時預先分配 Table Region,避免建表後大量寫入形成的寫熱點
- 優化了部分 DDL 語句的執行性能
- FULLTEXT KEY 新增不支持全文索引的 warning
- 修正了舊版本 TiDB 中,UTF8 和 UTF8MB4 編碼的兼容性問題
- 修正了一個表的 shard_row_id_bits 的潛在 BUG
- 修正了 ALTER TABLE Charset 後,Column Charset 不會跟隨變化的 BUG
- 修正了使用 BINARY/BIT 做爲 Column Default Value 時,SHOW COLUMN 可能出錯的 BUG
- 修正了 SHOW FULL COLUMNS 語句中,CHARSET / COLLATION 顯示的兼容性問題
- 如今 SHOW COLLATIONS 語句只會列出 TiDB 所實際支持的 COLLATIONS
PD
- 升級 ETCD 版本
- 統一 etcd 的日誌格式與 pd server 一致
- 修復 prevote 可能沒法選出 Leader 的問題
- 快速 drop 掉會失敗的 propose 和 read 請求,減小阻塞後面的請求時間
- 修復 Lease 的死鎖問題
- 修復 store 讀熱點的 keys 統計不正確問題
- 支持從單一 PD 節點強制重建 PD 集羣
- 修復 Scatter Region 產生無效 Operator Step 的問題
- 修復 Region Merge Operator 超時時間太短的問題
- 熱點調度使用高優先級
- 添加 PD server 端處理 TSO 請求的耗時 Metrics
- 添加相對應的 Store ID 和 Address 到 store 相關的 Metrics
- 支持 GetOperator 服務
- 修復 Heartbeat stream 下發送 error 找不到 store 的問題
TiKV
- Engine
- 修復讀流量統計不許確問題
- 修復 prefix extractor panic 的問題
- 優化內存管理,減小
Iterator Key Bound Option
的內存分配和拷貝
- 修復 Merge Region 時未考慮 Learner log gap 形成的 panic 問題
- 支持不一樣的
column families
共享 block cache
- Server
- 減小
batch commands
的上下文切換開銷
- 檢查 seek iterator status 的合法性
- RaftStore
- 可配置化
properties index distance
- Coprocessor
- 新增 batch index scan executor
- 新增向量化 evaluation 框架
- 新增 batch 執行器統計框架
- 構建 RPN expression 時檢查 max column 以防止 evaluation 階段 column offset 越界的問題
- 實現
BatchLimitExecutor
- ReadPool 使用
tokio-threadpool
替換本來的 futures-cpupool
,減小 context switch
- 新增 batch 聚合框架
- 新增
BatchSelectionExecutor
- 實現 batch aggression function
AVG
- 實現 RPN function
LogicalAnd
- Misc
Tools
- TiDB-Binlog
- 修復 unsigned int 類型的主鍵列的 binlog 數據爲負數,形成同步出錯中斷的問題
- 刪除下游是 pb 時的壓縮選項,修改下游名字 pb 成 file
- Pump 新增 storage.sync-log 配置項,支持 Pump 本地存儲異步刷盤
- Pump 和 Drainer 之間通信支持流量壓縮
- Drainer 新增 syncer.sql-mode 配置項,支持使用不一樣 sql-mode 解析 DDL query
- Drainer 新增 syncer.ignore-table 配置項,支持過濾不須要同步的表
- Lightning
- 使用 row id 或者列的默認值填充 dump 文件中缺乏的 column 數據
- Importer 修復部分 SST 導入失敗依然返回導入成功的 bug
- Importer 支持 upload SST 到 TiKV 限速
- Lightning 優化導入表的順序,按照表的數據大小順序進行導入,減小導入過程當中大表執行 checksum 和 Analyze 對集羣的影響,而且提升 Checksum 和 Analyze 的成功率
- 提高 Lightning encode SQL 性能,性能提高 50%,直接解析數據源文件內容成 TiDB 的 types.Datum,省去 KV encoder 的多餘解析工做
- 日誌格式改成 Unified Log Format
- 新增一些命令行選項,即便缺乏配置文件也能使用
- 數據同步對比工具 (sync-diff-inspector)
- 支持 checkpoint,記錄校驗狀態,重啓後從上次進度繼續校驗
- 增長配置項 only-use-checksum,只經過計算 checksum 來檢查數據是否一致
TiDB-Ansible
- TiKV 監控變動以及更新 Ansible、Grafana、Prometheus 版本
- summary 監控適用於用戶查看集羣狀態
- trouble_shooting 監控適用於 DBA 排查問題
- details 監控適用於開發分析問題
- 修復下載 Kafka 版本 Binlog 失敗的 BUG
- 修改操做系統版本限制,僅支持 CentOS 7.0 及以上,Red Hat 7.0 及以上版本的操做系統
- 滾動升級時的版本檢測改成多併發
- 更新 README 中文檔連接
- 移除重複的 TiKV 監控項,新增 trouble shooting 監控項
- 優化
table-regions.py
腳本,按表顯示 leader 分佈
- 更新 drainer 配置文件
- 優化 TiDB 監控,新增以 SQL 類別顯示延遲的監控項
- 更新 Lightning 配置文件,新增 tidb_lightning_ctl 腳本