{
    "componentChunkName": "component---src-templates-blog-blog-detail-tsx",
    "path": "/blog/performance-overview-dashboard-enable-self-service-for-tidb-performance-tuning",
    "result": {"pageContext":{"blog":{"id":"Blogs_401","title":"TiDB 可观测性 UP！UP！UP！ Performance Overview 面板开启 TiDB 性能调优自助服务时代","tags":["TiDB 性能调优"],"category":{"name":"产品技术解读"},"summary":"Performance Overview 面板在 TiDB v6.1.0 正式发布，为所有 TiDB 用户提供一个系统级别的总体性能诊断入口。本文详细介绍了 Performance Overview 面板的设计理念及应用实践。","body":"Performance Overview 面板 —— 数据库人的浪漫：原本纷繁复杂的监控数据，被化繁为简。只此青绿间，系统瓶颈，一目了然。数据库性能调优，也可以很舒心写意。\n\nPerformance Overview 面板在 TiDB v6.1.0 正式发布，为所有 TiDB 用户提供一个系统级别的总体性能诊断入口。本文详细介绍了 Performance Overview 面板的设计理念及应用实践。\n\n本文作者：**宋昱颖**，PingCAP 数据库性能测试工程师，Performance Overview 面板作者之一。有 5 年的数据库性能调优和性能诊断工具的设计开发经验，目前在 PingCAP 主要负责数据库性能测试服务化建设和数据库性能调优工作。 曾在 Oracle Real-World Performance 团队担任高级数据库性能工程师。\n\n## Highlight\nPerformance Overview 面板，为所有 TiDB 用户提供一个系统级别的总体性能诊断入口。它是 TiDB 监控 Grafana 可视化组件中的一个新增面板，在 TiDB v6.1.0 正式发布，首次在 TiDB 中引入数据库时间的调优概念和颜色优化法。\n\n作为 TiDB 的普通用户，我们终于不用在海量的监控数据中，苦苦挖掘自己想要用的性能指标了。Performance Overview 面板结合基于数据库时间分析法和颜色优化法，对 TiDB 的性能指标按照一种自上而下的性能分析方法论做了重新梳理并主要以青绿色系着色，为 TiDB 用户提供一个系统级别的总体性能诊断入口。只此青绿间，用户可以很直观地从颜色上一眼看到整个系统的性能瓶颈在哪里，只需 5分钟就能定位到问题的方向，数量级地缩短了性能诊断时间和减少了性能分析和诊断难度。数据库性能调优，也可以很舒心写意。\n\n通过 Performance Overview 面板，我们建立 TiDB 性能优化的体系，并撰写了首版 TiDB 性能优化三部曲。从原理到实际案例，优化三部曲详细地介绍了 TiDB 性能诊断的方法论和 Performance Overview 面板的使用，并随 v6.1.0 发布。\n\n![一个用户的数据库时间分解图样例，远看似青峰叠嶂，绿水隐现。\n透过此图，一眼可知系统负载为以读为主的读写混合负载。](https://img1.www.pingcap.com/prod/1_15b327779e.png)\n<center>一个用户的数据库时间分解图样例，远看似青峰叠嶂，绿水隐现。\n\n透过此图，一眼可知系统负载为以读为主的读写混合负载。</center>\n\n## 用户问题\n\n用户反馈：\n- TiDB 监控数据太多，学习门槛高。\n  - 目前 TiDB 的 Grafana 监控面板多达十几个，主要是按 TiDB 的各个组件分类和编排，可谓十分全面。众多的指标都是 PingCAP 的研发和广大社区贡献者的心血和劳动结晶，却没有被很好的利用到性能调优工作中。究其原因，主要是众指标缺乏合理的编排而用户也缺少一种可靠的、可重复的方法论，从而导致 TiDB 性调优学习门槛很高，让用户望而生畏。\n  - 用户在使用 TiDB 的过程中基本只看 Dashboard 的 QPS 面板。\n- 性能调优玄学化，缺乏可靠、可重复的方法论和配套的工具。\n- 性能诊断耗时长，难度大，对专家依赖程度高。\n\n## 解决方案\n\n通过 Performance Overview，TiDB 落地了基于数据库时间的分析方法和颜色优化法。对于普通用户的意义在于，TiDB 性能分析和优化的难度、需要消耗的人力、对专家经验的依赖数量级的下降。\n\n### 以数据库时间为基础，以颜色为标识，帮助快速定位性能瓶颈\n\n一个典型的 SQL 的处理流程如下所示，TiDB 的性能指标覆盖了绝大部分的处理路径，Performance Overview 面板对数据库时间进行不同维度的分解和上色，用户可以快速的了解负载特性和数据库内部的瓶颈。\n\n![数据库时间分解图和执行时间概览图.png](https://img1.www.pingcap.com/prod/_156cd0d236.png)\n<center>数据库时间分解图和执行时间概览图</center>\n\n如上图所示，数据库时间是所有 SQL 处理时间的总和。通过以下三个维度对数据库时间进行分解，Performance Overview 面板可以帮助你快速定位 TiDB 内部瓶颈：\n- 按 SQL 处理类型分解，判断哪种类型的 SQL 语句消耗数据库时间最多。对应的分解公式为：\n\n`DB Time = Select Time + Insert Time + Update Time + Delete Time + Commit Time + ...`\n- 按 SQL 处理的 4 个步骤（即 get_token/parse/compile/execute）分解，判断哪个步骤消耗的时间最多。对应的分解公式为：\n\n`DB Time = Get Token Time + Parse Time + Comiple Time + Execute Time`\n- 对于 execute 耗时，按照 TiDB 执行器本身的时间、TSO 等待时间、KV 请求时间和重试的执行时间，判断执行阶段的瓶颈。对应的分解公式为：\n\n`Execute Time ~= TiDB Executor Time + KV Request Time + PD TSO Wait Time + Retried execution time`\n\n#### 颜色优化法\n\n通过观察数据库时间分解图和执行时间概览图，你可以直观地区分正常或者异常的时间消耗，快速定位集群的异常瓶颈点，高效了解集群的负载特征。对于正常的时间消耗和请求类型，我们以令人舒心的青绿色系着色，即在图中显示为绿色系或蓝色系。灵感来源是北宋青绿山水画中的彪炳巨作《千里江山图》。**如果非青绿色系的颜色在这两张图中占据了明显的比例，比如出现大面积令人警醒的赤红色，意味着数据库时间的分布存在不合理，用户需要关注并及时处理。**\n\n- Database Time By SQL Type：蓝色标识代表 Select 语句，绿色标识代表 Update、Insert、Commit 等 DML 语句。红色标识代表 General 类型，包含 StmtPrepare、StmtReset、StmtFetch、StmtClose 等命令。\n- Database Time By SQL Phase：execute 执行阶段为绿色，其他三个阶段偏红色系，如果非绿色的颜色占比明显，意味着在执行阶段之外数据库消耗了过多时间，需要进一步分析根源。一个常见的场景是因为无法使用执行计划缓存，导致 compile 阶段的橙色占比明显。\n- SQL Execute Time Overview：绿色系标识代表常规的写 KV 请求（例如 Prewrite 和 Commit），蓝色系标识代表常规的读 KV 请求（例如 Cop 和 Get），其他色系标识需要注意的问题。例如，悲观锁加锁请求为红色，TSO 等待为深褐色。如果非蓝色系或者非绿色系占比明显，意味着执行阶段存在异常的瓶颈。例如，当发生严重锁冲突时，红色的悲观锁时间会占比明显；当负载中 TSO 等待的消耗时间过长时，深褐色会占比明显。\n\n![《千里江山图》](https://img1.www.pingcap.com/prod/3_b3e7fb2f74.png)\n<center>《千里江山图》</center>\n\n### 化繁为简，精选关键性能指标\n\nPerformance Overview Dashboard 按总分结构对精心挑选的 TiDB、TiKV、PD 的性能指标进行编排组织，包含了以下三部分内容：\n\n1. 总体概览：数据库时间和 SQL 执行时间概览，通过颜色优化法，快速识别数据库负载特征和性能瓶颈\n2. 资源负载：关键指标和资源利用率，包含数据库 QPS、应用和数据库的连接信息和请求命令类型、数据库内部 tso 和 kv 请求 OPS、TiDB 和 TiKV 的资源使用概况。\n3. 自上而下的延迟分解：Query 延迟和连接空闲时间对比、Query 延迟分解、execute 阶段 tso 请求和 kv 请求的延迟、TiKV 内部写延迟的分解等。\n\n### 使用示例\n\n\n#### 例子 1  \n\n**在缓存表的功能测试阶段：一眼定位负载瓶颈和找到产品改进方向**\n\n![4.png](https://img1.www.pingcap.com/prod/4_977c39aed9.png)\n\n在[缓存表](https://docs.pingcap.com/zh/tidb/dev/cached-tables)功能测试阶段，从上图可见两段负载，第一段是开启了缓存表功能的情况，第二段是关闭该功能的情况。通过对比 QPS 值，我们不难发现开启[缓存表](https://docs.pingcap.com/zh/tidb/dev/cached-tables)功能时性能还下降了。另外一眼可见第三幅图颜色异常，tso_wait 占用数据库时间过长。后来诊断发现，代码开发阶段没有做相关的优化。通过 Performance Overview 面板，我们一下可以定位产品改进的方向。\n\n#### 例子 2 \n\n**云上某客户订单系统：判断瓶颈是否在数据库内部**\n\n平均 Query Duration 为 1.69ms，事务中连接空闲时间 (Connection Idle Duration) avg-in-txn 为 18ms。说明事务中，TiDB 平均花了 1.69ms 处理完一个 SQL 语句之后，需要等待 18ms 才能收到下一条语句。用户响应时间的瓶颈不在 TiDB 中。和客户沟通后发现，系统瓶颈是客户应用和数据库分别部署在相距 700 公里的两个不同的数据中心导致的网络延迟。\n\n![Duration.jpeg](https://img1.www.pingcap.com/prod/Duration_39e35fc990.jpeg)\n\n![Connection idle duration.jpeg](https://img1.www.pingcap.com/prod/Connection_idle_duration_87168c1f1a.jpeg)\n\n#### 例子 3\n  \n**云上某客户社交平台系统：定位两个时间段性能巨大差异的根源**\n\n客户测试系统某天突然出现异常。通过对比系统正常和异常两个时间段的 SQL Execute Time Overview 面板，我们可以看到异常时间段负载中出现了超多的 Cop 请求，严重影响了正常的应用负载。进一步通过 tikv-detail 的面板，确认 Cop 请求来源于 analyze 操作。性能回退根源是业务高峰期出现了异常的统计信息收集操作。\n系统正常时间段：\n\n![Performance Overview 面板.png](https://img1.www.pingcap.com/prod/6_b535746bf9.png)\n<center>Performance Overview 面板</center>\n\n![20220630-174804.png](https://img1.www.pingcap.com/prod/20220630_174804_5133228671.png)\n<center>tikv-detail 的面板</center>\n\n系统异常时间段：  \n\n![Performance Overview 面板.png](https://img1.www.pingcap.com/prod/8_6b99b5ad3e.png)\n<center>Performance Overview 面板</center>\n\n![tikv-detail 的面板.png](https://img1.www.pingcap.com/prod/9_af9e4dbfb8.png)\n<center>tikv-detail 的面板</center>\n\n## 官方解读\n\n通过 Performance overview，我们建立 TiDB 性能优化的体系，并撰写了首版 TiDB 性能优化三部曲，随着 v6.1 发版\n\n  1. [优化概述](https://docs.pingcap.com/zh/tidb/dev/performance-tuning-overview)：本文介绍性能优化的基本概念，比如用户响应时间、吞吐和数据库时间，以及性能优化的通用流程。\n  2. [优化方法](https://docs.pingcap.com/zh/tidb/dev/performance-tuning-methods)：本文介绍了基于数据库时间的系统优化方法，以及如何利用 TiDB [Performance Overview 面板](https://docs.pingcap.com/zh/tidb/dev/grafana-performance-overview-dashboard)进行性能分析和优化。包括面板每个指标的含义，正常指标范围，导致指标异常的常见原因有哪些和常见的调优手段有哪些等。\n  3. [优化实践](https://docs.pingcap.com/zh/tidb/dev/performance-tuning-practices)：TiDB 提供了完善的性能诊断和分析功能，例如 TiDB Dashboard 的 [Top SQL](https://docs.pingcap.com/zh/tidb/dev/top-sql) 和 [Continuous Profiling](https://docs.pingcap.com/zh/tidb/dev/continuous-profiling) 功能，以及 TiDB [Performance Overview 面板](https://docs.pingcap.com/zh/tidb/dev/grafana-performance-overview-dashboard)。本文介绍如何综合利用这些功能，对同一个 OLTP 负载在七种不同运行场景下的性能表现进行分析和对比，并演示了具体的 OLTP 负载的优化过程，帮助你更快地对 TiDB 的性能进行分析和优化。\n\n## FAQ\n\n1.在哪里可以找到 Performance Overview 面板？\n\n  - 从 v6.1.0 起，TiDB Grafana 组件默认内置了 Performance Overview 面板。\n  - 如果你的 TiDB 版本低于 v6.1.0，需要手动导入 [`performance_overview.json`](https://github.com/pingcap/tidb/blob/master/metrics/grafana/performance_overview.json)。Performance overview 面板兼容 TiDB v4.x 和 v5.x 版本。导入方法如图所示：\n![10.png](https://img1.www.pingcap.com/prod/10_dad2c606f1.png)\n\n2.请问有相关的使用文档吗？\n\n- Performance Testing Team 年度诚意之作——优化三部曲  \n\n  1.  [优化概述](https://docs.pingcap.com/zh/tidb/dev/performance-tuning-overview)：本文介绍性能优化的基本概念，比如用户响应时间、吞吐和数据库时间，以及性能优化的通用流程。\n  1.  [优化方法](https://docs.pingcap.com/zh/tidb/dev/performance-tuning-methods)：本文介绍了基于数据库时间的系统优化方法，以及如何利用 TiDB  [Performance Overview 面板](https://docs.pingcap.com/zh/tidb/dev/grafana-performance-overview-dashboard)进行性能分析和优化。包括面板每个指标的含义，正常指标范围，导致指标异常的常见原因有哪些和常见的调优手段有哪些等。  \n  1.  [优化实践](https://docs.pingcap.com/zh/tidb/dev/performance-tuning-practices)：TiDB 提供了完善的性能诊断和分析功能，例如 TiDB Dashboard 的 [Top SQL](https://docs.pingcap.com/zh/tidb/dev/top-sql) 和 [Continuous Profiling](https://docs.pingcap.com/zh/tidb/dev/continuous-profiling) 功能，以及 TiDB [Performance Overview 面板](https://docs.pingcap.com/zh/tidb/dev/grafana-performance-overview-dashboard)。本文介绍如何综合利用这些功能，对同一个 OLTP 负载在七种不同运行场景下的性能表现进行分析和对比，并演示了具体的 OLTP 负载的优化过程，帮助你更快地对 TiDB 的性能进行分析和优化。\n\n- [Performance Overview 面板重要监控指标详解](https://docs.pingcap.com/zh/tidb/dev/grafana-performance-overview-dashboard)\n","date":"2022-06-30","author":"宋昱颖","fillInMethod":"writeDirectly","customUrl":"performance-overview-dashboard-enable-self-service-for-tidb-performance-tuning","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 版本来了"}}]}}},
    "staticQueryHashes": ["1327623483","1820662718","3081853212","3430003955","3649515864","4265596160","63159454"]}