0
0
1
0
专栏/.../

TIDB 新特性解读 (7.0~7.5)

 WalterWj  发表于  2024-05-08

可靠性

RU

基于资源组的资源管控(多租户),Resource Control 管理后台任务

资源管控(Resource Control)是一种用于实现资源隔离的特性,可以通过定义资源组(Resource Group)和配额来限制集群中的资源使用。资源管控提供了两层资源管理能力,包括在 TiDB 层的流控能力和 TiKV 层的优先级调度能力。通过流控和调度这两层控制,可以实现应用的资源隔离

资源管控特性的使用场景包括:

  • 将多个来自不同系统的中小型应用合入一个 TiDB 集群中,个别应用的负载升高,不会影响其他业务的正常运行。
  • 将所有测试环境合入一个集群,或者将消耗较大的批量任务编入一个单独的资源组,提升硬件利用率,降低运行成本。
  • 在存在多种业务负载时,将不同的负载分别放入各自的资源组,确保交易类业务的响应时间不受其他业务的影响。
  • 遇到突发的 SQL 性能问题时,可以结合 SQL Binding 和资源组,临时限制某个 SQL 的资源消耗,例如 SELECT /*+ RESOURCE_GROUP(rg1) */ * FROM t limit 10;
  • Resource Control 也管理后台任务,如 TiDB 的自动统计信息更新、MVCC 清理等,确保这些任务在不影响在线业务的前提下执行。

使用资源管控特性需要注意以下几点:

  • 资源管控会带来额外的调度开销,因此性能可能会有轻微下降(低于5%)。
  • 资源管控特性引入了一些系统变量或参数,如 tidb_enable_resource_controlresource-control.enabled,需要根据实际需求进行配置

Runaway Queries

Runaway Query 是指对执行时间或消耗资源超出预期的查询(仅指 SELECT 语句)进行熔断处理:DRYRUNCOOLDOWNKILL

运行超时查询是指执行时间或消耗资源超出预期的查询。为了提高数据库的稳定性,TiDB 引入了运行超时查询管理功能,可以自动管理和处理这些问题。此外,还可以手动添加语句来管理运行超时查询。

运行超时查询管理的用途:

  • 自动识别和处理异常 SQL 性能问题,以保持关键系统的服务质量。
  • 当没有立即有效的修复方法时,可以应对突发的 SQL 性能问题。
  • 需要对已知存在安全或性能问题的特定 SQL 进行黑名单或限流。

运行超时查询管理的工作原理:

  1. 识别运行超时查询:

    1. 动态识别:根据资源组中定义的实时性能指标,自动识别运行超时查询。目前,该方法使用EXEC_ELAPSED设置来确定SQL命令的实际执行时间。如果查询的执行时间超过EXEC_ELAPSED设置的限制,就会被标识为运行超时查询。
    2. 静态识别:手动识别运行超时查询,通过定义规则来识别具有特定 SQL 特征的查询。可以使用 SQL 文本、SQL 摘要或执行计划摘要等方法进行识别。
  2. 处理运行超时查询:

    1. DRYRUN:在不执行任何操作的情况下识别问题,并在日志和视图中显示结果。这对于初步测试以检测误报很有用。
    2. COOLDOWN:降低资源组中识别的查询的优先级,减缓其处理速度。
    3. KILL:终止识别的查询,以保护数据库性能。

统计信息收集的可靠性

收集时间降低了约 25%

统计信息缓存的优化

直方图、TopN、CMSketch 等占用空间较大的统计信息可异步加载

增强对历史执行计划的绑定

根据历史执行计划创建绑定

CREATE [GLOBAL | SESSION] BINDING FROM HISTORY USING PLAN DIGEST 'plan_digest';

根据历史 SQL 分析或者慢日志分析,查看历史上好的执行计划的指纹码,进行绑定。不用手写 hint。

使用 PLAN REPLAYER 保存和恢复集群现场信息

一键导出 SQL 的执行计划等相关信息,用来保留现场信息有作用。

分布式框架

TiDB 分布式执行框架

目前,分布式执行框架支持分布式执行 ADD INDEXIMPORT INTO 这两类任务。也就是以前 DDL owner 来做操作变为多个 tidb-server 来做。

注意:

需要开启和正确配置 fast DDL

使用限制:

分布式执行框架一次只能调度一个 ADD INDEX 任务进行分布式执行。如果在当前的 ADD INDEX 分布式任务还未执行完成时就提交了一个新的 ADD INDEX 任务,则新提交的 ADD INDEX 任务不会被该框架调度,而是直接通过事务的方式来执行。

分布式框架支持全局排序区

TiDB 全局排序(全局排序目前仅支持使用 Amazon S3 作为云存储),可以减少 Add Index 导致的 Compaction。

单条 DDL 支持加多个索引

如题,测试脚本:

(root@10.102.58.180) [test]>CREATE TABLE users (
    ->   id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    ->   name VARCHAR(255) NOT NULL,
    ->   email VARCHAR(255) NOT NULL UNIQUE,
    ->   age INT UNSIGNED,
    ->   created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    ->   updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    -> );
Query OK, 0 rows affected (0.15 sec)

(root@10.102.58.180) [test]>ALTER TABLE users
    -> ADD INDEX idx_name (name),
    -> ADD INDEX idx_email_age (email, age);
Query OK, 0 rows affected (1.53 sec)

性能

基于负载的副本读

打散读热点:当 leader 节点的预估排队时间超过阈值时(可配置,默认 1s),TiDB 会优先从 follower 节点读取数据,读取吞吐量提高 70%~200%

悲观锁冲突排队机制优化

是否对悲观锁启用加强的悲观锁唤醒模型:冲突频繁下,避免无效唤醒。默认开启,无需变动。

非 Prepare 语句执行计划缓存

对于某些非 PREPARE 语句,TiDB 可以像 Prepare/Execute 语句一样支持执行计划缓存。这可以让这些语句跳过优化器阶段,以提升性能。

SQL

JSON 多值索引

为 JSON 数组等创建索引 (Multi-valued Index)

  1. JSON 数据: 针对包含 JSON 数组的字段进行高效查询。例如,在一个存储用户信息的集合中,可以使用多值索引来快速查找具有特定兴趣爱好的用户。
  2. 标签和分类: 当数据记录拥有多个标签或属于多个类别时,多值索引可以帮助快速找到具有特定标签或类别组合的记录。

生成列 (GA)

生成列 (Generated Column) 是一种特殊的列,其值是根据同一表中其他列的值通过表达式计算得出的。

  • 简化查询: 生成列可以将复杂的表达式或函数封装起来,简化查询语句,提高代码可读性和可维护性。
  • 提升查询性能: 对于一些需要频繁计算的表达式,将其定义为生成列可以避免重复计算,从而提升查询性能。

支持排序规则

支持排序规则 utf8mb4_0900_ai_ci (MySQL 8.0 默认)

数据库管理

TiFlash 存算分离

存算分离:数据可以保存在 S3 对象存储,节约成本

REORGANIZE PARTITION

REORGANIZE PARTITION 语法用于修改 List 分区表或 Range 分区表:

  1. 拆分分区
  2. 合并分区
  3. 修改分区表定义

IMPORT INTO

TiDB server 集成 Lightning 功能。

IMPORT INTO 语句使用 TiDB Lightning 的物理导入模式,用于将 CSVSQLPARQUET 等格式的数据导入到 TiDB 的一张空表中。

暂停及恢复 DDL 操作

ADMIN PAUSE DDL JOBSADMIN PAUSE DDL 语句用于暂停当前正在运行的 DDL 作业

BR 断点续传

BR 断点备份:BR 备份失败后,可以跟进上次备份失败的地方继续备份。

0
0
1
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论