多点DMALL 《提升MySQL性能可观测性实践之TopSQL》

如何获得讲师PPT:

扫码关注公众号,后台回复Q103即可获得讲师PPT哟~

还能一键订阅后续精彩活动内容~

走出故障迷局的三重奏:逃生、复盘和推演

Q&A环节答疑:

1、数据采集依赖于MySQL版本或特定的存储引擎吗?

MySQL的客户端服务器协议是通用的,基本不变,采用一问一答的形式。其网络包的组成和数据的切割方式也没有问题。另外,Blog的协议前面的字段和event的标识与存储引擎无关,MySQL本身和MySQL客户端服务器协议都兼容所有存储引擎的DBMSM,包括Rock DB等,因此没有问题。

2、TopSQL是怎么做全量SQL的分析的?

该工具通过旁路监听整个网卡的流量,能够捕获并解析网络包,从而定位到MySQL服务器发出的或接收的流量。它基于客户端服务器协议解析包,获取对应的命令和SQL文本。与直接在MySQL服务器上进行分析的内置方式相比,该工具是一种侵入性较小的旁路实现方式。MySQL本身也提供了在performance scheme中的相关统计功能,但扩展起来较为困难,且需要打开相关功能并消耗一定内存。该工具与MySQL内部的分析功能各有优缺点,最好是能将相关功能合并到MySQL内部,实现每条SQL的实时分析和统计,提供查询聚合等功能。我们的实现基于开源组件和协议解析工具。

3、(TOPSQL)性能告警阈值可以自定义?怎么设置的?

Top SQL不需要设置性能告警阈值,我们主要用MySQL进行告警。如果阈值设置得当,MySQL的告警会更少且更精确。Top SQL主要用于全面洞察SQL性能,展示业务库中各种SQL模式的出现次数、执行时间和网络流量。由于它处理的是全量数据,能提供全景图,并通过排序帮助你在各个维度发现问题。

4、topsql怎么处理查询中的动态值的?比如,由于绑定变量引起的变化

这个其实就是一个问号。问号实际上是指一种查询模式的标识符。比如,当你说 ‘select * from table where ID等于多少’ 时,这个查询模式就是相同的,我们称之为指纹。在CC的指纹提取过程中,所有的动态值都会被替换成问号。这个过程并不需要我们从零开始开发,因为有很多成熟的工具可以直接使用,比如相关开源工具。它可以将原始文本输入,并输出为参数被问号替代的指纹。 然后,我们需要处理的是’prepare’语句。通常情况下,’prepare’语句只会被执行一次,但可以被多次使用。在执行时,它会直接将变量传入,然后获取结果。对于Top SQL来说,它需要在第一次’prepare’时计算出原始SQL对应的指纹,并为其分配一个statement ID。这个ID在后续的’execute’操作中会被传递,然后再结合参数进行执行。这样,我们就能够提取到这些指纹。 在这个过程中,我们并不关心具体的动态值,因为我们的目标是基于时间、流量或次数等维度对查询进行排序,从而找出性能问题。我们更关注的是查询的模式、执行时间以及在哪个时间点上执行最慢。这些信息是我们会记录的,而具体的SQL语句内容则不是我们的关注重点。

5、老师好,请问开启TOPSQL监控对数据库性能有多大影响?

尽管我们目前使用的模式不会对现有环境造成实质影响,但Top SQL工具的SQL处理能力有限,可能导致一些网络包的丢失,使其无法全面分析MySQL的流量。为了避免对本机上的数据库进程产生任何影响,我们设计了一套机制,严格控制CPU和内存的使用。我们限制了工具的内存消耗和可存储的模式数量,对于大多数业务库来说,通常不会超过一千种模式。这些模式中,真正常用的功能对应的模式数量相对较少,且通过排名机制进行优先处理。总的来说,通过精心控制和优化,我们确保了这个工具在运行时不会对数据库进程产生任何影响。

6、回放是实时生成的吗?

指的是热力图吗?热力图是计算出来。后面查询的时候把它给聚合,然后给展现出来的。如果是指网络流量的话,网络流量我们是实时监听的,我们不存在回放的问题就是mysql这时候接受接到一个数据包或者吐出一个数据包。我们在那个时候获取到数据,然后进行分析和统计的。

7、针对不同的业务场景,怎么动态配置慢查询日志的阈值呢?

通过Top SQL提供的数据,我们可以了解到所有SQL模式的数量、平均耗时以及执行次数。拥有这些信息后,我们就可以更科学地动态配置MC的阈值。若对高频SQL设置阈值,并将所有SQL数据写入MySQL文件,可能会对磁盘IO造成较大压力,从而引发一系列问题。

8、写操作影响的行数 io大小、原始语句 ,是怎么收集到的呢 ?是在客户端sdk埋点吗?

对于写操作,MySQL协议中的一问一答机制使得我们可以解析出update和insert等协议的内容。然而,与IO相关的函数和数据收集都在我们的服务器端进行,而非客户端。这是因为客户端存在多个应用实例,若从每个客户端的SDK端收集数据,则只能获取到单个应用实例的数据。若要获取全量数据,需要将所有数据进行聚合,这在多应用实例使用数据库的情况下会面临挑战。因此,我们选择直接在MySQL服务器端进行数据收集。因为服务器接收和处理所有请求,我们可以直接解析3306端口收到的网络流量,了解发出的网络流量和对应的命令。这种原始的数据收集方式基于服务器端的网络包分析。

9、老师好,topsql有计划开源么?

我认为开源交流是有价值的。如果我要参与开源项目,我不仅会简单地提供代码,而是会针对性地维护它,管理所有的需求和问题。同时,我也会考虑投入多少资源来推进这个项目。关于Top MySQL的具体实现,如果团队成员想要深入了解,我非常愿意协助并分享我的经验。特别是在管理大规模MySQL集群和为众多研发提供服务时,如何让研发人员专注于他们的工作,而DBA能够处理更深入的问题,这是非常必要的。如果你对此感兴趣或有任何疑问,随时与我交流。至于开源计划,目前尚未有明确的计划。

本文来自投稿,不代表TakinTalks稳定性技术交流平台立场,如若转载,请联系原作者。

(0)
上一篇 2024年3月1日 下午4:26
下一篇 2024年3月13日 下午4:22

相关推荐

发表评论

邮箱地址不会被公开。