热门标签 | 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 性能调优专场”精彩回顾


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • kubernetes 下实现socket.io 的集群模式
    2019独角兽企业重金招聘Python工程师标准socket.io单节点模式是很容易部署的,但是往往在生产环境一个节点不能满足业务需求,况且还要保 ... [详细]
  • 对mysql的总结与反思_一次DB故障引起的反思和MySQL Operator选型
    前言在一次数据库故障后,我们发现业务库会根据业务的等级会划分多个MySQL实例,许多业务库会同时属于一个MySQL实例,当一个库引发问题后 ... [详细]
  • k8s(十一)helm安装premetheus
    1prometheus基础知识1.1prometheus简介Prometheus是一套开源的系统监控报警框架。和Kubernetes类似,它也发源于Google的Borg体系,其原 ... [详细]
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
  • Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
    本文详细介绍了如何在 Docker 中创建 CentOS 容器,并在容器中安装 MySQL 以实现本地连接。文章内容包括镜像拉取、容器创建、MySQL 安装与配置等步骤。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 解决针织难题:R语言编程技巧与常见错误分析 ... [详细]
  • 针对MySQL Undo空间满载及Oracle Undo表空间溢出的问题,本文详细探讨了其原因与解决策略。首先,通过启动SQL*Plus并以SYS用户身份登录数据库,查询当前数据库的UNDO表空间名称,确认当前状态。接着,分析导致Undo空间满载的常见原因,如长时间运行的事务、频繁的更新操作等,并提出相应的解决方案,包括调整Undo表空间大小、优化事务管理、定期清理历史数据等。最后,结合实际案例,提供具体的实施步骤和注意事项,帮助DBA有效应对这些问题。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 以下内容|尾部_quarkus实战之一:准备工作
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了quarkus实战之一:准备工作相关的知识,希望对你有一定的参考价值。欢迎访问我的GitHub ... [详细]
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社区 版权所有