华体会体育
Mou Mou Jidian Generator
发电机维修 发电机回收
发电机出售 发电机租赁
客户统一服务热线

036-28266239
18616871546

4静音发电机
您的位置: 主页 > 产品中心 > 静音发电机 >
MySQL性能诊断实践之系统观察工具-爱可生

MySQL性能诊断实践之系统观察工具-爱可生

本文摘要:摘要:今天我带来的分享是系统观察工具,有所关联但不涉及MySQL自身的这样一个话题。

华体会体育

摘要:今天我带来的分享是系统观察工具,有所关联但不涉及MySQL自身的这样一个话题。分享纲领:1. MySQL 慢的诊断思路2. 系统观察工具先容3. bcc (eBPF剧本集) 使用举例4. eBPF 使用方法/限制今天我带来的分享是系统观察工具,跟MySQL相关,但不是MySQL,选择这个话题最主要的原因是今天4场演讲,适才是官方的专家来先容MySQL的新特性,后面另有两位专家,一位是先容MySQL在真实业务中的大规模应用,另有一位是先容源码,留给我的空间并不是许多,所以选择了一个跟MySQL有所关联但不涉及MySQL自身的话题。

首先想请问一下大家,如果遇到MySQL慢的话大家的第一印象是什么,MySQL数据库如果性能不行的情况下,大家的处置惩罚手法是怎样?我咨询了一些同行, 获得了以下反馈,第一反映是再试一次,第二个反映是优化一下SQL,第三个反映是我们调大buffer pool,然后开始换硬件了,换一下SSD,然后实在不行了我们找个搜索引擎问一下说“MySQL慢怎么办”。如果大家用的是海内的搜索引擎的话,搜索引擎会推荐某某知道或者某某乎, 推荐一些MySQL调优履历, 调大参数A, 调低参数, 诸如此类,类似的网站能告诉你MySQL慢怎么办。我们来分析一下这些现象背后隐藏的意义:如果大家再试一次能够乐成的话, 意味着你可能遇到了不行复现的外界因素的影响,导致MySQL会慢。

如果优化SQL能解决,就意味着SQL的执行庞大度远远大于它的需求庞大度。如果调大buffer pool能解决,就意味着MySQL遇到了自身的某些限制。

如果换SSD能解决,那么意味着服务器资源受到了一定的限制。如果需要搜索引擎,意味着调优这事已经酿成了玄学。所以今天我想向大家先容的是四部门内容:1.MySQL 慢的诊断思2.系统观察工具先容3.bcc (eBPF剧本集) 使用举例4.eBPF 使用方法/限制第一部门,我们向大家先容一下通例的MySQL诊断慢的思路,也是业界的通例思路。第二部门,是今天先容的主要命题 -- 系统观察工具的相关内容,我们会或许相识一下什么叫系统观察工具。

第三部门,给大家先容一个剧本集,这个剧本集是开源的,开箱即用而且可以资助大家快速诊断MySQL的一些问题,我们直接使用10个例子 快速地先容一下这个剧本集能为我们做到什么。最后,我们先容一下eBPF的使用方法和剧本结构。任何一个好用的工具一定有它自己的限制,否则它就太完美了,所以我们也会先容一下它的限制到底是怎样的。

1.MySQL 慢的诊断思路我们先来看第一个阶段,MySQL慢的诊断思路,一般我们会从三个偏向来做:第一个偏向是MySQL内部的观察第二个偏向是外部资源的观察第三个偏向是外部需求的革新1.1 MySQL 内部观察我们来看MySQL内部的观察,常用的观察手段是这样的,从上往下看,第一部门是Processlist,看一下哪个SQL压力不太正常,第二步是explain,解释一下它的执行计划,第三步我们要做Profilling,如果这个SQL能再执行一次的话, 就做一个Profilling,然后高级的DBA会直接动用performance_schema ,MySQL 5.7 以后直接动用sys_schema,sys_schema是一个视图,内里有便捷的各种信息,资助大家来诊断性能。再高级一点,我们会动用innodb_metrics举行一个对引擎的诊断。除了这些手段以外,大家还提出了一些七零八落的手段,我就不列在这了,这些是通例的一个MySQL的内部的状态观察的思路。

除了这些以外,MySQL还陆陆续续提供了一些袒露自己状态的方案,可是这些方案并没有在实践中形成套路,原因是学习成本比力高。1.2 外部资源观察外部资源观察这部门,我引用了一篇文章,这篇文章的二维码我贴在上面了。这篇文章是外洋的一个神写的,标题是:60秒的快速巡检,我们来看一下它在60秒之内对服务器到底做了一个什么样的巡检。

一共十条下令,这是前五条,我们一条一条来看。1.uptime,uptime告诉我们这个机械活了多久,以及它的平均的负载是几多。2.dmesg -T | tail,告诉我们系统日志里边有没有什么报错。

3.vmstat 1,告诉我们虚拟内存的状态,页的换进换出有没有问题,swap有没有使用。4. mpstat -P ALL,告诉我们CPU压力在各个核上是不是匀称的。

5.pidstat 1,告诉我们各个历程的对资源的占用或许是什么样子。我们来看一下后五条:首先是iostat-xz 1,检察IO的问题,然后是free-m内存使用率,之后两个sar,按设备网卡设备的维度,看一下网络的消耗状态,以及总体看TCP的使用率和错误率是几多。

最后一条下令top,看一下或许的历程和线程的问题。这个就是对于外部资源的诊断,这十条下令展现了应该去诊断哪些外部资源。1.3 外部需求革新第三个诊断思路是外部的需求革新,我在这里引用了一篇文档,这篇文档是MySQL的官方文档中的一章,这一章叫Examples of Common Queries,文档中先容了通例的SQL怎么写, 给出了一些例子。文章的链接二维码在slide上。

我们来看一下它其中提到的一个例子。它做的事情是从一个内外边去选取,这张表有三列,article、dealer、price,选取每个作者的最贵的商品列在效果集中,这是它的最原始的SQL,很是切合业务的写法,可是它是个关联子查询。关联子查询成本是很贵的,所以上面的文档会教你快速地把它转成一个非关联子查询,大家可以看到中间的子查询和外边的查询之间是没有关联性的。

第三步,会教大家直接把子查询拿掉,然后转成这样一个SQL,这个就叫业务革新,前后三个SQL的成本都纷歧样,把关联子查询拆掉的成本,拆掉以后SQL会跑得很是好,但这个SQL已经不能良好表义了,只有在诊断到SQL成本比力高的情况下才建议大家使用这种方式。为什么它能够把一个关联子查询拆掉呢?这背后的原理是关系代数,所有的SQL都可以被表告竣等价的关系代数式,关系代数式之间有等价关系,这个等价关系通过变换可以把关联子查询拆掉。上面的这篇文档是一个大学的课本,它重新教了关于代数和SQL之间的关系。然后一步步推导怎么去简化这句SQL。

第一,MySQL自己提供了许多下令来视察MySQL自身的各种状态,大家从上往下检一般能检到SQL的问题或者服务器的问题。第二,从服务器的角度,我们从巡检的剧本角度入手,服务器的资源就这几种,观察手法也就那么几种,我们把服务器的资源全部都视察一圈就可以了。第三,如果实在搞不定,需求方一定要根据数据库容易接受的方式去写SQL,这个成本会下降的很是快,这个是通例的MySQL慢的诊断思路。2.系统观察工具先容我们先从诊断思路的讨论切换到系统的观察工具,首先相识什么叫系统观察工具而且看一下它的举例,然后再回到诊断思路上,看看新的工具的引入能为我们的思路到底带来怎样的改变。

先来看一下什么叫系统观察工具?援引这篇文档,二微码如上,这是一个外国人写的文档,我把这个文档拆开,中间形貌了三件事情:第一,系统观察工具的数据源来自于那里;第二,数据收罗历程,因为收罗的是系统的运行状况,所以到底如何收罗这是一个难点;第三,应该怎么看数据,是用图来看,还是用表来看,它就叫数据处置惩罚前端;第一步,我们来看一下数据源,Linux给我们提供的数据源是这几种,包罗操作系统内核态提供的观察点和用户态提供的观察点,MySQL很早之前就提供了用户态的观察点。第二步,怎么把数据抽出来,抽出来的时候,大家可以看到这些工具里边大家最熟悉的应该是perf和ftrace,然后sysdig也有人在用,其它的可能有所耳闻,这个是从操作系统里边抽取数据的方法。第三步,数据处置惩罚前端,前端里边常用的也是perf和ftrace。如果大家对perf很熟悉的话会知道perf出来的数据是一个树形的数据,并可以跟这棵树举行交互,好比说: 检察某个函数运行了多久,哪一个函数的时间最长,这个是数据处置惩罚前端。

我们来对比一下通例的四类系统观察工具今天我要先容的是第三类,eBPF,我们过往常用的是第四个,前面这两个是通用工具,我们来对比一下这四个到底有什么差别,看看Linux到底为啥提供这么多观察工具。第一,来看一下ftrace,ftrace是一个sysfs中的一个桩,通过这个桩内核提供了一种观察的形式,这种观察的形式就是把想观察的函数的签名打到这个桩里,然后操作系统就会提供这个函数运行的状况。ftrace的结构如左图, 数据处置惩罚前端和收罗端是ftrace, 数据源是下面这一堆。

第二,大家常用的perf,原理是操作系统提供了一个系统挪用可以将数据写到一个缓存中, 然后客户端把这些数据端抽取出来然后出现在显示器上。这个是perf的运行原理。

第三,eBPF是我们今天要重点先容的,eBPF的方案,跟适才两种方案纷歧样,适才两种方案一种是操作系统提供的文件系统上的桩,一种是操作系统提供的系统挪用,而eBPF是将一段代码直接插到操作系统内核某一个位置上的机制。第四,Systemtap的原理是将一段C的代码编译成了一个内核的模块,然后将这个模块嵌到内核里边去,它不是由内核提供的一个机制,而是由内核的模块机制提供的一种功效。

这是四种观察工具的差别。为什么要先容这四种观察工具的差别,是因为大家在选取观察工具的时候就知道或许怎么选。这四种观察工具里边对系统伤害最轻的是谁?对系统伤害最轻的是系统挪用,这是系统答应出来的服务。

然后是ftrace,这是系统在文件系统层面提供的一个口,告诉你可以通过这个口跟系统交互。对系统侵入性最强的是谁?对系统侵入性最强的应该是eBPF,因为它直接将一根代码嵌入到系统里边去做,最不稳定的应该是System Tap,因为它是系统的一个模块, 又提供了很是庞大的功效。这张图是eBPF的架构图,eBPF先将一段法式编译成二进制代码,然后插到操作系统里边去,操作系统运行这段代码的时候,将收罗到的数据吐到操作系统自己的一个空间里,然后再做统一返回,或许就是这样的一个结构。

eBPF这个结构,最焦点的部门在于把代码插入到操作系统中运行,它需要做种种宁静掩护才气完成这一点,所以这也是这个机制庞大的地方。3. bcc (eBPF剧本集) 使用举例我们引用了一个开源的eBPF剧本集bcc, 快速看一下eBPF能做什么, 这些功效都是开箱即用。第一个例子,MySQL的请求延迟分析,一个MySQL负担了许多业务,上千个并发在那儿,哪一个SQL最慢,到底有哪些SQL在一秒以上,除了slow log以外,还可以用这种方法来看。这个下令的效果分为三列,它的第一列是请求的延迟,指数级递增,单元是微秒,中间一列是它的掷中数,如果有一个请求掷中了64-127微秒这个区间,掷中数会加一,最后一列是它的漫衍图,它在同一个陈诉里提供了数值的方式和图的方式,大家很容易看到效果。

对于这台服务器来说,我下了一个select的性能压力,它大部门的请求集中于64到127微秒之间。这个数据库的性能可能还不错。

我们再来看另外一种压力,我下了一个select+insert的混淆压力在一个数据库里,它的图又变了,它出现了一个很是好的双峰图,我将两个峰值用另外一种颜色标明,这两个峰值的意思是很有可能有混淆压力在一个数据库里,或者是上面的这部门压力是掷中了某些缓存,而下面的某些压力是由于没有掷中缓存,导致这部门请求更慢一些, 形成另一个峰值,所以大家通过这种峰值分析可以看到数据库或许的一个运行状态。如果能做得更好,大家可以抽检自己的数据库然后做环比图,好比说今天和昨天同样的时间,同样的业务压力下对数据库的延迟举行分析,如果数据库的延迟峰一直在往后延,就意味着数据库的状态在变得更糟糕一些。这是bcc第一个能做的事情,需要再次强调的是它开箱即用直接下载过来就可以使用。

第二个例子,MySQL的慢查询,MySQL自己提供很好的慢查询,我干嘛要用另外一个机制来获取MySQL的慢查询呢?我们先看一下它的输出,其实跟MySQL自己的慢查询还要再简朴一些。那么我们为什么要用另外一种方式来获取慢查询呢?因为它能做到这些事情,而MySQL的慢查询可能很难做,与MySQL的慢日志相比, 它可以低成当地完成:1. 获取少量慢查询2. 获取某种模式的慢查询3. 获取某个用户的慢查询好比说获取少量的慢查询,为什么是少量呢?因为我们不确定现在的线上延迟是几多,慢查询只开一秒可能日志瞬间就被堆上去,性能就会下来,可是如果慢查询开个十秒左右,没有请求在这个区间掷中,所以要一点一点的去调这个值,好比说线上1%的最慢的查询能够掷中,可是在这个剧本内里,可以取一定区间的最大的几个查询把它拎出来。

通过剧本还可以掷中某种模式的慢查询, 好比说我们只体贴update的慢查询, 那么获取select的效果就没有太大的意义,或者是我一定要获取某一些特定表的相关的查询,我都可以通过剧本来做。第三种情况我想获取某个用户的慢查询,这个一般对于多租户系统,因为多租户系统我只想针对某一个用户举行慢查询分析的时候,这种剧本就比力好用,这是我想说的第二个例子。

之后的几个例子都跟IO相关,所以我引用了另外一篇文档,这篇文档是Linux IO的客栈图,右边是引用的二维码,这张客栈图看起来很庞大,但这个其实是2012年画的第一版的IO客栈图,现在IO客栈图比这个要庞大许多,大家可以在这个网址上去体验一下。然后我们把其中的关键元素抽出来,我们看一下IO的客栈或许是几个条理?从MySQL开始,MySQL是运行在用户态中,它通过VFS层的接口,一个IO请求就下到内核态,然后从VFS转到真正的文件系统,之后IO请求会下到块设备层,在块设备层里边会履历IO的一个调理器,大家常见的MySQL的调优建议内里, 对于调理器的设置要么设成空要么设成deadline, 就是在这个位置起作用,最后通过SCSI接口, 将数据请求下到物理设备。第三个例子,VFS延迟分析,我们对每一层都可以通过剧本对它举行IO分析,好比说我可以对VFS做延迟分析。

对VFS做延迟分析,这是对数据库举行了一个写压力,大家可以显着看到一个双峰图,这是写的两个峰,是数据库对于内核的写压力的反馈。这个意味着什么呢?这个可能意味着因为这部门的写是掷中了操作系统文件系统的缓存,而下面这部门写是真正的写穿到设备的,所以他们俩的延迟纷歧样,这是一个典型的双峰图,大家需要把两个峰拆开往复行这样的分析。换一个说法,如果写压力都集中在这里,而没有第二个峰的情况下,需不需要去更换物理设备?有可能不需要,因为所有的工具都掷中了操作系统的缓存。第四个例子,Ext4 文件IO延迟分析,我们之前看到的图是以磁盘设备为维度的。

那么我能不能根据文件维度去看到底是哪个文件的IO慢,这个剧本可以直接做到。我下了一个最简朴的写压力到数据库上。红色标明的地方比非红色的地方的数值都要高,而它的共性在于都是数据文件,而非红色的部门都是各种的日志文件,这就是大家常说的日志文件是顺序写的,数据文件是随机写的,顺序写比随机写快, 就在这个延迟上体现了,所以通过这种观察方式大家可以观察到各个文件的写压力的平均延迟或许在什么水平上。

我用这个工具主要是用来抓住一些证据, 好比其他历程影响了数据库的IO。在这个地方居心用了DD,不是打车的滴滴,是写IO的DD,DD的IO压力就会被工具抓出来, 这就是铁的证据。这是我想先容的第四个例子,它可以做基于文件的IO分析。

第五个例子,块设备的延迟分析,为什么要增补一个块设备的延迟分析呢?因为从适才的这些延迟分析上,延迟都是带有操作系统缓存的影响的,而通过这个剧本可以看出真实下到设备上的延迟是几多。这是一个下到设备上的压力的情况, 大部门的延迟在32微秒到64微秒之间,我也不知道这个设备是好还是欠好,做IO压力的时候很难通过绝对值去判断这个事是好还是欠好,大家需要通过环比得出正确的结论。这张双峰图, 是我的同事做出来的,他问我说这是个典型的双峰图,是不是IO出了问题设备出了问题,一组IO比另一组IO的延迟显着要高。

那这个图到底有没有问题呢?这个图没有什么太大的问题,因为它的count很小。它真实的select下在到设备上的读只有五个请求,这五个请求里边显着有三个比其它的两个延迟要高一些,这个事儿不值得分析。

大部门的请求全部都被InnoDB的buffer和操作系统的Cache全部都hold住了,所以这个事情是不值得分析的,大家通过这个图也可以完成适才“需不需要更换设备, 更换设备以后MySQL会不会变得更快”的问题,在如图的情况下应该不会。第六个例子,MySQL线程对文件的IO压力汇总,我们看了适才基于设备的、基于全局文件的IO压力分析,我想知道MySQL到底哪一根线程对IO造成了压力,是InnoDB卖力刷数据的哪根线程,还是正在导数据的线程。

这个剧本可以帮大家做到这个事情,看看这个剧本的输出效果是这样的,它最左边一列是TID,是线程号,最右边一列是文件,中间部门是它写的巨细。在这样的一个数据库上,大家可以显着看到这个数据库出了什么问题。纵然没有my.cnf的内容也能知道这个数据库出了什么问题,它的问题可能在于开启了general log。这个是基于线程的,所以大家只要找到这两根线程, 就能知道这两根线程是哪个业务下来的,这两根线程的SQL可能异常多, 所以general log一直在刷日志,刷成了现在这样子。

这个是基于线程,而且基于文件的对IO的分析。第七个例子,短生命周期的暂时文件检测,这个大家纷歧定常见,MySQL会在某些情况下动用暂时表, 如果SQL没写好就会建立暂时表,这些暂时表的生命周期很短,可是量很大,所以一定要写文件而不能内存里。在这种情况下会对操作系统造成一些压力,而这个压力又不太好诊断,是因为暂时文件的生存周期短,所以这个剧本可以帮大家提供这样的一个方案,这个方案的效果或许是这样子。

我做了一个暂时表,这个暂时表活了5.3秒左右,于是它展现在了剧本的效果里。如果大家扫描自己的线上MySQL发现这里有大量的工具说明在大量的使用暂时表,如果IO压力在此时比力大, 就可能受了暂时表的影响。第八个例子,短毗连分析,好一点的应用都市用毗连池,可是我们许多的时候没有那么好的运气,老遇到那么好的应用,所以经常业务会扔过来大量的短毗连。这个例子中, sysbench上了一个大并发,可是只活了300多毫秒,这些毗连都只活了300多毫秒,重复运行这个sysbench就可以将数据库打死,建设一千个毗连,300毫秒以后也会销毁,再建设一千个毗连,你的业务就会忽上忽下,通过这个剧本就可以抓到这个压力从哪个服务器来的,哪个端口来的,然后把它搞定就可以了,这是数据库的短毗连分析。

华体会体育

第九个例子,长毗连分析,除了短毗连分析,另有长毗连分析,哪一个业务端老在搞我的数据,老在往里写,总在往里读,搞的网络特别慢。这个就可以帮大家提供这样的一个视角,这个就是长毗连分析。它有读有写,都在这里,这是第九个剧本。

第十个例子,CPU offcpu 消耗分析。看看最后一个剧本,这个我需要先容一下配景,什么叫offcpu,什么叫消耗分析,以及最终形成的图或许是什么样子。为什么我们要对CPU的offcpu举行分析呢?因为正常的情况下CPU的事情历程是这样子的,MySQL运行在操作系统的用户态。序运行历程中会切入到内核态, 好比说法式举行了系统挪用,比力好的情况是法式可以一直占着cpu,所以它一直都市在运行中,如果不太好的情况,好比说遇到了磁盘的IO,网络的IO,主动的睡眠,一些锁的阻塞,它就会陷入不占用CPU的情况,把CPU放弃了,然后让给了其它线程。

可是这个时候是不是意味着数据库事情良好?如果大家对MySQL只做onCPU的分析,这个阶段onCPU是0,不占CPU,可是因为IO是阻塞的,我想知道到底是因为什么阻塞在这,这个就叫offcpu的分析,就是MySQL从内核态开始把CPU让出来,开始下台的时候,我想知道它为什么下台,以及下台连续了多久,然厥后举行这样的分析。它最后的输出效果是这样的一个图,这个图叫火焰图而且这是一个冷火焰图,它的是offcpu的,大家常见的火焰图是火焰图, 是红色的, 指的是oncpu的分析。我们特意把它做成了冷色的,这是offcpu的火焰图,很显然没有任何一小我私家能读得懂上面写的到底是什么。所以我来先容一下什么叫火焰图,火焰图是这样一个历程。

好比说对数据库举行采样,举行采样的历程中,采了四个样,这四个样这个地方代表数据库的运行客栈,然后它的运行客栈是这样子,这样四个运行客栈,然后在火焰图上他们就会被合并成这样子,他们四个都涉及到第一个挪用是A,所以它会把A合并在一起,第二个挪用有两个是B,把B合并在一起,最后大家看到的就是这样一个图,这个图变大以后,就会长成像一个火焰的样子,所以它就是Flame Graph。这个是火焰图是怎么形成的,它是通过采样,然后把采样合并成一张图,然后大家在这个图上能获得什么信息,获得的信息是法式的入口可能是A,因为所有的采样都过了A,其中B独立运行占了四分之一的时间,B之上C占了四分之一的时间,大家就能从这个图上快速的读出这个事情。所以如果对这个法式要举行调优的话,大家会调到那里,从那里下手调优最直接利便?B独立运行了四分之一,C独立运行了四分之一,E独立运行四分之一,我们唯一知道的是调优D是没有用的,因为D所有的时间都被E占用了,所以调优D不管怎么调它自己的时间是没有占用的,这个就是火焰图的基本原理。我们来看一个例子,这个例子是我从适才的谁人图上截出来的,这是offCPU分析中的一部门,它占了适才那张图差不多25%的左右的巨细,这个堆站从下往上读,最下面这个大家能读懂吧,innobase:index_read, 表现引擎在读索引树。

然后往上读,不知道什么意思,mvcc不知道什么意思,无所谓,再往上读,Btr_...to_nth_level, 表现在读索引数的第n层,再往上读,我buffer上面开了一个页,它开始读页了,然后这个地方涉及到了fil_io, 为了读取这个页我开始读文件了,然后上面do_syscall_...举行了系统挪用,然后到了VFS开始真实的举行这个系统挪用。如果这个客栈泛起在整个MySQL客栈的25%,意味着什么呢?意味着MySQL花了25%的时间来读页,来从文件系统里边把这个页读出来,这个页是干什么用的?这个页是在索引中的,就纵然不懂代码,读这些英文,或许也能分析出如果把磁盘换掉,或者是把buffer pool扩大,扩得很是大,然后开始加内存,最好的条件下能让这个数据库变快25%,可能能够把这个客栈整个消掉,这个就是火焰图带给大家的IO分析的方法。适才我们先容了十个bcc相关的例子,这些例子都是现成的剧本,bcc这个工具能向大家提供的是一整套,可以观察这个操作系统的各个方面,好比说如果有工具被OOM kill掉了,然后内存有泄露的也可以看,然后这边有N多的其他的部门,这个基本上是我们这几年发现的一个宝库,大家直接挪用这些剧本就可以完成许多的别人完成不了的分析,它的技术用的是eBPF,就是我们适才先容的系统观察工具。

大家直接在github上直接搜就行了。4.eBPF 使用方法/限制如果这里边剧本满足不了要求, 那我们可以自己写。这里我们先容一下剧本的写法以及eBPF的限制。

我们拿适才MySQL延迟分析举例,一个MySQL上面有一千个query,这些query或许都落在哪个延迟时间内里那张图,为了完成这个需求, 我需要写两段法式,其中第一段法式是运行在内核里边的法式。这段法式的逻辑是这样的,先在query开始的时候截获一下,让它记载一个时间戳,然后请求竣事的时候再截获一下记载一个时间戳,然后把两个时间戳相减获得一个延迟,然后把这个延迟扔到效果集里边去,法式就完成了,正常思路吧。我用竣事时间减开始时间,减一下获得一个延迟,然后把延迟扔到一个统计容器内里,这个事就竣事了。

这是我要写的第一个法式,是嵌到内核里的法式,可是需要一个外壳的法式卖力嵌入。这个外壳法式的逻辑也很是简朴,把适才那段内核的法式嵌到MySQL的观察点上,嵌到内核内里去,然后把效果集拿出来,打印出来就竣事了,这是如何写一个eBPF的剧本,大家唯一需要做的事情就是这两个法式,然后运行一下。这个法式有多长呢?这个法式就这么长,45行,可是我中间忽略了一些部门,这些部门是卖力差错处置惩罚,它的焦点就是这45行,然后大家只需要把现在的剧本拿下来抄一抄,改一改就可以完成许多的功效了。我们来聊聊限制,这么好的方法为什么许多人不知道呢?操作系统内核的限制,这个功效是Linux 4.4引进来的,可是在Linux 4.4上存在统计的bug,如果大家用那张漫衍图的话,会看到这个图上数不太对,我们推荐的是Linux 4.9+,部门好用的功效是在4.13+上才开放,这个是eBPF最大的限制。

怎么办呢?只能祝大家长寿吧!活到Linux 4.x内核能在生产情况上使用的那一天。它的第二个最大的限制是MySQL的编译参数,MySQL虽然在很早很早的时候,已经提供了dtrace的观察点,这些观察点是公用的,可是它在默认的编译出来的官方公布的包里边是不带观察点编译的,所以在直接官方公布的二进制的包里边是用不了这个功效的,大家需要自己编译一下。编译的时候需要带这个参数,这个可能也是属于一个比力大的限制。

所以如果大家受到限制,我们推荐换一个工具,systemtap。Linux 2.6就已经有了,可是我适才说过,它的机制是写一个内核模块,这种机制其实不是特别稳定,它为相识决不是特别稳定的问题增加了若干限制,好比说能在内核中使用的内存巨细有限制,收罗频率也有限制,对整个内核的性能的影响的百分比也有限制,在这些限制参数都开起来的情况下,它还是比力宁静的。可是许多观察功效好比说offCPU的火焰图,就必须要把这些限制关掉,一旦关掉内核就不是很稳定,所以这个工具,我没有敢把它的缺点写在上面因为确实是个好的工具,我们也很难说它的这个缺点是个致命的缺陷,可是不太推荐在生产情况上使用,可是在测试情况上确实是很是好玩的一个工具,如果大家用不了eBPF的话可以用systemtap来做一些诊断。这是跟限制相关的部门。

然后有systemtap,有eBPF,大家就想知道有没有其它的选择的部门,这个图也是我偷来的,都是羊驼,就有这么多工具,大家可以去选择它。至于怎么选择的话,大家直接谷歌一下有专门的文章教大家怎么来选择这些观察工具,可是总的来说没有一个科学的思路,就是实验,不停的实验。

推荐一本书,所有的这次演讲里知识的泉源都泉源于这本书,我们适才说的bcc的剧本集的作者,这是他写的书,他还做了许多神一样的事情,强烈推荐给大家,这本书很早中文版就出书了,可是似乎许多人读过的人不是许多。除了中文版的书之外,再推荐一个文档,这篇文档是红帽的官方文档,不需要红帽企业的会员,免费可以读,叫:Performance Tuning Guide,它在第二节先容了操作系统种种可以用的观察工具,笼罩了我们的第一部门所说的所有的外部观察工具,以及我们在中间所说的系统观察工具,都在这上面。

可是我不太喜欢这个文档的原因是因为它很少有原理分析,而都是在说这边有一个参数可以调,那里有一个参数可以调,如果大家想获取这部门的知识的话,这篇文档的质量也是异常的高,红帽我一直以为是一个卖文档顺便卖操作系统的公司。


本文关键词:MySQL,性能,诊断,实践,之,系统,观察,工具,爱,华体会体育

本文来源:华体会体育-www.gd-dy.com

Copyright © 2008-2022 www.gd-dy.com. 华体会体育科技 版权所有  ICP备案:ICP备17081594号-1