{
    "componentChunkName": "component---src-templates-blog-blog-detail-tsx",
    "path": "/blog/tidb-6.2-release",
    "result": {"pageContext":{"blog":{"id":"Blogs_415","title":"TiDB v6.2 发版","tags":["TiDB","Release"],"category":{"name":"公司动态"},"summary":"TiDB v6.2 于 8 月 23 日发布。在全新的版本中，TiDB 提供了诸多方面的提升，主要集中于：可观测性、性能、稳定性、数据生态加强以及 MySQL 兼容几个领域。","body":"![TiDB V6.2.png](https://img1.www.pingcap.com/prod/Ti_DB_V6_2_198a364daf.png)\n\nTiDB v6.2 于 8 月 23 日发布了。在全新的版本中，TiDB 提供了诸多方面的提升，它们主要集中于：**可观测性、性能、稳定性、数据生态加强以及 MySQL 兼容**几个领域。\n\n## 可观测性\n\n在新版本中，TiDB Dashboard 支持了可视化执行计划。以往 TiDB 用只能借助观察文字输出的执行计划排查问题，这对于简单的交易类 SQL 而言问题并不大，但分析型 SQL 很可能会产生庞大的执行计划信息，造成用户难以观察分析。在新版本中，TiDB Dashboard 在 Statements 和 Slow Query 中提供可视化执行计划和基础问题诊断的能力。这是一种全新的查询计划的展示方式，目标是通过图形化的手段展示 Query 查询计划的每个步骤，从而使得用户能够更加直观方便地了解查询执行计划的细节。对于复杂的大型查询语句，可视化的展示方式对于深入理解其执行过程大有裨益。\n\n![1.gif](https://img1.www.pingcap.com/prod/1_889dd1b71c.gif)\n\n在这个版本中，TiDB Dashboard 也新增的 Monitoring 页面，展示了在业务性能调优中所需的核心指标，使得用户大部分的日常运维监控需求可以在这里完成，无需在 Grafana 和 Dashboard 间跳转。\n\n![2.gif](https://img1.www.pingcap.com/prod/2_7f81a629f8.gif)\n\n除此之外，新版本中 TiDB 锁视图支持乐观事务被阻塞的信息。大量锁冲突往往会造成严重的性能问题，而锁冲突定位是这类性能问题排查的必要手段之一。TiDB v6.2.0 之前版本支持通过系统视图 `INFORMATION_SCHEMA.DATA_LOCK_WAITS` 查看锁冲突关系，但是不支持乐观事务被悲观锁阻塞的情况。TiDB v6.2.0 扩展了 `DATA_LOCK_WAITS` 视图，提供乐观事务被悲观锁阻塞情况下的冲突关系，可以帮助用户快速定位锁冲突，同时为业务改进提供依据，从而减少这类锁冲突的发生频率，提升系统整体性能。\n\n## 性能\n\n在新版本中 TiDB HTAP 性能有进一步提升。\n\n首先，TiFlash 在 6.2.0 中引入了新的存储格式 PageStore V3。该格式大幅减轻了在高并发、高负载场景下 GC 造成 CPU 占用高的问题，可以有效减少后台任务 IO 流量，提升高并发、高负载下的稳定性。6.2.0 版本默认以新版本存储格式保存数据。\n\n在计算引擎方面，TiFlash 通过实现细粒度数据交换（shuffle）使窗口函数 （Window function） 可以利用多线程并行计算，成倍降低查询响应时间，使其在典型场景下可提速 4～5 倍。而在去重计算 COUNT(DISCINT) 中，分析引擎通过降低数据倾斜优化了计算效率。\n\n除了分析场景，新版本中引入新的 DDL 并行执行框架，在不同表对象上的 DDL 可以并发执行，解决了之前不同表之间 DDL 相互阻塞的问题。同时在不同表对象的追加索引、列类型变更等场景下支持并行执行，大幅提升执行效率。\n\n除了分析场景，新版本中引入新的 DDL 并行执行框架，在不同表对象上的 DDL 可以并发执行，解决了之前不同表之间 DDL 相互阻塞的问题。同时在不同表对象的追加索引、列类型变更等场景下支持并行执行，大幅提升执行效率。\n\n## 稳定性\n\n除了性能加强，V6.2 也包含了重要的稳定性加固。\n\nTiKV 在新版本中支持自适应调整 CPU 使用率。数据库通常会使用后台进程来执行一些内部操作，通过采集各种统计信息，帮助用户定位性能问题，生成更优的执行计划，从而提升数据库的稳定性和性能。然而如何平衡后台操作和前台操作的资源开销，在不影响用户日常数据库使用的基础上如何更高效地采集信息，一直是数据库领域最为头疼的问题之一。从 v6.2.0 开始，TiDB 支持通过 TiKV 配置文件设置后台请求的 CPU 使用率, 进而限制自动统计信息收集等后台操作在 TiKV 的 CPU 使用比例，避免极端情况下后台操作抢占对用户操作的资源，确保数据库稳定高效运行。同时 TiDB 还支持 CPU 使用率自动调节的功能, 这时 TiKV 会根据实例的 CPU 占用情况, 自适应地对后台请求占用的 CPU 资源进行动态调整。该功能默认关闭。\n\n而 TiFlash 则加固了在处理大量数据的场景。在新版本中，通过减少分布式事务处理的内存放大（memory amplification），TiFlash 大幅降低了内存消耗，相较于 v6.1 之前版本最好的情况下内存使用峰值可降低 50% 以上，从而减少了大规模分析场景下不同任务内存资源冲突问题出现的可能性。\n\n## 数据生态加强\n\n在新版本中，最重要的数据生态功能是支持 Point-in-Time Recovery (PiTR)。PiTR 指的是允许用户在新集群上恢复备份集群的历史任意时刻点的快照。从技术而言，PiTR 是基于变更日志和快照数据共同进行的数据备份和恢复。该功能可以满足以下的用户需求：\n\n- 降低备份恢复在灾备场景下的 RPO，如实现十几分钟的 RPO；\n- 用于处理业务数据写错的案例，如回滚业务数据到出错事件前；\n- 业务历史数据审计，满足行业合规的需求。\n\n针对数据导入场景，TiDB Lightning 优化并减小了导入对集群带来的性能影响。TiDB Lightning 原有的物理导入模式 (backend='local') 对目标集群影响较大，例如导入过程将停止 PD 调度等，因此仅适用于目标集群初次导入数据。新版本中，TiDB Lightning 在现有基础上做了改进，导入时影响范围由集群级别降低到表级别，即非导入的表仍可进行读写操作。\n\n除此之外，BR 现在已支持恢复用户和权限数据，这使得备份恢复体验变得更平滑，用户不再需要在集群恢复之后单独处理用户和权限信息。\n\n最后，TiCDC 加入了 DDL 过滤机制。自 v6.2 起，TiCDC 支持过滤指定类型的 DDL 事件，支持基于 SQL 表达式过滤 DML 事件，从而适应更多的数据同步场景。例如在一些特殊的场景下，用户可能希望对 TiDB 增量数据变更日志进行一定规则的过滤，例如过滤 Drop Table 等高风险 DDL。\n\n## MySQL 兼容\n\n在 MySQL 兼容的道路上，TiDB 在 v6.2 加入了 SAVEPOINT 机制以及单 `ALTER TABLE` 语句增删改多个列或索引。\n\n先说说 SAVEPOINT。事务是数据库保证 ACID 特性的一系列连续操作的逻辑集合。在一些复杂业务场景下，你可能需要管理一个事务的大量操作，有时候需要在事务内实现部分操作的回退能力。SAVEPOINT 就是针对事务内部实现的可命名保存点机制，通过这个机制，你可以灵活地控制事务内的回退节点，从而实现更复杂的事务管理能力，实现更为多样的业务设计。\n\n然后是 `ALTER TABLE` 操作多列和多索引。之前版本中，TiDB 仅支持单一 DDL 变更，导致用户在迁移异构数据库时经常会遇见 DDL 操作不兼容的情况，需要耗费额外的精力将复杂的 DDL 修改成 TiDB 支持的多个简单 DDL。同时还有一些用户依赖 ORM 框架，实现 SQL 组装，最终出现了 SQL 不兼容等问题。TiDB 从 v6.2.0 开始，支持使用 `ALTER TABLE` 语句修改一个表的多个模式对象，方便了用户 SQL 实现，也提升了产品易用性。\n\n查看 TiDB 6.2.0 [Release Notes](https://docs.pingcap.com/zh/tidb/v6.2/release-6.2.0)，立即[下载试用](https://pingcap.com/zh/product-community)，开启 TiDB 6.2.0 企业级数据库之旅。\n\n","date":"2022-08-23","author":"PingCAP","fillInMethod":"writeDirectly","customUrl":"tidb-6.2-release","file":null,"relatedBlogs":[{"relatedBlog":{"body":"![TiDB 6.1.png](https://img1.www.pingcap.com/prod/Ti_DB_6_1_6eecaae325.png)\n\n我们很高兴向大家宣布，TiDB 6.1 于 6 月 13 日发布，这是 TiDB 6 系版本的第一个长期支持版（Long Term Support，简称 LTS）。\n\n<div class=\"is-flex is-flex-direction-row is-justify-content-center\">\n  <div class=\"is-flex is-flex-direction-column\">\n    <a target=\"_blank\" class=\"button is-link mx-5\"\n       href=\"https://pingcap.com/zh/product-community/\"\n       style=\"background-color: #4fc172;\">\n      下载 TiDB 社区版\n    </a>\n  </div>\n  <div class=\"is-flex is-flex-direction-column\">\n    <a target=\"_blank\" class=\"button is-link mx-5\"\n       href=\"https://pingcap.com.cn\"\n       style=\"background-color: #3a40e1;\">\n      了解 TiDB 企业版\n    </a>\n  </div>\n  <div class=\"is-flex is-flex-direction-column\">\n    <a target=\"_blank\" class=\"button is-link mx-5\"\n       href=\"https://tidbcloud.com/free-trial?utm_source=website-zh&utm_medium=referral&utm_campaign=blog-tidb-6.1-release\"\n       referrerpolicy=\"no-referrer-when-downgrade\" style=\"background-color: #3a40e1;\">\n      免费试用 TiDB Cloud\n    </a>\n    <div style=\"font-size:12px; text-align:center\">适用于中国出海企业和开发者</div>\n  </div>\n</div>\n\n## 长期支持版\n\n在两个月前发布 TiDB 6.0 版本时，我们提过在新发版流程中，我们引入了面向企业级用户的 LTS 版本的概念，与之相对的是开发里程碑版本（Development Milestone Release，简称 DMR）。引入这两种概念是为了让 TiDB 的发版节奏能兼顾快速变化的市场需求以及企业级用户对稳定性的要求。\n\n我们重新思考了发版模型，最后选择了长期支持版结合开发里程碑版的方式：我们保持 2 个月左右一次发版的节奏，以期快速应对市场节奏，但不再对所有发布进行长期维护，而是以半年左右为节奏拣选其中一个版本作为 LTS 长期支持版本。针对 LTS 版本我们提供针对问题的修复补丁而不再合并新功能。与此相对的，DMR 版本则保持快速发版的节奏，不断发布新特性，让用户所需的新需求不必等待很久（但并不提供基于 DMR 的问题修复）。对于用户而言，在没有特定需求开发的情况下，可以选择最新的 LTS 版本投产；如果需求某个 DMR 发布的新功能，则可以选择该版本进行 PoC 以及试运行，待到对应的 LTS 版本发布后升级 TiDB 到稳定生产状态。这样快慢结合的方式，可以最大限度兼顾快速迭代和稳定投产两方面的需求。\n\n对应 LTS 稳定版的主旨，6.1 版本中携带了重要的稳定性更新：\n\n1. 提升 TiKV 高压场景下的内存稳定性。\n2. 解决了由于 Raft Log 复制流量过大导致的 OOM 问题。\n3. 解决了在高压场景下宕机后重启过程中长时间持续反复 OOM 的问题。\n4. 完善了 TiDB Server 内存使用跟踪统计，加强查询内存使用配额限制。\n5. 优化了部分统计信息内存使用。\n\n另外，新版本也包含了 42 个问题修复和 20 个改进提升。\n\n## 是 LTS，也有新惊喜\n\nTiDB 6.1 除了作为第一个推荐企业级用户投产的 6 系版本，本身也携带了诸多强大的特性。\n\n### HTAP 基础能力提升\n\n在新版本中，部分分区表的实验特性 GA，且分析引擎加入了分区表和窗口函数支持。\n\n让我们先来看看分区表：我们在版本 5 中引入了 List 分区和动态裁剪特性，但一直保持实验特性状态。更重要的是，由于旧有的分区静态裁剪在 MPP 下表现欠佳，因此 TiFlash 引擎一直以来并未完整支持分区表特性。这次新发布中，我们宣布 List 分区 / 分区动态裁剪以及 MPP 模式下的分区表支持 GA。对于分区表本身在此无需过多赘述，各位可以参考官方文档，我们单独说下分析引擎下的分区表支持。\n\n对于列存引擎而言，由于并不支持类似行存的细粒度索引，仅仅依靠粗粒度索引并不能满足数据过滤需求。而分区表作为列存下最高效的数据过滤手段，是分析场景下需求优先级非常高的特性。例如在订单管理场景下，用户的数据天然可以将订单创建日期作为分区依据按天将一个月的数据分成 30 个分区，而用户的分析查询往往更高频查询最近一周甚至三五天的订单数据。在以往分析引擎不支持分区的情况下，TiDB MPP 只能进行全表扫描，这不但浪费了无谓的存储带宽，也会消耗 CPU 针对日期字段进行过滤。而在 6.1 版本中，对于上述例子，只要查询条件带有订单创建日，则可以数倍甚至数十倍提高查询效率。\n\n在 6.1 中另一个分析场景下常用的新功能是 MPP 下的窗口函数支持。在新版本中，MPP 执行器加入了对窗口函数的框架性支持，并随之推出了三个最常用窗口函数 rank，dense_rank 以及 row_number。这使得在 MPP 执行模式下，窗口函数除了内存消耗可以被分布式分担，性能也得到大幅提升。以 100G 规模数据集测试为例 ，新版本中查询使用单节点 MPP 模式进行窗口函数计算将提速 282%，使用更多节点将有更大幅度提速。与以往 MPP 模式下对内建函数的支持一样，我们将逐步增加对各类窗口函数的支持。\n\n新版本中，TiDB 引入了非事务性 DML 语句以应对大批量数据变更。新加入的非事务性 DML 将一个普通 DML 拆成多个 SQL 执行，以牺牲事务的原子性和隔离性为代价，增强批量数据处理场景下的性能和易用性。典型的，在新版本中可以使用如下语句淘汰过期数据，而无需担心事务大小限制问题：\n\n`BATCH ON id LIMIT 2 DELETE FROM orders where create_date < '2022-05-01';`\n\n上述 SQL 将会以 2 批次的方式执行 DELETE 操作，以控制单次操作的内存占用。过往版本中，TiDB 仅支持非事务性删除。\n\n### 更完整的生态对接\n\n数据库从来都不是单独被使用的，而 TiDB 也在持续改进和生态环境的对接。在新版本中，TiDB 引入了用户级别锁和 TiCDC 下的 Avro 格式向 Kafka 同步数据的支持。\n\n先说用户级别锁。用户级别锁是 MySQL 通过内置函数提供的用户命名锁管理系统。它们可以用在 SQL 语句的 SQL 函数中，比如 select，where 子句，group by 子句等位置使用。这些语句可以在不同的代码处阻塞，等待，实现用户级别锁管理。用户级别锁在 ORM 框架中也有较为广泛的应用，例如 RoR, Elixir 和 Ecto 等。TiDB 从 6.1 版本开始支持兼容 MySQL 的用户级别锁管理，支持 GET_LOCK，RELEASE_LOCK, RELEASE_ALL_LOCKS 等锁管理函数，这使得 TiDB 得以更好支持现有 ORM 框架的生态。\n\n对 TiDB 而言，TiCDC 是集群数据实时变更信息的出口，而支持常用的数据格式以方便消费者解析则是降低开发复杂度的必修课。Avro 作为一种数据序列化系统，采用了压缩二进制格式，传输效率高，数据格式丰富，已经被大量的数据分析、数据集成产品所支持。TiCDC 支持将 TiDB 数据库的增量数据转换为 Avro 格式，并发送到 Kafka 的方式，这将使得 TiDB 数据库和众多的生态系统，例如：Kafka、Snowflake、SQL Server 链接起来。在新版本中，向其他系统实时同步 TiDB 的数据变化，无论是用于实时数据集成还是变更订阅触发操作，都可以借助 Avro 格式变得更简单。更进一步，一些仰赖 Avro 格式的其他生态功能，现在也得以发挥热量，例如用户可以借助 Avro 格式通过 Kafka kSQL 对变更日志进行实时计算。\n\n## 行动起来\n\n除了上述所有新功能外，其实 TiDB 6.1 作为 6 系版本的第一个推荐企业级用户投产的 LTS 版本，是所有需求 6.0 版本特性的用户的理想选择。无论你已经在使用 6.0 版本，还是正在调研中，都推荐大家部署 6.1 版本或升级。相信新版本将为广大用户提供强大的功能和稳定的体验。\n\n查看 TiDB 6.1.0 [Release Notes](https://docs.pingcap.com/zh/tidb/stable/release-6.1.0)，立即[下载试用](https://pingcap.com/zh/product/#SelectProduct)，开启 TiDB 6.1.0 企业级云数据库之旅。\n\n\n\n\n","author":"PingCAP","category":2,"customUrl":"tidb-6.1-release","fillInMethod":"writeDirectly","id":395,"summary":"TiDB 6.1 于 6 月 13 日发布，这是 TiDB 6 系版本的第一个长期支持版（Long Term Support，简称 LTS）。","tags":["TiDB","Release"],"title":"TiDB 6.1 发版：LTS 版本来了"}},{"relatedBlog":{"body":"![TiDB 6.0.jpeg](https://img1.www.pingcap.com/prod/Ti_DB_6_0_67ed961868.jpeg)\n\n## 概览\n\n我们很高兴为大家带来 TiDB 最新版 6.0 的介绍。虽然是一个开源数据库，但 TiDB 的定位一直都是面向企业级和云的数据库，而 TiDB 6.0 也是围绕这个主题而研发的。在最新版本中，我们大幅度加强了作为企业级产品的可管理性，与此同时也加入了诸多云原生数据库所需的基础设施。\n\n对于企业级和云数据库，除了性能，可用性和功能等常规维度外，一个重要维度就是可管理性。除了提供必备的「硬」能力以完成用户的技术及业务目标，是否「好用」，是用户做选择时的重要考量，可管理性维度也会很深地影响用户实际使用数据库的隐性成本。而这点对于云数据库则更为明显，将数据库作为云服务提供，将使得可管理性的重要程度被放大：一个可运维性更好的数据库，在固定的运维和支持资源下，将为用户提供更好的服务。\n\n针对这个方向，TiDB 6.0 引入数据放置框架（Placement Rules In SQL），增加了企业级集群管理组件 TiDB Enterprise Manager ，开放了智能诊断服务 PingCAP Clinic 的预览，大幅加强了生态工具的可运维性，并针对热点问题为用户提供了更多的手段。这些努力加在一起，将使用户无论使用的是公有云服务，还是私有部署，都获得体验更平滑和近似的使用体验，让 TiDB 在成熟的企业级云数据库维度更向前迈进。\n\n除此之外，在这一年的时间内 TiDB 6.0 相较于前序版本也有了长足的进步，修复了 137 个 Issues，并融入了 77 个严苛的真实环境锤炼带来的增强。而社区一直期望的 [TiFlash 开源](https://github.com/pingcap/tiflash)也实现了，欢迎广大社区开发者一起参与。\n\n<div class=\"is-flex is-flex-direction-row is-justify-content-center\">\n  <div class=\"is-flex is-flex-direction-column\">\n    <a target=\"_blank\" class=\"button is-link mx-5\"\n       href=\"https://pingcap.com/zh/product-community/\"\n       style=\"background-color: #4fc172;\">\n      下载 TiDB 社区版\n    </a>\n  </div>\n  <div class=\"is-flex is-flex-direction-column\">\n    <a target=\"_blank\" class=\"button is-link mx-5\"\n       href=\"https://pingcap.com.cn\"\n       style=\"background-color: #3a40e1;\">\n      了解 TiDB 企业版\n    </a>\n  </div>\n  <div class=\"is-flex is-flex-direction-column\">\n    <a target=\"_blank\" class=\"button is-link mx-5\"\n       href=\"https://tidbcloud.com/free-trial?utm_source=website-zh&utm_medium=referral&utm_campaign=blog-tidb-6.0-release\"\n       referrerpolicy=\"no-referrer-when-downgrade\" style=\"background-color: #3a40e1;\">\n      免费试用 TiDB Cloud\n    </a>\n    <div style=\"font-size:12px; text-align:center\">适用于中国出海企业和开发者</div>\n  </div>\n</div>\n\n## 全面加强可管理性\n\n可管理性是数据库的一个重要能力维度：在满足业务需求的前提下，是否灵活易用，将决定了用户技术选择背后的隐性成本。这种成本可大可小，可以是一句抱怨，也可能会结合人因带来灾难性后果。在最新版本研发过程中，我们结合了客户和市场反馈，总结了当前的可管理性的问题仍存在的缺失，这包含了「复杂且不直观的集群的日常管理」、「无法控制数据的存储位置」、「数据生态套件难于使用」、「面对热点缺少解决方案」等多个维度，而 TiDB 6.0 从内核、数据生态套件、增强组件多个方面针对这些问题进行了加强。\n\n### 自主的数据调度框架\n\n让我们先从内核部分开始。\n\nTiDB 6.0 以 SQL 形式对用户暴露数据调度框架（Placement Rule In SQL）。以往，TiDB 的数据调度对于用户一直都是黑盒，TiDB 自行决定某一个数据块应该存在哪个节点，无论数据中心的物理边界和不同规格机器差异。这使得 TiDB 在多中心，冷热数据分离和大量写入所需的缓冲隔离等场景下无法提供灵活的应对。\n\n我们先看两个有趣的场景：\n\n1. 你有一个业务横跨多个城市，北京、上海和广州都设有数据中心。你希望将 TiDB 以跨中心的方式部署在这三个数据中心，分别覆盖华北、华东和华南的用户群，让不同区域的用户可以就近访问数据。在以往的版本中，用户的确可以跨中心的方式部署 TiDB 集群，但却无法如上述期望地将归属不同用户群的数据存放在不同的数据中心，只能任由 TiDB 按照热点和数据量均匀分布的逻辑将数据分散在不同中心。在高频访问的情况下，用户访问很可能会频繁跨越地域进而承受很高的延迟。\n\n2. 你希望用一组导入专用节点专门用于隔离导入数据所带来的性能抖动，而后再将导入完的数据迁回工作节点；或者你希望用一组低配节点存放冷数据，接受低频历史数据访问。暂时，还没有特别的手段支持这样的用况。\n\nTiDB 6.0 开放的数据调度框架提供了针对分区 / 表 / 库级数据在不同标签节点之间的自由放置接口，用户可以针对某张表、某个数据分区的存储位置做出自定义的选择。在新版本中，用户可以将一组节点给与标签，并为这组标签定义放置约束。例如你将所有位于纽约机房的 TiDB 存储节点定义放置策略：\n\n```\nCREATE PLACEMENT POLICY 'newyork' CONSTRAINTS = \"[+region=nyc]\";\n```\n\n然后将这个策略应用于表：\n\n```\nCREATE TABLE nyc_account (ID INT) PLACEMENT POLICY = 'newyork';\n```\n\n通过这种方式，所有 NYC_ACCOUNT 的数据将存放在纽约机房，而用户的数据访问请求也自然会被路由到本地机房。\n\n类似的，用户可以为机械磁盘节点打标签用以冷存和低频访问以节省成本，并将旧数据分区放置在低成本节点。\n\n```\nCREATE PLACEMENT POLICY storeonhdd CONSTRAINTS=\"[+disk=hdd]\";\nALTER TABLE orders PARTITION p0 PLACEMENT POLICY = 'storeonhdd'；\n```\n\n另外，该功能也可被用于多租户隔离场景。例如在同一集群中，用户可以将不同租户的数据经由放置规则分配到不同节点，而不同租户的负载也将自动由对应节点处理。这使得 TiDB 具备了租户隔离的能力，且辅以合理的权限设置，租户之间仍保有数据互访的可能。\n\n虽然是一个大型功能引入，但实际上这个框架的主体部分，已经通过 TiFlash 的行列分离能力于 4.0 版本间接发布给用户使用了，且经过了超过一年的迭代和打磨。因此，虽然是一个重大变更，但该框架却已经拥有了成熟的案例。本次发布将 Placement Rules 能力借以 SQL 的形式向用户全面开放，除了解决上述问题之外，也希望借助社区无限的想象力，发掘更多有价值的用法。\n\n### 热点场景应对\n\n分布式数据架构下，有一个恼人的话题：如何应对热点。在热点数据访问或锁冲突场景下，分布式数据库无法发挥多计算节点的性能优势，造成性能瓶颈，影响业务稳定和应用体验。TiDB 6.0 针对这类问题增加了多种解决方案。\n\n#### 小表缓存\n\n有时用户的业务同时涉及大表（例如订单）和若干小表（例如汇率表），其中大表的负载很容易通过分布式分担，但每次交易亦要访问的小表的数据却容易造成性能瓶颈。TiDB 6.0 新引入的小表缓存功能，支持显式将小的热点表缓存于内存中以大幅提高访问性能，提升吞吐，降低访问延迟，适用于高频访问低频更新的小表场景，例如配置表，汇率表等。\n\n#### 内存悲观锁\n\n通过将悲观锁事务缓存化，大幅降低悲观场景下的资源开销，CPU 和 IO 开销降低 20%左右，同时性能提升 5%-10% 左右。\n\n除了上述新增功能外，TiDB 未来还将提供基于负载的热点 region 自动分裂能力，提升热点数据的访问吞吐，解决非预期突发热点访问造成的性能问题。\n\n### 数据生态套件可管理性提升\n\n作为 TiDB 产品重要的一环，数据生态套件之于可管理性尤为重要。具体到数据迁移场景，当用户在对大规模的MySQL Sharding 系统进行迁移时，需要有很多的迁移任务、迁移规则、源端和目标端表相关的配置和管理工作。 在数据同步环境的日常管理过程中，经常需要对数据同步任务进行监控、诊断、创建、删除等管理操作。 命令行的操作在进行复杂运维操作，或者大量任务操作时，通常会效率很低，而且容易出错。由此，在新版本中，DM 推出了基于 Web 的图形管理工具，帮助用户更加方便的对整个数据迁移环境进行管理。它包含了如下功能：\n\n- Dashboard： 包含了 DM 中同步任务的主要监控信息和运行状态信息，帮助用户快速了解任务的整体运行状况，以及与延迟、性能相关的重要信息。\n- 数据迁移任务管理功能，帮助用户监控、创建、删除、配置复制任务。\n- 数据迁移上游管理功能，帮助用户管理数据迁移环境中的上游配置，包含了，新增、删除上游配置、监控上游配置对应的同步任务状态、修改上游配置等相关的管理功能。\n- 迁移任务详细信息管理功能，根据用户指定的筛选条件查看同步任务的具体配置和状态信息，包括，上下游配置信息，上下游数据库名称、表名称等。\n- 集群成员信息管理功能，帮助用户查看当前 DM 集群的配置信息和各个 worker 的状态信息。\n\n![1.png](https://img1.www.pingcap.com/prod/1_3e5c53fbc3.png)\n\n### 全新的管理平台和智能诊断套件\n\n#### TiEM 管理平台\n\n从最初版本至今，TiDB 的日常运维都是以命令行操控为主。虽然 TiDB 从 4.0 开始推出 TiUP 工具对 TiDB 集群进行安装部署和运维操作，降低了管理复杂度，然而它终究是命令行工具，学习成本较高，对相当多的企业用户而言，并不合意。除此之外，我们也经常遇到用户同时管理多个业务的多套集群，且配置和规格各不相同，任何集群变更和监控都是一个很大的挑战。一个无心的疏忽登录了错误的管理节点，应用了错误的变更，就可能带来无法挽回的损失。我们曾经遇到过仅仅因为切错命令行分页，而将生产集群当做测试集群关闭的惨况。现下诸多企业级数据库都拥有图形化管理界面，而 TiDB 6.0 中，也引入了 TiEM（TiDB Enterprise Manager）。\n\n![2.png](https://img1.www.pingcap.com/prod/2_2a7eeabc8b.png)\n\n在当前版本中，TiEM 集成了资源管理，多集群管理，参数组管理，数据的导入导出，系统监控等诸多功能。用户可以通过 TiEM 在同一界面管理多套集群，扩缩容，数据备份恢复，统一参数变更，版本升级，主备集群切换等。TiEM 还内置了监控和日志管理，让集群巡检变得轻松高效，不再需要在多套工具和监控之间不断切换。通过 TiEM 的管理平台，除了方便的统一界面进行多集群管理外，也将很大程度避免人为疏失带来的灾难，而用户也可以从繁杂易错的工作中解脱。\n\n#### PingCAP Clinic 自动诊断服务（预览版）\n\n和其他数据库系统一样，TiDB 本身存在一定的内在的复杂性，问题诊断和解决并不是非常容易的事情。而对于云环境下，服务提供商更需要面对大量不同用况的用户，对于集群的问题定位，诊断，问题解决都提出了全新的挑战。为了更好更高效地应对问题诊断，定位和修复，TiDB 必须用不同以往的方式面对。究极而言，我们希望数据库是可以智能地自调整自修复，但这却是一个非常宏大的目标。\n\n传统上，我们依赖具备专家知识的工程师 / DBA 进行分析诊断，但这些知识是否可以通过程序来提供，以方便我们的日常运维管理，甚至这些知识是否可以通过不断积累我们由不同真实案例而变得更智能更强大？作为 TiDB 迈向自服务的全新一步，我们希望对于集群运行情况的分析，风险预警和问题定位是可以作为智能服务来提供的：在 TiDB 6.0 发布的同时，新版本也引入了智能诊断服务 PingCAP Clinic 的预览版。PingCAP Clinic 从全生命周期确保集群稳定运行，预测并降低问题出现概率，快速定位并修复问题，加速问题解决效率。它集成了诊断数据采集、智能诊断、智能巡检、云诊断平台等功能，这些功能将逐步向用户开放。\n\nPingCAP Clinic 通过访问（经过用户允许）信息采集组件获取各类故障信息，在对各种问题进行排查的同时也不断增强自身的能力。PingCAP Clinic 将受益于我们面对的数千个场景迥异的用户所提供的各类集群运行数据。我们会不断将从问题中抽象出的规则固化到智能诊断中，并通过在线/离线升级的方式分发给 TiDB 用户，这使得用户在使用 TiDB 的同时也不断获得整个 TiDB 社区的积累。可以预见到的是，当 TiDB 获得更多云端客户时，PingCAP Clinic 也将更容易不断「学习」来提高自己。作为一个宏大目标的起点，我们欢迎大家的关注和讨论。关于更多 PingCAP Clinic 的信息，请阅读官方文档，并关注后续进展发布。\n\n### 面向非专家的可观测性\n\n作为可管理性的一个重要组成部分，可观测性是TiDB 一直以来都在不断加强可观测性。除了其他分布式系统都具备的基本监控和指标，从 4.0 起，TiDB 已陆续发布了诸如 Key Visualizer，SQL 统计和慢查询展示，监控关系图，持续 Profiling 等分布式数据库专有的功能，这些都是对 TiDB 的可观测性很好的补强，能帮助 DBA 和工程师更好地理解自己业务在 TiDB 上的运行情况，以更精准地定位问题和进行系统调优。但这些多多少少是专家向的特性，需要用户对系统有一定的技术理解。\n\n而从 6.0 开始，我们将引入更多的非专家向可观测性特性，让对分布式数据库和 TiDB 并不那么了解的用户也能排查系统问题。Top SQL 的推出是践行理念的第一步。\n\nTop SQL 是一个面向运维人员及应用开发者的一体化、自助的数据库性能观测和诊断功能。与现有 TiDB Dashboard 中各个面向数据库专家的诊断功能不同的是，Top SQL 完全面向非专家：你不需要观察几千张监控图表寻找相关性，也不需要理解诸如 Raft Snapshot、RocksDB、MVCC、TSO 等 TiDB 内部机制，仅需要知道常见数据库概念，如索引、锁冲突、执行计划等，即可开始使用它来快速分析数据库负载情况，并提升应用程序的性能。Top SQL 以用户自助使用、判断分析的方式，与 PingCAP Clinic 自动化规则一起，共同为用户提供从常见到复杂罕见的不同性能场景的覆盖方案。\n\nTop SQL 无需额外配置，在 TiDB 6.0 版本中开箱即用，集成于 TiDB Dashboard 图形化界面，且不影响数据库现有应用程序性能。当前版本 Top SQL 率先提供各个节点 30 天的 CPU 负载情况，你可以直观了解各节点的高 CPU 负载是来自于哪些 SQL 语句，从而快速分析诸如数据库热点、突发的负载升高等场景。在未来版本中我们还将持续迭代改进 Top SQL，重组整合流量可视化、慢查询、锁视图等现有的专家功能到 Top SQL 中，以一体化的、面向非专家的功能形式，帮助运维人员及应用开发者更简单、更全面地分析数据库性能问题。\n\n![3.png](https://img1.www.pingcap.com/prod/3_173646c19e.png)\n\n## 更成熟的 HTAP 能力\n\nTiDB 5.0 是其分析引擎架构初步成型的版本，这个版本中我们引入了 MPP 执行模式，从而得以服务于更广的用户场景。这一年来 TiDB HTAP 也经受了严苛的考验，无论是双十一场景下数十万 TPS 写入合并数十张实时报表中高频刷新，交易分析混合下优化器自动路由完成的高并发数据服务，这些用例都成为 TiDB HTAP 不断成熟的依托。相较 TiDB 5.0，最新版本中分析引擎 TiFlash 拥有了：\n\n- 更多算子和函数支持：相较 5.0，TiDB 分析引擎新增加了 110 多个常用内建函数以及若干表关联算子。这将使得更多计算能享受 TiDB 分析引擎的加速带来的数量级性能提升。\n- 更优的线程模型：在 MPP 模式下，以往 TiDB 对于线程资源是相对无节制的。这样实现的后果是，当系统需要处理较高并发的短查询时，由于过多的线程创建和销毁带来的开销，系统无法将 CPU 资源用满，从而带来大量资源浪费。另外，当进行复杂计算的时候，MPP 引擎也会占用过多线程，带来性能和稳定性的双重问题。针对这个问题，最新版中引入了全新的弹性线程池，并对算子持有线程的方式进行了较大重构，这使得 TiDB MPP 模式下的资源占用更为合理，在短查询下达到同等计算资源倍增的计算性能，且在高压力查询时稳定性更佳。\n- 更高效的列存引擎：通过调整存储引擎底层文件结构和 IO 模型，优化了访问不同节点上副本和文件区块的计划，优化了写放大以及普遍的代码效率。经客户实景验证，在极高读写混合负载下提升超过 50%～100% 以上并发能力，同等负载下大幅度降低 CPU / 内存资源使用率。\n\n## 强化的容灾能力\n\n除了可管理性之外，作为数据容灾的关键组件，TiCDC 也迎来了核心能力增强：通过对整个处理增量数据处理过程的优化、控制拉取事务日志速度等方式，TiCDC 在大规模集群数据容灾方面的能力有了长足的进步。\n\nTiCDC 对于增量数据的提取、排序、加载、投递等多个处理流程都进行了优化，降低在处理每一张表的增量数据时所需要使用的 CPU、内存量、减少进程间的通信次数。 这极大地提升了 TiCDC 在大规模集群下同步数据的稳定性、并降低了资源消耗和数据延迟。 真实用户场景测试显示， 6.0 版本的 TiCDC 可以在上游集群的规模达到 100K 张表、集群每秒钟数据改变行数低于 20 K/s、数据改变量低于 20 MB/s 的情况下，确保 99.9% 的数据延迟时间低于 10 秒钟， RTO < 5 分钟，RPO < 10 分钟。就整体而言，在上游集群 TiDB 集群节点进行计划内升级或者停机的场景中，可以将延迟控制在 1 分钟之内。\n\n另外，为了降低数据复制过程中对上游集群的性能影响，保证数据复制过程中业务无感知， TiCDC 增加了对于主集群事务日志扫描的限流功能。在绝大多数情况下，确保TiCDC 对于上游集群的 QPS、 SQL 语句平均响应时间的影响不超过 5%。\n\n## 面向企业级版本的锚定\n\n随着对版本发布的节奏把控不断成熟，随着 TiDB 6.0 发布，针对企业级用户的稳定性要求，我们也再次进行发版模型调整。从 6.0 版本开始，在 2 个月为周期内的版本迭代基础上，TiDB 发版策略将引入半年为发布周期的 LTS（Long Term Support）版本，同时为用户提供只包含修复的长期稳定版和快速迭代版以兼顾不同倾向的版本需求。其中 LTS 版本面向不需求最新功能，但希望不断收到问题修复的用户，生命周期为 2 年；而非 LTS 版本则拥有更高的迭代速度，只维护 2 个月，面向对最新功能有需求且稳定性需求不高的非生产场合。规划中的 TiDB 6.1 将作为第一个 LTS 版本发布。\n\n## 展望\n\n由于云数据库并不强调版本，因此在前文中我们没有对 [TiDB Cloud](https://tidbcloud.com/free-trial) 进行过多赘述。但是可以看到，6.0 版本不但是 TiDB 迈向企业级 HTAP 数据库的又一个全新版本，也是 TiDB 向云数据库进发的新起点。诸如可管理性主题，数据放置框架，Clinic 自动诊断兼顾了私有部署的使用，但实际上它们都将在云端形态下拥有更大的潜力。  \n\n云原生数据库是一个很有趣的话题。我们对云数据库的认识随着持续的摸索在不断提升中，从在云上可运行的数据库，到借助云基础设施实现的数据库，再到在云上可自运维数据库，6.0 版本是我们践行这个理念的重要一步。试想，结合良好的可管理性，当云数据库服务为成千上万用户提供支持的同时，也可以采集到远超于现在的非敏感的集群运行数据，这些数据将作为数据库自运维自服务的基础信息，不断学习不断进化，在用户体验提升的前提下也解放服务后端团队更多的资源，集中精力更好地提供用户所需的产品，这将带来私有部署形态无法替代的优势。  \n\n而在后续的版本规划中，我们将尝试通过借助云存储服务和资源按需启停等技术，为用户提供超越以往形态的使用体验。借助开源的力量，让用户觉得云服务相比免费使用私有部署更值得，转化为我们新的推力，是我们和整个整个社区双赢的共同目标。\n\n查看 TiDB 6.0.0 [Release Notes](https://docs.pingcap.com/zh/tidb/v6.0/release-6.0.0-dmr)，立即[下载试用](https://pingcap.com/zh/product/#SelectProduct)，开启 TiDB 6.0.0 企业级云数据库之旅。\n\n\n","author":"PingCAP","category":3,"customUrl":"tidb-6.0-release","fillInMethod":"writeDirectly","id":371,"summary":"2022 年 4 月 7 日，TiDB 6.0 发版。在该版本中，我们大幅度加强了作为企业级产品的可管理性，与此同时也加入了诸多云原生数据库所需的基础设施，让 TiDB 在成熟的企业级云数据库维度更向前迈进。","tags":["TiDB","Release"],"title":"TiDB 6.0 发版：向企业级云数据库迈进"}},{"relatedBlog":{"body":"> TiDB 有一些功能和其它功能不一样，这类功能可以作为构建其它功能的基础，组合出新的特性，这类功能称之为：Meta Feature。\n> <p align=\"right\">《关于基础软件产品价值的思考方式》 - 黄东旭</p>\n\n\n\n对一款分布式数据库而言，数据如何分散存储在不同节点永远是个有趣的话题。你是否有时会期望能具体控制数据具体存储在哪些节点？\n\n- 当你在同一个 TiDB 集群上支持多套业务以降低成本，但又担心混合存储后业务压力互相干扰\n\n- 当你希望增加重要数据的副本数，提升关键业务的可用性和数据可靠性\n\n- 当你希望把热点数据的 leader 放到高性能的 TiKV 实例上，提升 OLTP 性能\n\n- 当你希望实现热冷数据分离（热数据存放在高性能介质，冷数据反之），降低存储成本\n\n- 当你希望在多中心部署下，将数据按照实际地域归属和数据中心位置来存放，以减少远距离访问和传输\n\n你也许已经知道，TiDB 使用 Placement Driver 组件来控制副本的调度，它拥有基于热点，存储容量等多种调度策略。但这些逻辑以往对于用户都是近似不可控的存在，你无法控制数据具体如何放置。而这种控制能力就是 TiDB 6.0 的 Placement Rules in SQL 数据放置框架希望赋予用户的。\n\nTiDB 6.0 版本正式提供了基于 SQL 接口的数据放置框架（Placement Rules in SQL）。它支持针对任意数据提供副本数、角色类型、放置位置等维度的灵活调度管理能力，这使得在多业务共享集群、跨 AZ 部署等场景下，TiDB 得以提供更灵活的数据管理能力，满足多样的业务诉求。\n\n让我们来看几个具体的例子。\n\n## 跨地域部署降低延迟\n\n想象下你是一个服务供应商，业务遍布全球，早期架构为中心化设计，随着业务跨地域开展后，业务拆分全球化部署，中心数据访问延迟高，跨地域流量成本高。随着业务演进，你着手推动数据跨地域部署，以贴近本地业务。你的数据架构有两种形式，本地管理的区域数据和全局访问的全局配置数据。本地数据更新频次高，数据量大，但是几乎没有跨地域访问的情况。全局配置数据，数据量少，更新频率低，但是全局唯一，需要支持任意地区的访问，传统的单机数据库或单地区部署数据库无法满足以上业务诉求。\n\n以下图为例，用户将 TiDB 以跨中心的方式部署在三个数据中心，分别覆盖华北，华东和华南的用户群，让不同区域的用户可以就近访问本地数据。在以往的版本中，用户的确可以将以跨中心的方式部署 TiDB 集群，但无法将归属不同用户群的数据存放在不同的数据中心，只能按照热点和数据量均匀分布的逻辑将数据分散在不同中心。在高频访问的情况下，用户访问很可能会频繁跨越地域承受较高的延迟。\n\n![1.jpg](https://img1.www.pingcap.com/prod/1_9faf413613.jpg)\n\n\n通过 Placement Rules In SQL 能力，你设置放置策略将区域数据的所有副本指定到特定区域的特定机房内，所有的数据存储，管理在本地区内完成，减少了数据跨地区复制延迟，降低流量成本。你需要做的仅仅是，为不同数据中心的节点打上标签，并创建对应的放置规则：\n\n```SQL\nCREATE PLACEMENT POLICY 'east_cn' CONSTRAINTS = \"[+region=east_cn]\";\nCREATE PLACEMENT POLICY 'north_cn' CONSTRAINTS = \"[+region=north_cn]\";\n```\n\n并通过 SQL 语句控制数据的放置，这里以不同城市分区为例：\n\n```SQL\nALTER TABLE orders PARTITION p_hangzhou PLACEMENT POLICY = 'east_cn'；\nALTER TABLE orders PARTITION p_beijing PLACEMENT POLICY = 'north_cn'；\n```\n\n这样，归属不同城市的订单数据副本将会被「固定」在对应的数据中心。\n\n## 业务隔离\n\n假设你负责大型互联网企业的数据平台，内部业务有 2000 多种，相关业务采用一套或多套 MySQL 来管理，但是因为业务数量太多，MySQL 实例数接近 1000 个，日常的监控、诊断、版本升级、安全防护等工作对运维团队造成了巨大的压力，且随着业务规模越来越大，运维成本逐年上升。你希望通过减少数据库实例数量来减少运维管理成本，但是业务间的数据隔离、访问安全、数据调度的灵活性和管理成本成为你面临的严峻挑战。\n\n借助 TiDB 6.0，通过数据放置规则的配置，你可以很容易灵活的集群共享规则，例如业务 A，B 共享资源，降低存储和管理成本，而业务 C 和 D 独占资源，提供最高的隔离性。由于多个业务共享一套 TiDB 集群，升级、打补丁、备份计划、扩缩容等日常运维管理频率可以大幅缩减，降低管理负担提升效率。\n\n![2.jpg](https://img1.www.pingcap.com/prod/2_4424b9bfd4.jpg)\n\n\n\n```SQL\nCREATE PLACEMENT POLICY 'shared_nodes' CONSTRAINTS = \"[+region=shared_nodes]\";\nCREATE PLACEMENT POLICY 'business_c' CONSTRAINTS = \"[+region=business_c]\";\nCREATE PLACEMENT POLICY 'business_d' CONSTRAINTS = \"[+region=business_d]\";\n\nALTER DATABASE a POLICY=shared_nodes;\nALTER DATABASE b POLICY=shared_nodes;\nALTER DATABASE c POLICY=business_c;\nALTER DATABASE d POLICY=business_d;\n```\n\n基于 SQL 接口的数据放置规则，你仅仅使用少数 TiDB 集群管理大量的 MySQL 实例，不同业务的数据放置到不同的 DB，并通过放置规则管理将不同 DB 下的数据调度到不同的硬件节点上，实现业务间数据的物理资源隔离，避免因资源争抢，硬件故障等问题造成的相互干扰。通过账号权限管理避免跨业务数据访问，提升数据质量和数据安全。在这种部署方式下，集群数量大大减小，原本的升级，监控告警设置等日常运维工作将大幅缩减，在资源隔离和性价比上达到平衡，大幅减少日常的 DBA 运维管理成本。\n\n## 主从多机房 + 低延迟读取\n\n现在你是一个互联网架构师，希望通过 TiDB 构建本地多数据中心架构。通过数据放置规则管理，你得以将 Follower 副本调度到备中心，实现同城高可用。\n\n```SQL\nCREATE PLACEMENT POLICY eastnwest PRIMARY_REGION=\"us-east-1\" REGIONS=\"us-east-1,us-east-2,us-west-1\" SCHEDULE=\"MAJORITY_IN_PRIMARY\" FOLLOWERS=4;\nCREATE TABLE orders (order_id BIGINT PRIMARY KEY, cust_id BIGINT, prod_id BIGINT) PLACEMENT POLICY=eastnwest;\n```\n\n与此同时，你让对于一致性和新鲜度不高的历史查询通过基于时间戳的方式读取（[Stale Read](https://docs.pingcap.com/tidb/stable/as-of-timestamp)），这样避免了跨中心数据同步造成的访问延迟，同时也提高对从机房的硬件利用率。\n\n```SQL\nSELECT * FROM orders WHERE order_id = 14325 AS OF TIMESTAMP '2022-03-01 16:45:26';\n```\n\n## 总结\n\nTiDB 6.0 的 Placement Rules In SQL 是一个很有趣的功能：它暴露了以往用户无法控制的内部调度能力，并提供了方便的 SQL 接口。你可以通过它对分区 / 表 / 库不同级别的数据进行基于标签的自由放置，这开启了诸多以往不可能实现的场景。除了上述可能性，我们也期望和你一起探索更多有趣的应用。\n\n> 查看 TiDB 6.0.0 [Release Notes](https://docs.pingcap.com/zh/tidb/v6.0/release-6.0.0-dmr) ，立即[下载试用](https://pingcap.com/zh/product/#SelectProduct)，开启 TiDB 6.0.0 企业级云数据库之旅。\n\n","author":"PingCAP","category":1,"customUrl":"what-are-placement-rules-in-sql","fillInMethod":"writeDirectly","id":376,"summary":"TiDB 有一些功能和其它功能不一样，这类功能可以作为构建其它功能的基础，组合出新的特性，这类功能称之为：Meta Feature。","tags":["TiDB"],"title":"TiDB 6.0 的元功能：Placement Rules in SQL 是什么？"}}]}}},
    "staticQueryHashes": ["1327623483","1820662718","3081853212","3430003955","3649515864","4265596160","63159454"]}