文件菜单

TIDB 5.2发行说明

上映日期:2021年8月27日

TIDB版本:5.2.0

在v5.2中,关键的新特性和改进如下:

  • 支持使用若干函数在表达式索引中大大提高查询性能
  • 提高优化器基数估计的准确性,以帮助选择最佳执行计划
  • 宣布锁定视图功能的通用可用性(GA),以观察事务锁定事件并解决死锁问题
  • 增加TiFlash io流量限制特性,提高TiFlash读写的稳定性
  • TIKV推出了一种新的流量控制机制来取代以前的RockSDB写入失速机制,以提高TIKV流量控制的稳定性
  • 简化数据迁移(DM)的操作和维护,以降低管理成本。
  • TiCDC支持HTTP协议OpenAPI来管理TiCDC任务。它为Kubernetes和本地环境提供了更友好的操作方法。(实验特性)

兼容性变化

注意:

从早期TIDB版本升级到v5.2时,如果要知道所有中间版本的兼容性更改说明,则可以查看发行公告对应的版本号。

系统变量

变量名 改变类型 描述
default_authentication_plugin 新补充 设置服务器发布的认证方法。默认值为mysql_native_password
tidb_enable_auto_increment_in_generated 新补充 确定是否包括自动递增当创建生成的列或表达式索引时。默认值为
tidb_opt_enable_correlation_adjustment 新补充 控制优化器是否估计基于列顺序相关的行数。默认值为
tidb_opt_limit_push_down_threshold 新补充 设置阈值,该阈值决定是否将Limit或TopN操作符下推到TiKV。默认值为100.
tidb_stmt_summary_max_stmt_count 修改 设置语句汇总表存储在内存中的最大语句数。修改默认值为2003000
tidb_enable_streaming. 弃用 系统变量enable-streaming已弃用,不建议再使用。

配置文件参数

配置文件 配置项 改变类型 描述
TIDB配置文件 Pessimistic-txn.deadlock-unighary-collect-Retryable 新补充 控制是否信息\ _SCHEMA。死锁表收集重试死锁错误消息。
TIDB配置文件 security.auto-tls. 新补充 确定是否在启动时自动生成TLS证书。默认值为错误的
TIDB配置文件 stmt-sumary.max-stmt-count 修改 指定语句汇总表中允许保存的SQL类别的最大数量。修改默认值为2003000
TIDB配置文件 实验。allow-表达索引 弃用 allow-expression-indexTiDB配置文件中的配置已弃用。
TIKV配置文件 raftstore.cmd-batch. 新补充 控制是否能够批量处理请求。启用时,写性能显着提高。默认值为真的
TIKV配置文件 raftstore.inspect-internal. 新补充 在某个间隔,TIKV检查筏组件的延迟。此配置项指定检查的间隔。默认值为500毫秒
TIKV配置文件 roaftstore.max-ober-down-dows 修改 允许对等体休眠的最长时间。超时的对等体被标记为, PD会尝试删除。修改默认值为5M10M
TIKV配置文件 server.raft-client-queue-size 新补充 指定TiKV中Raft消息的队列大小。默认值为8192.
TIKV配置文件 storage.flow-control.enable. 新补充 确定是否启用流量控制机制。默认值为真的
TIKV配置文件 Storage.flow-control.memtables-threshold 新补充 当KVDB Memtables的数量达到该阈值时,流量控制机构开始工作。默认值为5
TIKV配置文件 Storage.Flow-Control.L0-文件阈值 新补充 当kvDB L0文件数达到该阈值时,流控机制开始工作。默认值为9
TIKV配置文件 storage.flow-control.soft-pending-conction-bytes-limit 新补充 当kvdb中的待处理压缩字节达到此阈值时,流量控制机制开始拒绝一些写入请求并报告serverisbusy.错误。默认值为“192GB”。
TIKV配置文件 storage.flow-control.hard-pending-compaction-bytes-limit 新补充 当KvDB中等待的压缩字节达到这个阈值时,流控制机制拒绝所有写请求并报告serverisbusy.错误。默认值为“1024GB”。

其他

  • 在升级之前,检查是否值tidb_evolve_plan_baselines.系统变量是.如果值是,设置为;否则,升级将失败。
  • 对于从v4.0升级到v5.2的TIDB集群,默认值tidb_multi_statement_mode.改变从警告
  • 升级前,请检查TiDB配置的值反馈概率.如果值不是0,升级后会发生“可恢复的Goroutine”错误的“恐慌”,但此错误不会影响升级。
  • TiDB现在与MySQL 5.7的noop变量兼容innodb_default_row_format..设置此变量没有效果。#23541
  • 从TIDB 5.2开始,提高系统安全性,建议(但不是强制性)来加密来自客户端的连接的传输层。TIDB提供Auto TLS功能,可自动配置和启用TIDB中的加密。要使用Auto TLS功能,请在TIDB升级之前,设置security.auto-tls.的TiDB配置文件真的

新功能

SQL

  • 支持在表达式索引中使用多个函数

    表达式索引是一种可以在表达式上创建的特殊索引类型。创建表达式索引后,TiDB支持基于表达式的查询,极大地提高了查询性能。

    用户文档#25150

  • 支持翻译在Oracle中的功能

    翻译函数通过字符串中的其他字符替换所有字符。在TIDB中,此功能不会将空字符串视为空值正如Oracle所做的那样。

    用户文档

  • 支持溢HashAgg

    支持将HashAgg溢出到磁盘。当包含HashAgg操作符的SQL语句导致内存不足(OOM)时,可以尝试将该操作符的并发性设置为1触发磁盘溢出,减轻了内存应力。

    用户文档#25882

  • 提高优化器基数估计的准确性

    • 提高TIDB对TOPN /限制估计的准确性。例如,对于包含该包含的大型表格的分页查询通过Col Limit X订购条件下,TiDB可以更容易地选择正确的索引,并减少查询响应时间。

    • 提高超出范围估计​​的准确性。例如,即使尚未更新一天的统计信息,TIDB也可以准确地选择包含的查询的相应索引日期=现在()

    • 介绍这一点tidb_opt_limit_push_down_threshold变量来控制优化器推下限制/ TOPN的行为,这可以解决由于错误估计而在某些情况下无法按下限制/ TOPN的问题。

      用户文档# 26085

  • 改进优化器的索引选择

    添加索引选择的修剪规则。在使用统计数据的比较之前,TIDB使用这些规则来缩小要选择的可能索引的范围,这降低了选择非最佳索引的可能性。

    用户文档

事务

  • 锁定视图的一般可用性(GA)

    锁定视图功能提供有关锁定冲突和锁定等待悲观锁的更多信息,帮助DBA观察事务锁定事件并解决死锁问题。

    在V5.2中,锁定视图以下提高:

    • 除了与锁定视图相关表中的SQL Digest列外,将列添加到显示相应的归一化SQL文本的这些表中。您不必手动查询对应于SQL摘要的语句。

    • 添加TIDB_DECODE_SQL_DIGESTS查询归一化SQL语句的函数(没有格式和参数的形式)对应于集群中的一组SQL摘要。这简化了查询事务历史上执行的语句的操作。

    • 添加一个列data_lock_waits.死锁系统表以显示从密钥解释的表名,行ID,索引值和其他密钥信息。这简化了诸如定位键所属和解释关键信息的表的操作。

    • 支持收集重试死锁错误的信息死锁表格,这使得更容易解决此类错误引起的问题。默认情况下禁用错误集合,可以使用使用Pessimistic-txn.deadlock-unighary-collect-Retryable配置。

    • 支持将查询执行事务与空闲事务区分开来tidb_trx.系统表。的正常的国家现在分为运行闲置的状态。

      用户文档:

    • 查看集群中所有TiKV节点上发生的悲观锁等待事件:data_lock_waits.

    • 查看TIDB节点最近发生的死锁错误:死锁

    • 查看TiDB节点上正在执行的事务:tidb_trx.

  • 优化在表中添加索引的用户方案auto_random.或者shard_row_id_bits.属性。

稳定

  • 增加TiFlash io流量限制

    该特性适用于特定大小的磁盘带宽较小的云存储。默认禁用。

    Tiflash I / O Rate Limiter提供了一种新机制,以避免读写任务之间的I / O资源过度竞争。它余额符合读写任务的响应,并根据读/写工作量自动限制速率。

    用户文档

  • 提高TIKV流量控制的稳定性

    TIKV推出了一种新的流量控制机制来取代以前的RockSDB写入失速机制。与写入失速机制相比,这种新机制可降低对前景写入稳定性的影响。

    具体来说,当RocksDB压实应力累积时,流动控制在TiKV调度层而不是RocksDB层进行,避免了以下问题:

    • 筏子被卡住,这是由RocksdB写入摊位引起的。

    • RAFT选举超时,并且由于结果转移了节点领导者。

      当写流量高时,这种新机制可提高流量控制算法减轻QP减少。

      用户文档#10137

  • 从群集中的单个慢速TIKV节点引起的影响自动检测和恢复

    TIKV介绍慢速检测机制。该机制通过检查TIKV筏机的速率来计算分数,然后通过商店心跳报告到PD的分数。同时,它增加了evict-慢速商店调度程序PD上的调度程序自动驱逐单个慢TIKV节点上的领导者。通过这种方式,减轻了对整个簇的影响。与此同时,引入了更多关于慢节点的警报项目,以帮助您快速查明并解决问题。

    用户文档# 10539

数据迁移

  • 简化数据迁移的操作(DM)

    DM V2.0.6可以使用VIP自动识别数据源的更改事件(故障转移或计划更改),并可以自动连接到新的数据源实例,以减少数据复制延迟并简化操作程序。

  • TIDB Lightning支持CSV数据中的定制线路终结器,并与MySQL Load Data CSV数据格式兼容。然后,您可以直接在数据流架构中使用TIDB闪电。

    #1297

TIDB数据共享订阅

TiCDC支持使用HTTP协议(OpenAPI)管理TiCDC任务,对于Kubernetes和本地环境都是一种更加友好的操作方式。(实验特性)

# 2411

部署和操作

支持运行Tiup游乐场使用Apple M1芯片Mac计算机的命令。

功能增强

  • 工具

    • TiCDC

      • 添加为TIDB设计的二进制MQ格式。它比基于JSON的开放协议更紧凑#1621
      • 删除对文件分类器的支持#2114
      • 支持日志旋转配置# 2182
    • TIDB Lightning.

      • 支持自定义行终止子(除外\ R.\ n#1297
      • 支持表达式索引和依赖于虚拟生成列的索引#1407
    • 饺子

      • 支持备份MySQL兼容数据库,但不支持启动交易...使用一致的快照或者显示创建表#311

改进

  • TiDB

    • 支持推下内置功能json_unquote()tikv.#24415
    • 支持删除联盟从双桌子分支#25614
    • 优化总操作员的成本因素# 25241
    • 允许MPP外部连接根据表的行数选择构建表#25142
    • 支持基于区域的不同的TIFlash节点之间平衡MPP查询工作负载# 24724
    • 在执行MPP查询后,支持缓存中的陈旧区域#24432
    • 提高内置函数的MySQL兼容性str_to_date对于格式说明符%b /%m /%r /%t#25767
    • 修复在为同一查询重新创建不同绑定之后在多个TIDB中创建不一致的绑定缓存的问题#26015
    • 修复升级后,现有绑定无法加载到缓存中的问题# 23295
    • 支持订购结果显示绑定经过 (original_sql更新时间# 26139
    • 当存在绑定时,提高查询优化的逻辑,并减少查询的优化时间# 26141
    • 支持在“已删除”状态下自动完成垃圾收集#26206
    • 显示绑定是否用于查询优化的结果解释verbose.#26930
    • 添加一个新的状态变化last_plan_binding_update_time.查看当前TIDB实例中的绑定缓存对应的时间戳# 26340
    • 支持在开始绑定演进或运行时报告错误管理发展绑定禁止基线演进(目前在本地TiDB版本中禁用,因为它是一个实验特性)影响其他特性# 26333
  • PD

    • 为热区域调度添加更多QP尺寸,并支持调整调度的优先级#3869
    • 支持热区域余额调度Tiflash的写热点#3900
  • TiFlash

    • 增加运营商:国防部/ %喜欢
    • 添加字符串函数:ASCII()合并()长度()POSITION ()修剪()
    • 增加数学函数:CONV ()CRC32()Degle()Exp()ln()日志()log10()LOG2 ()战俘()弧度()圆形(十进制)罪()mod()
    • 添加日期函数:adddate(字符串,真实)date_add(字符串,真实)日期()
    • 添加其他功能:INET_NTOA ()Inet_Aton()Inet6_aton.INET6_NOTA()
    • 当启用新的排序规则时,支持MPP模式下的shuffle Hash Join和shuffle Hash Aggregation计算
    • 优化基本代码以提高MPP性能
    • 支持铸造细绳类型的双倍的类型
    • 使用多个线程优化右外连接中的未加入数据
    • 支持自动使MPP查询中的陈旧区域无效
  • 工具

    • TiCDC

      • 将并发限制添加到KV客户端的增量扫描#1899
      • TiCDC总是可以在内部提取旧值# 2271
      • 当发生不可恢复的DML错误时,TiCDC可能会失败并快速退出#1928
      • 解决锁定无法在区域初始化后立即运行# 2235
      • 优化WorkerPool以减少高并发性下的Goroutines数量# 2201
    • 饺子

      • 支持始终拆分TIDB V3.x表tidb_rowid.保存TIDB内存#301
      • 减少饺子的进入information_schema提高稳定性#305

Bug修复

  • TiDB

    • 修复使用Merge Join时返回错误结果的问题键入列# 25669
    • 修复数据损坏问题表达的论点#25591
    • 避免GC会话受到全局变量的影响#24976
    • 修复使用时出现的恐慌问题限制在窗口函数中查询#25344
    • 查询分区表时修复错误的值限制#24636
    • 解决问题IFNULL没有正确生效枚举或者键入列# 24944
    • 修复了改变的错误结果数数在加入子查询第一排#24865
    • 修复查询挂起问题时发生的ParallelApply用下面使用top操作符# 24930
    • 修复使用多列前缀索引执行SQL语句时返回更多结果的问题# 24356
    • 解决问题< = >操作符不能正确生效#24477
    • 修正了并行的数据竞争问题应用操作符# 23280
    • 解决问题索引超出范围在对PartitionUnion操作符的IndexMerge结果进行排序时,报告错误# 23919
    • 修复设置的问题tidb_snapshot变量设置为意外的大值可能会破坏事务隔离# 25680
    • 修复odbc样式常量(例如,{D'2020-01-01'})不能用作表达式#25531
    • 解决问题选择不同转换成批处理得到导致结果不正确#25320
    • 修正了从TiFlash退回到TiKV查询无法触发的问题#23665#24421
    • 修复index-out-of-range检查时发生的错误仅限_full_group_by.#23839
    • 修复了索引加入在相关子查询的结果是错误的#25799
  • Tikv.

    • 修复错误的tikv_raftstore_hibernated_peer_state.度规#10330
    • 修复错误的参数类型json_unquote()在协处理器中执行函数# 10176
    • 在优雅的关断期间跳过清除回调,以避免在某些情况下破碎酸#10353# 10307
    • 修复一个错误,即在领导者上为副本分享读取索引#10347
    • 修复施放的错误功能双倍的双倍的# 25200
  • PD

    • 修复由于多个调度程序之间的冲突而无法生成预期调度的问题#3807# 3778
  • TiFlash

    • 修复Tiflash由于拆分故障而导致重新启动的问题
    • 修正了TiFlash无法删除增量数据的潜在问题
    • 修复了Tiflash在非二进制字符中添加错误填充的错误投掷函数
    • 处理具有复杂的聚合查询时修复不正确的结果通过...分组
    • 修复了在重写压力下发生的TIFLASH恐慌问题
    • 修复当右jon键未以无效时发生的恐慌,左连接键可为空
    • 解决潜在问题读索引请求需要很长时间
    • 修复读取负载过重时发生的恐慌问题
    • 修复当日期格式函数被调用细绳键入参数空值价值
  • 工具

    • TiCDC

      • 修复刷新检查点时TiCDC所有者异常退出的问题#1902
      • 修复了changefeed在成功创建后立即失败的bug#2113
      • 修复了由于规则过滤器的无效格式而发生转换reeed失败的错误#1625
      • 在TICDC所有者恐慌时修复潜在的DDL丢失问题#1260
      • 修复了CLI与4.0的兼容性问题。默认排序引擎选项中的X个集群#2373
      • 修正了当TiCDC获取时changefeed可能被意外重置的错误errschemastoragetablemiss.错误# 2422
      • 修复TICDC获取时无法删除的错误ergcttlexceeded错误#2391
      • 修复TICDC无法将大型表与CDCLog同步的错误#1259# 2424
      • 修复TICDC重新安排表时多个处理器可能将数据写入同一表的错误# 2230
    • 备份与恢复(BR)

      • 修复BR跳过还原期间恢复所有系统表的错误# 1197#1201
      • 修复了BR在恢复cdclog时错过DDL操作的错误# 870
    • TIDB Lightning.

      • 修正了TiDB闪电无法解析的错误小数数据类型在拼影文件中#1272
      • 修复TiDB Lightning在恢复表模式时报告“Error 9007: Write conflict”错误的bug#1290
      • 修正了TiDB Lightning因int句柄溢出而无法导入数据的错误#1291
      • 修正了一个bug, TiDB闪电可能会得到一个校验和不匹配的错误,由于数据丢失在本地后端模式#1403
      • 在TIDB闪电正在恢复表格模式时,请使用聚类索引修复灯光不兼容问题# 1362
    • 饺子

      • 修复数据导出失败的错误,因为饺子GC SafePoint设置得太迟了#290
      • 在某些MySQL版本中从上游数据库导出表名时,请修复饺子陷入困境#322