TiDB 3.0.4 Release Notes

发版日期:2019 年 10 月 8 日

TiDB 版本:3.0.4

TiDB Ansible 版本:3.0.4

  • 新特性

    • 新增系统表 performance_schema.events_statements_summary_by_digest,用于排查 SQL 级别的性能问题
    • TiDB 的 SHOW TABLE REGIONS 语法新增 WHERE 条件子句
    • Reparo 新增 worker-counttxn-batch 配置项,用于控制恢复速率
  • 改进提升

    • TiKV 支持批量 Split 和空的 Split 命令,使得 Split 可以批量进行
    • TiKV 添加 RocksDB 双向链表支持,提升逆序扫性能
    • Ansible 新增 iosnoopfuncslower 两个 perf 工具,方便诊断集群状态
    • TiDB 优化慢日志输出内容,删除冗余字段
  • 行为变更

    • TiDB 修改 txn-local-latches.enable 默认值为 false,默认不启用本地事务冲突检测
    • TiDB 添加全局作用域系统变量 tidb_txn_mode,允许配置使用悲观锁,请注意默认情况下,TiDB 仍然使用乐观锁
    • TiDB 慢日志中的 Index_ids 字段替换为 Index_names 字段,提升慢日志易用性
    • TiDB 配置文件中添加 split-region-max-num 参数,用于调整 SPLIT TABLE 语法允许的最大 Region 数量
    • TiDB 修改 SQL 超出内存限制后的行为,从断开链接修改为返回 Out Of Memory Quota 错误
    • 为避免误操作,TiDB 默认不再允许删除列的 AUTO_INCREMENT 属性,当确实需要删除时,请更改系统变量 tidb_allow_remove_auto_inc
  • 问题修复

    • TiDB 修复特殊语法 PRE_SPLIT_REGIONS 没有使用注释的方式向下游同步的问题
    • TiDB 修复使用游标获取 PREPARE + EXECUTE 执行结果时,慢日志不正确的问题
    • PD 修复相邻小 Region 无法 Merge 的问题
    • TiKV 修复空闲集群中文件描述符泄漏导致长期运行可能会引起 TiKV 进程异常退出的问题
  • 社区贡献者

    感谢以下社区贡献者参与本次发版:

TiDB

  • SQL 优化器
    • 修复 Feedback 切分查询范围出错的问题 #12170
    • 修改当 SHOW STATS_BUCKETS 结果中包含无效 Key 时的行为,将返回错误修改为使用 16 进制显示 #12094
    • 修复查询中包含 SLEEP 函数时(例如 select 1 from (select sleep(1)) t;)),由于列裁剪导致查询中的 sleep(1) 失效的问题 #11953
    • 当查询只关心表的行数而不关心表数据时,使用索引扫描降低 IO #12112
    • use index() 中没有指定索引时不去使用任何索引,和 MySQL 兼容 (如 explain select a from t use index();) #12100
    • 严格限制统计信息 CMSketchTopN 记录的数量,修复快速 analyze 因为超过事务大小限制而失败的问题 #11914
    • 修复 Update 语句包含子查询时,转换子查询出现的错误 #12483
    • 将 Limit 算子下推到 IndexLookUpReader 执行逻辑中优化 select ... limit ... offset ... 的执行性能 #12378
  • SQL 执行引擎
    • PREPARED 语句执行错误时,在日志中打印 SQL 语句 #12191
    • 分区表使用 UNIX_TIMESTAMP 函数分区时,支持分区裁剪 #12169
    • 修复 AUTO INCREMENT 分配 MAX int64MAX uint64 没有报错的问题 #12162
    • SHOW TABLE … REGIONSSHOW TABLE .. INDEX … REGIONS 语法新增 WHERE 条件子句 #12123
    • 修改 SQL 超出内存限制后的行为,从断开链接修改为返回 Out Of Memory Quota 错误 #12127
    • 修复 JSON_UNQUOTE 函数处理 JSON 文本结果不正确的问题 #11955
    • 修复 INSERT 语句中,第一行中为 AUTO_INCREMENT 列赋值,LAST INSERT ID 不正确的问题(例如 insert into t (pk, c) values (1, 2), (NULL, 3)#12002
    • 修复 PREPARE 语句中,GroupBY 解析规则错误的问题 #12351
    • 修复点查中权限检查不正确的问题 #12340
    • 修复 PREPARE 语句类型没有记录在监控中的问题 #12331
    • 支持点查中表名使用别名(例如 select * from t tmp where a = "aa"#12282
    • 修复向 BIT 类型列插入数值时,值没有作为无符号类型处理而导致插入负数报错的问题 #12423
    • 修复时间取整不正确的问题(例如 2019-09-11 11:17:47.999999666 应该被取整到 2019-09-11 11:17:48#12258
    • 调整表达式黑名单系统表的用法(例如 <lt 等价)#11975
    • 调整函数不存在的错误消息,添加数据库前缀(例如 [expression:1305]FUNCTION test.std_samp does not exist#12111
  • Server
    • 慢日志中添加 Prev_stmt 字段,用于最后一条语句是 COMMIT 时输出前一条语句 #12180
    • 优化慢日志输出内容,删除冗余字段 #12144
    • 修改 txn-local-latches.enable 默认值为 false,默认不启用本地事务冲突检测 #12095
    • 将慢日志中的 Index_ids 字段替换为 Index_names 字段,提升慢日志易用性 #12061
    • 添加全局作用域系统变量 tidb_txn_mode,允许配置使用悲观锁 #12049
    • 慢日志中添加 Backoff 字段,用来记录 2PC Commit 阶段的 Backoff 信息 #12335
    • 修复使用游标获取 PREPARE + EXECUTE 执行结果时,慢日志不正确的问题(例如 PREPARE stmt1FROM SELECT * FROM t WHERE a > ?; EXECUTE stmt1 USING @variable#12392
    • 支持使用 tidb_enable_stmt_summary,开启后会对 SQL 语句进行统计,并可以使用系统表 performance_schema.events_statements_summary_by_digest 查询统计结果 #12308
    • 调整了 tikv-client 中部分日志级别(例如由于连接断开使得打印的 batchRecvLoop fails 日志级别由 ERROR 改为 INFO#12383
  • DDL
    • 新增变量 tidb_allow_remove_auto_inc,默认禁止删除列 AUTO INCREMENT 属性 #12145
    • 修复 TiDB 特殊语法 PRE_SPLIT_REGIONS 没有使用注释的方式向下游同步,导致下游数据库报错的问题 #12120
    • 在配置文件中添加 split-region-max-num 参数,使得 SPLIT TABLE 语法允许的最大 Region 数量可调整,该参数默认值 10000 #12097
    • 支持将一个 Region 切分成多个 Region,并修复打散 Region 超时的问题 #12343
    • 修复当索引包含自增列,并且该自增列被两个索引引用时删除失败的问题 #12344
  • Monitor
    • 增加监控指标 connection_transient_failure_count,用于统计 tikvclient 的 gRPC 连接错误数量 #12093

TiKV

  • Raftstore
    • 修复 Raftstore 统计空 Region 中 key 个数不准确问题 #5414
    • 添加 RocksDB 双向链表支持,提升逆序扫性能 #5368
    • 支持 PD 批量 Split 和空的 Split 命令, 使得 Split 可以批量进行,提高 Split 效率 #5470
  • Server
    • 修复查看版本命令的输出格式与 2.X 格式不一致的问题 #5501
    • 更新 Titan 至 3.0 分支最新版本 #5517
    • 更新 grpcio 至 v0.4.5 版本 #5523
    • 修复 gRPC coredump 问题,支持内存共享,以避免此处引起 OOM #5524
    • 修复空闲集群中文件描述符泄漏导致长期运行可能会引起 TiKV 进程异常退出的问题 #5567
  • Storage
    • 支持悲观锁事务心跳检测 API,以使得 TiDB 的悲观锁行为与 MySQL 尽量一致 #5507
    • 修复部分情况下点查性能较低的问题 #5495 #5463

PD

  • 修复相邻小 Region 无法 Merge 的问题 #1726
  • 修复 pd-ctl 的 TLS 启用参数失效问题 #1738
  • 修复可能导致 PD operator 被意外移除的线程安全问题 #1734
  • Region syncer 支持 TLS #1739

Tools

  • TiDB Binlog
    • Reparo 新增 worker-counttxn-batch 配置项,用于控制恢复速率 #746
    • Drainer 优化内存使用,提升同步执行效率 #737
  • TiDB Lightning
    • 修复从 checkpoint 点重新导入可能会导致 TiDB Lightning 崩溃的问题 #237
    • 修改计算 AUTO_INCREMENT 的算法,降低溢出的风险 #227

TiDB Ansible

  • 更新 TiSpark 版本至 2.2.0 #926
  • 更新 TiDB 配置项 pessimistic_txn 的默认值为 true #933
  • 新增更多系统级别监控到 node_exporter #938
  • 新增 iosnoopfuncslower 两个 perf 工具,方便诊断集群状态 #946
  • Ansible 的 Raw 模块更新成 Shell 模块,解决密码过期等场景发生的长时间等待问题 #949
  • 更新 TiDB 配置项 txn_local_latches 的默认值为 false
  • 优化 Grafana dashboard 监控项和告警规则 #962 #963 #969
  • 新增配置文件检查功能,在部署和升级之前检查配置文件是否正确 #934 #972