引言
随着大数据时代的到来,数据库的可扩展性、稳定性和性能成为了企业关注的焦点。跟TeleDB 集中式产品不同,TiDB 作为一款开源的分布式 NewSQL 数据库,凭借其强大的分布式能力、水平扩展性和高可用性,在业界获得了广泛的认可。TiDB 7.5 作为 TiDB 7 系列的第二个长期支持版本 (LTS),在资源管控、性能优化和稳定性提升方面做出了显著贡献。本文将深入探讨 TiDB 7.5 的资源管控原理及其用法,帮助用户更好地理解和应用这一功能。
资源管控概述
资源管控(Resource Control)是 TiDB 提供的一种资源隔离和管理机制,旨在通过定义资源组和配额来限制集群中的资源使用,从而避免不同任务之间的资源竞争,提升整体系统的稳定性和性能。TiDB 的资源管控功能提供了两层资源管理能力:在 TiDB 层的流控能力和在 TiKV 层的优先级调度能力。通过这两层控制,可以实现用户、会话、语句级别的应用资源隔离。
基本概念
在 TiDB 中,资源管控的基本单位是 Request Unit(RU),这是一个对 CPU、IO 等系统资源的统一抽象计量单位,用于表示对数据库的单个请求消耗的资源量。RU 的消耗取决于多种因素,如操作类型、检索或修改的数据量等。通过 RU,开发人员和 DBA 可以更方便地理解和管理数据库的资源使用情况。
资源组
资源组(Resource Group)是 TiDB 资源管控的核心概念,用于将不同的工作负载分配到不同的资源组中,并为每个资源组设置相应的资源配额和优先级。资源组可以基于用户、会话或语句级别进行绑定,从而实现对不同任务的资源隔离和管理。
TiDB 7.5 资源管控原理
资源管控架构
TiDB 7.5 的资源管控架构主要包括 TiDB 层和 TiKV 层。在 TiDB 层,系统会根据用户所绑定资源组设定的配额对用户的读写请求进行流控;在 TiKV 层,系统会根据配额和优先级对请求进行调度。这种双层控制机制确保了资源的高效利用和任务的优先执行。
资源动态调整
TiDB 7.5 通过实时监控和动态调整机制,确保资源管控的准确性和有效性。TiKV 会实时监测所有前台任务所消耗的 CPU 和 IO 等资源,并根据实例的总体资源上限计算出后端任务可使用的资源阈值。当后端任务被识别匹配后,资源管控会自动进行,确保在资源紧张时,后端任务能够自动降为低优先级,以保证前台任务的执行效率。
后端任务管理
自 TiDB 7.4 开始,资源管控支持后端任务管理。当一种任务被标记为后端任务时,TiKV 会动态地限制该任务的资源使用,以尽量避免此类任务在执行时对前台任务产生影响。这一功能在 TiDB 7.5 中得到了进一步增强,允许 DBA 将 Add index、Import into 等消耗资源较多的后端任务调度到指定的 TiDB 节点上执行,从而和存量 TiDB 节点上的负载进行隔离,避免对业务产生影响。
DDL 任务暂停和恢复
TiDB 7.5 引入了 DDL 任务的暂停和恢复机制,这一功能在集群升级或处理耗时较长的 DDL 任务时尤其有用。在系统升级过程中,DDL 任务会自动暂停并在升级完成后恢复执行,避免了因人为疏忽导致的数据不一致问题。对于执行耗时较长的 DDL 任务,如给大表添加索引,用户可以在业务高峰期前手动暂停该任务,并在业务低谷期恢复执行,从而有效避免对在线业务的影响。
Runaway Queries 管理
TiDB 7.2 引入了 Runaway Queries 管理功能,用于自动识别并处理消耗超出预期的查询。在 TiDB 7.3 中,这一功能得到了进一步扩展,支持手动管理 Runaway Queries 监控列表。DBA 可以为每个资源组设置查询限制(Query Limit),并配备关键参数,如查询持续时间的阈值(EXEC_ELAPSED)和当识别到 Runaway Query 时采取的动作(ACTION),如降低执行优先级或终止查询。
TiDB 7.5 资源管控用法
创建资源组
在 TiDB 中,创建资源组是资源管控的第一步。通过 SQL 语句,可以定义资源组的名称、每秒 RU 配额(RU_PER_SEC)、优先级(PRIORITY)等参数。例如:
CREATE RESOURCE GROUP IF NOT EXISTS rg1 RU_PER_SEC = 5000 PRIORITY = HIGH;
CREATE RESOURCE GROUP IF NOT EXISTS rg2 RU_PER_SEC = 3000 PRIORITY = MEDIUM;
绑定资源组
创建资源组后,需要将其绑定到用户、会话或语句级别。通过 ALTER USER 语句,可以将用户绑定到特定的资源组;在会话中使用 SET RESOURCE GROUP 语句,可以指定当前会话使用的资源组;在 SQL 语句中使用 HINT 方式,可以指定语句级别的资源组。例如:
ALTER USER 'user1'@'%' IDENTIFIED BY 'password' RESOURCE GROUP rg1;
SET RESOURCE GROUP rg2;
SELECT /*+ RESOURCE_GROUP(rg3) */ * FROM table_name;
监控和调整
在资源管控过程中,监控和调整是必不可少的环节。TiDB 提供了丰富的监控指标和工具,帮助用户了解资源使用情况。DBA 可以根据监控结果动态调整资源组的配额和优先级,以适应不同的业务负载需求。例如,当发现某个资源组的 RU 消耗量接近配额上限时,可以适时增加该资源组的配额,以避免资源争用。
应用场景
资源管控功能在多种场景下都能发挥重要作用。例如,在多个中小型应用共享同一个 TiDB 集群时,可以通过资源管控将不同应用的负载分配到不同的资源组中,确保个别应用的负载升高不会影响其他业务的正常运行。在批量任务执行时,可以将这些任务放入单独的资源组中,提升硬件利用率,降低运行成本。在存在多种业务负载时,通过资源管控可以确保关键业务的响应时间不受其他业务的影响。
结论
TiDB 7.5 在资源管控方面取得了显著进展,通过引入资源动态调整、后端任务管理、DDL 任务暂停和恢复以及 Runaway Queries 管理等功能,为数据库的稳定性和性能提升提供了有力保障。了解和掌握 TiDB 7.5 的资源管控原理及用法,对于提升数据库的管理水平和业务连续性具有重要意义。希望本文能够帮助读者更好地理解和应用 TiDB 的资源管控功能,为企业的大数据应用保驾护航。