TiDB 3.0.0

Easter79
• 阅读 362

2019 年 5 月 10 日,TiDB 发布 3.0.0-rc.1 版,对应的 TiDB-Ansible 版本为 3.0.0-rc.1。相比 3.0.0-beta.1 版本,该版本对系统稳定性、易用性、功能、优化器、统计信息以及执行引擎做了很多改进。

TiDB

  • SQL 优化器

    • 利用列之间的顺序相关性提升代价估算准确度,并提供启发式参数 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 语句使用绑定的执行计划,不建议在生产场景中直接使用。
  • 执行引擎

    • 支持对 TableReaderIndexReaderIndexLookupReader 算子进行内存追踪控制。
    • 在慢日志中展示更多 COPROCESSOR 端执行任务相关细节。如 COPROCESSOR 任务数,平均/最长/90% 执行/等待时间,执行/等待时间最长的 TiKV 地址等。
    • 支持 PREPARE 不含占位符的 DDL 语句。
  • Server

    • 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 字段的合法性检查

  • DDL

    • 为 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
    • 支持选用 tcmalloc 为内存分配器

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 脚本

TiDB 3.0.0

点赞
收藏
评论区
推荐文章
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
2个月前
css问题
1、 在IOS中图片不显示(给图片加了圆角或者img没有父级) <div<img src""/</div div {width: 20px; height: 20px; borderradius: 20px; overflow: h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
晴空闲云 晴空闲云
2个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。 盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
Karen110 Karen110
1年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:Thu Feb 02 2019 09:59:51 GMT+0800 (中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。 1\. 显示日期使用
艾木酱 艾木酱
1个月前
快速入门|使用MemFire Cloud构建React Native应用程序
> MemFire Cloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Easter79 Easter79
1年前
TiDB 2.0 RC1 Release
2018 年 3 月 9 日,TiDB 发布 2.0 RC1 版。该版本在上一版的基础上,对 MySQL 兼容性、系统稳定性和优化器做了很多改进。 TiDB ---- * 支持限制单条 SQL 语句使用内存的大小,减少程序 OOM 风险 * 支持下推流式聚合算子到 TiKV * 支持配置文件的合法性检测 *
Easter79 Easter79
1年前
TiDB 1.1 Alpha Release
2018 年 1 月 19 日,TiDB 发布 1.1 Alpha 版。该版本对 MySQL 兼容性、SQL 优化器、系统稳定性、性能做了大量的工作。 TiDB ---- * SQL parser * 兼容更多语法 * SQL 查询优化器 * 统计信息减小内存占用 * 优化统计信息启动时载入的时间 *
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
helloworld_28799839 helloworld_28799839
2个月前
常用知识整理
# Javascript ## 判断对象是否为空 ```js Object.keys(myObject).length === 0 ``` ## 经常使用的三元运算 > 我们经常遇到处理表格列状态字段如 `status` 的时候可以用到 ``` vue