title: TiDB 3.0.2 Release Notes
TiDB 3.0.2 Release Notes
发版日期:2019 年 8 月 7 日
TiDB 版本:3.0.2
TiDB Ansible 版本:3.0.2
TiDB
- SQL 优化器
- 修复当同一张表在查询里出现多次且逻辑上查询结果恒为空时报错 “Can’t find column in schema” 的问题 #11247
- 修复了
TIDB_INLJ
Hint 无法以指定表为 Inner 表构建 IndexJoin 时仍,会强制将其作为 Outer 表构建 IndexJoin,同时 Hint 可能会在不应生效的地方生效的错误,该错误是由于强制选取 IndexJoin 的判断逻辑有误,以及对表别名的处理有误导致的;该错误仅对包含TIDB_INLJ
的查询产生影响 #11362 - 修复某些情况下(例如
SELECT IF(1,c,c) FROM t
),查询结果的列名称不正确的问题 #11379 - 修复
LIKE
表达式某些情况下被隐式转换为 0,导致诸如SELECT 0 LIKE 'a string'
返回结果为TRUE
的问题 #11411 - 支持在
SHOW
语句中使用子查询,现在可以支持诸如SHOW COLUMNS FROM tbl WHERE FIELDS IN (SELECT 'a')
的写法 #11459 - 修复
outerJoinElimination
优化规则没有正确处理列的别名,导致找不到聚合函数的相关列而查询报错的问题;改进了优化过程中对别名的解析,以使得优化可以覆盖更多类型的查询 #11377 - 修复 Window Function 中多个违反语义约束(例如
UNBOUNDED PRECEDING
不允许在 Frame 定义的最后)时没有报错的问题 #11543 - 修复
ERROR 3593 (HY000): You cannot use the window function FUNCTION_NAME in this context
报错信息中,FUNCTION_NAME
不为小写的问题,导致与 MySQL 不兼容 #11535 - 修复 Window Function 中
IGNORE NULLS
语法尚未实现,但使用时没有报错的问题 #11593 - 修复优化器对时间类型数据的等值条件代价估算不准确的问题 #11512
- 支持根据反馈信息对统计信息 Top-N 进行更新 #11507
- SQL 执行引擎
- 修复
INSERT
函数在参数中包含NULL
时,返回值不为NULL
的问题 #11248 - 修复
ADMIN CHECKSUM
语句在检查分区表时计算结果不正确的问题 #11266 - 修复 INDEX JOIN 在使用前缀索引时可能结果不正确的问题 #11246
- 修复
DATE_ADD
函数在进行涉及微秒的日期减法时,没有正确地对日期的小数位数进行对齐导致结果不正确的问题 #11288 - 修复
DATE_ADD
函数没有正确地对 INTERVAL 中的负数部分处理导致结果不正确的问题 #11325 - 修复
Mod(%)
、Multiple(*)
和Minus(-)
返回结果为 0 时,在小数位数较多(例如select 0.000 % 0.11234500000000000000
)的情况下与 MySQL 位数不一致的问题 #11251 - 修复
CONCAT
和CONCAT_WS
函数在返回结果长度超过max_allowed_packet
时,没有正确返回 NULL 和 Warning 的问题 #11275 - 修复
SUBTIME
和ADDTIME
函数在参数不合法时,没有正确返回 NULL 和 Warning 的问题 #11337 - 修复
CONVERT_TZ
函数在参数不合法时,没有正确返回 NULL 的问题 #11359 EXPLAIN ANALYZE
结果中添加了MEMORY
列,显示 QUERY 的内存使用 #11418EXPLAIN
结果中,为笛卡尔积 Join 添加了CARTESIAN
关键字 #11429- 修复类型为 FLOAT 和 DOUBLE 的自增列数据不正确的问题 #11385
- 修复 Dump Pseudo Statistics 时,由于部分信息为
nil
导致 panic 的问题 #11460 - 修复常量折叠优化导致
SELECT … CASE WHEN … ELSE NULL …
查询结果不正确的问题 #11441 - 修复
floatStrToIntStr
对诸如+999.9999e2
的输入没有正确解析的问题 #11473 - 修复
DATE_ADD
和DATE_SUB
函数结果超出合法范围时,某些情况下不会返回NULL
的问题 #11476 - 修复长字符串转换为整型时,若字符串包含不合法字符,转换结果与 MySQL 不一致的问题 #11469
- 修复
REGEXP BINARY
函数对大小写敏感,导致与 MySQL 不兼容的问题 #11504 - 修复
GRANT ROLE
语句在接受CURRENT_ROLE
时报错的问题;修复REVOKE ROLE
语句没有能够正确收回mysql.default_role
权限的问题 #11356 - 修复执行诸如
SELECT ADDDATE('2008-01-34', -1)
时,Incorrect datetime value
Warning 信息的显示格式问题 #11447 - 修复将 JSON 数据中的 Float 类型字段转为 Int 类型溢出时,报错信息中应当提示
constant … overflows bigint
而不应当为constant … overflows float
的问题 #11534 - 修复
DATE_ADD
函数接受FLOAT
、DOUBLE
和DECIMAL
类型的列参数时,没有正确地进行类型转换而导致结果可能不正确的问题 #11527 - 修复
DATE_ADD
函数中,没有正确处理 INTERVAL 小数部分的符号而导致结果不正确的问题 #11615 - 修复
Ranger
没有正确处理前缀索引,导致 Index Lookup Join 中包含前缀索引时,查询结果不正确的问题 #11565 - 修复
NAME_CONST
函数第二个参数为负数时执行会报Incorrect arguments to NAME_CONST
的问题 #11268 - 修复一条 SQL 语句在涉及当前时间计算时(例如
CURRENT_TIMSTAMP
或者NOW
),多次取当前时间值,结果与 MySQL 不兼容的问题:现在同一条SQL语句中取当前时间时,均使用相同值 #11394 - 修复了父 Executor
Close
出现错误时,没有对ChildExecutor
调用Close
的问题,该问题可能导致KILL
语句失效时,子ChildExecutor
没有关闭而导致 Goroutine 泄露 #11576
- 修复
- Server
- 修复
LOAD DATA
处理 CSV 文件中缺失的TIMESTAMP
字段时,自动补充的值是 0 不是当前时间戳的问题 #11250 - 修复
SHOW CREATE USER
语句没有正确检查相关权限的问题,以及SHOW CREATE USER CURRENT_USER()
结果中 USER、HOST 可能不正确的问题 #11229 - 修复在 JDBC 中使用
executeBatch
可能返回结果不正确的问题 #11290 - TiKV Server 在更换端口时,减少 Streaming Client 的报错信息的日志打印 #11370
- 优化 Streaming Client 在重新与 TiKV Server 连接时的逻辑:现在 Streaming Client 不会长时间被 Block #11372
INFORMATION_SCHEMA.TIDB_HOT_REGIONS
中新增REGION_ID
#11350- 取消了从 PD API 获取 Region 相关信息时的超时时间,保证在 Region 数量较大时,调用 TiDB API
http://{TiDBIP}:10080/regions/hot
不会因为 PD 超时而获取失败 #11383 - 修复 HTTP API 中,与 Region 相关的请求没有返回分区表相关的 Region 问题 #11466
- 做以下改动以降低用户手动验证悲观锁时,操作较慢导致锁超时的概率 #11521:
- 悲观锁的默认 TTL 时间由 30 秒提升为 40 秒
- 最大允许的 TTL 时间由 60 秒提升为 120 秒
- 悲观锁的持续时间改为从第一次
LockKeys
请求时开始计算
- 修改 TiKV Client 中的
SendRequest
函数逻辑:当连接无法建立时,由一直等待改为尽快尝试连接其他 Peer #11531 - 优化 Region Cache:当一个 Store 下线,同时另一个 Store 以同样的地址上线时,将已下线的 Store 标记为失效以尽快在 Cache 中更新 Store 的信息 #11567
- 为
http://{TiDB_ADDRESS:TIDB_IP}/mvcc/key/{db}/{table}/{handle}
API 的返回结果添加 Region ID 信息 #11557 - 修复 Scatter Table API 没有对 Range Key 进行转义导致 Scatter Table 不生效的问题 #11298
- 优化 Region Cache:当 Region 所在的 Store 无法访问时,将对应的 Store 信息标记失效以避免对这些 Store 的访问造成查询性能下降 #11498
- 修复了多次 DROP 同名 DATABASE 后,DATABASE 内的表结构仍然能够通过 HTTP API 获取到的错误 #11585
- 修复
- DDL
- 修复在非字符串类型且长度为 0 的列建立索引时出错的问题 #11214
- 禁止对带有外键约束和全文索引的列进行修改(注意:TiDB 仍然仅在语法上支持外键约束和全文索引)#11274
- 修复并发使用
ALTER TABLE
语句更改的位置和列的默认值时,可能导致列的索引 Offset 出错的问题 #11346 - 修复解析 JSON 文本的两个问题:
- 禁止 DROP 自增列索引,修复因为 DROP 自增列上的索引导致自增列结果可能出错的问题 #11399
- 修复以下问题 #11492:
- 修复显式指定列的排序规则但没有指定字符集时,列的字符集与排序规则不一致的问题
- 修复
ALTER TABLE … MODIFY COLUMN
指定的字符集和排序规则冲突时,没有正确报错的问题 - 修复
ALTER TABLE … MODIFY COLUMN
指定多次字符集和排序规则时,行为与 MySQL 不兼容的问题
- 为
TRACE
语句的结果添加子查询的 trace 细节信息 #11458 - 优化
ADMIN CHECK TABLE
执行性能,大幅降低了语句的执行耗时 #11547 - 为
SPLIT TABLE … REGIONS/INDEX
添加了返回结果,结果包含TOTAL_SPLIT_REGION
和SCATTER_FINISH_RATIO
展示在超时时间内,切分成功的 Region 数量 #11484 - 修复
ON UPDATE CURRENT_TIMESTAMP
作为列的属性且指定浮点精度时,SHOW CREATE TABLE
等语句显示精度不完整的问题 #11591 - 修复一个虚拟生成列的表达式中含有另一个虚拟生成列时,该列的索引结果不能正确被计算的问题 #11475
- 修复
ALTER TABLE … ADD PARTITION …
语句中,VALUE LESS THAN
后不能出现负号的问题 #11581
- Monitor
TiKV
- 修复由于 Raft Log 写入不及时可能导致 TiKV panic 的 bug #5160
- 修复 TiKV panic 后 panic 信息不会写入日志的 bug #5198
- 修复了悲观事务下 Insert 行为可能不正确的 bug #5203
- 降低一部分不需要人工干预的日志输出级别为 INFO #5193
- 提高存储引擎大小监控项的准确程度 #5200
- 提高 tikc-ctl 中 Region size 的准确程度 #5195
- 提高悲观锁死锁检测性能 #5192
- 提高 Titan 存储引擎 GC 性能 #5197
PD
- 修复 Scatter Region 调度器不能工作的 bug #1642
- 修复 pd-ctl 中不能进行 merge Region 操作的 bug #1653
- 修复 pd-ctl 中不能进行 remove-tombstone 操作的 bug #1651
- 修复 scan region 不能找到 key 范围相交的 Region 的问题 #1648
- 增加重试机制确保 PD 增加成员成功 #1643
Tools
TiDB Binlog
TiDB Lightning
TiDB Ansible
- 修复 Disk Performance 监控把 second 作为 ms 的单位错误的问题 #840
- Spark 新增 log4j 日志配置 #841
- 修复在开启了 Binlog 并且设置了 Kafka 或者 ZooKeeper 时导致生成的 Prometheus 配置文件格式错误的问题 #844
- 修复生成的 TiDB 配置文件中遗漏
pessimistic-txn
配置参数的问题 #850 - TiDB Dashboard 新增和优化 Metrics #853
- TiDB Dashboard 上每个监控项增加描述 #854
- 新增 TiDB Summary Dashboard,用于更好的查看集群状态和排查问题 #855
- TiKV Dashboard 更新 Allocator Stats 监控项 #857
- 修复 Node Exporter 的告警表达式单位错误的问题 #860
- 更新 tispark jar 包为 v2.1.2 版本 #862
- 更新 Ansible Task 功能描述 #867
- 兼容 TiDB 变更,TiDB Dashboard 更新 Local reader requests 监控项的表达式 #874
- Overview Dashboard 更新 TiKV Memory 监控项的表达式,修复监控显示错误的问题 #879
- 移除 Kafka 模式 Binlog 的支持 #878
- 修复执行
rolling_update.yml
操作时,切换 PD Leader 失效的 bug #887