热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

北京“TiDB性能调优专场”活动小组讨论结论

###如何调优系统、部署环境以及TiDB的各种参数,保障TiDB高效稳定运转?我们主要讨论了四个问题。第一是如何防止业务抖动。在我们应用的场景之下,TiKV离线或者往TiKV里加机

作者:张鱼小丸子-PingCAP

原文来源:https://tidb.net/blog/5f3dce79



话题一


如何调优系统、部署环境以及 TiDB 的各种参数,保障 TiDB 高效稳定运转?

讨论总结:

我们主要讨论了四个问题。

第一是如何防止业务抖动。在我们应用的场景之下,TiKV 离线或者往 TiKV 里加机器的时候,Leader 之间会有 Transfer 的情况,TiKV做若干动作,导致我们的业务不太平稳。我们的总结是,慢就是快。在加节点的时候,节点未 Ready 之前不要把 Leader 切过来,这是一个 high level 的方式。

第二个是部署的易用性。现在社区提供两种方式部署,第一种是用 Ansible,运维人员大都比较熟悉,但是它有个特别大的问题是多个集群不好维护。第二种方式是用 K8S。K8S 有个好处就是不用维护那么多东西。但是要使用 K8S 管理大规模集群,可能团队需要一个 K8S 工程师,而且它引入了另外一个问题:TiDB 集群本身是一个集群,上面再加一个 K8S 的话,发生故障后要定位到底是 K8S 的问题还是 TiDB 集群的问题,是一件非常麻烦的事情。所以我们认为应该有一个集中式的部署中心,在里面统一管理部署和监控的需求。

第三,我们现在发现不论是 HAProxy,还是 LVS,作为 TiDB 的一个 Proxy,它本身对于 SQL 打到哪个机器上的机制还有些欠缺。我们更希望 Proxy 能够有一个更智能的机制,通过 SQL 预判 Session 打到了哪个 Server。


话题二


线上故障定位排查

讨论结果:

我们主要分了几个重点问题,也就是通常线上出现故障,我们会从几个角度来看。



  • 最常见的是监控/Grafana,还有自己的 TiDB 和 TiKV 的报错日志,或者常见的社区里边有哪些坑,我们都可以参考来解决。

  • 像 IO 使用率高的问题,可以使用闪存卡,我们线上的业务 IO 使用率 90%,使用闪存卡降到 20%,直接解决了这个问题。

  • 还有就是升级对于业务的影响,升级对于我们的影响不大,因为我们当前上的业务不是太重要,都是我们白天找适当的时间来做,因为正常影响我们的话,Grafana 的 QPS 显示,正常它是在一千左右,升级到 TiDB 3.0.3 版本有 1 分钟降到 700 左右,这是对业务的一个影响,业务都可接受的。所以我们正常的白天升级了。

  • 还有锁冲突多的场景会频繁发生锁的问题,这是涉及悲观锁和乐观锁,会有一些参数调优,我们接触的比较少。

  • 剩下大家关注的问题,有些配置,像网卡,我们有一个静默 region,或者将网卡升级为万兆,或者可以通过扩节点,扩 TiDB 或 TiKV,来提高数量,降低 TiKV 之间的网卡消耗情况。

  • 剩下就是 CPU 与 TiKV 的实例数推荐。比如说 40 多核 CPU,我们 TiKV 可以部署两个,官方的意思大概一个 TiKV 需要 16 核 CPU,如果你是 24 核 CPU,部署一个 TiKV,这样 CPU 的消耗不会那么高;我们是单机四个 TiKV,那时候是 24 核 CPU,我们 TiKV 机器宕机的次数比较多,CPU 一直 80% 左右,后来下了两个节点,CPU 就恢复到百分之五六十了。相对好一点。

  • 还有高 QPS 这个业务,可以通过适当扩容 TiKV 来部分解决,我们业务方通过 Cache 来解决。因为 TiDB 是底层的数据库,高负载能力是有限的,可以通过 Cache 解决。

  • 剩下就是重点监控项,Grafana 中我们常关注的一些项包括机器 CPU,IO,网卡,内存使用量,实例里面 SQL 的执行时间,QPS,每个 SQL 插入的量,还有失败重试的次数也可以观察一下,从这些重点监控项来看 TiDB 的故障情况。


话题三


如何优化 SQL 和 TiDB 相关的参数设定来改善在线业务的 latency 和 throughput 表现,控制运维操作对线上性能的影响?

讨论结果:

第一步,我们首先判断问题的原因,看怎么从慢查询日志里很快判断一个 SQL 到底是慢在 TiDB 上,还是慢在 TiKV 上。

第二步,当我们判断问题大概率是出在 TiDB 上的时候,下一步我们关注执行计划对不对,关注一下这个地方的统计信息准不准。统计信息有些相关的参数,一般在 3.0 是默认打开收集参数,当前默认数据量到 50% 的时候,会自动触发收集统计信息。如果对执行计划准确度要求比较高,建议把这参数稍微调低一些。

另外,在执行计划不准确的情况下,可能统计信息没法实时收集,实在不行的时候,我们建议和业务方商量一下,强制反馈执行计划。这样的话,即使统计信息变化,这个 SQL 也是会按照我们希望的执行计划去执行的。TiDB 3.0 版本接入了 SQL plan management 的功能,也就说业务方不需要修改 SQL,也可以反馈需要的执行计划。

我们的下一个建议是,在某些特定的场景下,比如 OLAP,确实是可以适当的修改一些并行参数,能够提高 SQL 执行效率。

最后,如果实在没有办法,可以适当升级的一下自己的 TiKV 或者 TiDB 硬件配置,加大内存,比如说可以通过 hashjoin 来代替原来的 nestedloopjoin 方式,提高性能。

更多阅读:

TUG 北京区第三场线下活动“TiDB 性能调优专场”精彩回顾


推荐阅读
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • 深入探讨配置文件的管理与优化
    尽管配置文件的重要性不言而喻,但其管理和安全性问题却常被忽视。本文将详细讨论配置文件的不同管理策略及其优缺点。 ... [详细]
  • Kubernetes 实践指南:初次体验
    本文介绍了如何通过官方提供的简易示例,快速上手 Kubernetes (K8S),并深入理解其核心概念和操作流程。 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本书《.NET Core 2.* 开发者指南》是面向开发者的全面学习与实践手册,涵盖了从基础到高级的各个层面。书中详细解析了 .NET Core 的核心概念,包括如何创建 .NET Core 网站,并通过视频教程直观展示操作过程。此外,还深入探讨了 Startup 类的作用、项目目录结构的组织方式以及如何在应用中使用静态文件等内容。对于希望深入了解 .NET Core 架构和开发技巧的开发者来说,本书提供了丰富的实践案例和详尽的技术指导。 ... [详细]
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
author-avatar
快乐生活HAPPY-GO
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有