00:00
好,那接着的话呢,咱们来看这个第四个点啊,叫定位执行慢的circle啊,这呢也对应呢,我们叫慢查询日志啊,这呢属于我们日志文件当中的一种啊,叫慢查询的日志,咱们前面呢,在提到这个关于服务器优化的时候呢,提到一个点,就是说如果说我们这个服务器呢,在进行这个优化的时候呢,发现它呃仍然有这种不规则性的这种延迟或者卡顿状态的话呢,咱们呢,可以通过呃找到整个执行过程当中比较慢的circleq,然后进一步呢,再进行一个分析,对吧?那么怎么算执行比较慢的circle呢?这里边首先提到了一个变量呢,叫做long query time。我们呢,可以定一个时间,默认情况下呢,这个变量的值是十,意思呢,就是说运行超过十秒以上的这个语句,我们就认为呢,它是一个慢的circle口啊,注意这时候呢,是不包括这个十秒的啊,是大于十秒的啊,那就意味着超过十秒的就达到了我们能够忍耐的最大的一个时间值了啊把这些呢,我们都认为呢,是慢查询的这个circle,然后呢,咱们把这个circle给他呢选出来,接着呢,可以通过这个plan的方式呢,去查看它的这个执行计划,看一看呢,是不是我们这个circleq本身呢,出现了问题。
01:05
啊,就是这样的一个思路,好,那接着我们就来看一下具体怎么去做,说默认情况下呢,这个MYSQL数据库啊,它是没有开启慢查询日志的,言外之意呢,就是我们超过这个十秒的话呢,它也不会给我们放到这个日志文件当中啊,为什么呀?呃,因为我们要是开启这个慢查询日志的话呢,这个当有比较慢的话呢,每次都往里写多少呢,会影响我们这个,呃,服务器的这个执行的性能是吧,所以说呢,我们在进行条约的时候呢,我们再把它打开,那不条约的时候呢,这个你就没有必要呢去打开了。OK,这是一个,另外一个的话呢,就是我们这里边儿呢,慢查询日志呢,支持将日志写入到文件中,就是我们查询到的这个慢查询的这些circleq呢,咱们就直接呢写到一个文件里了啊,其实就对应的我们这个日志文件啊,一会儿呢,我们也能够看到这个文件,包括呢,我们还讲一下如何呢去删除这个文件。好,那下边呢,我们就一步步来去讲,诶那自然而然的,这里边儿我们就会涉及到两个变量的一个操作啊,一个呢,是不是我们要首先开启慢查询日志对吧?其次的话呢,我们可以呢,去修改这个变量的值,那十秒的话呢,我们定义呢,觉得太长了,我们可以把它呢改的小一点。
02:07
好,那首先的话呢,我们就开启这个慢查询这个参数,那开启之前呢,咱们先做一个查看啊,选中执行,这呢我们就还在这个MYS8.0中,我们去做这个演示的啊粘过来头起好大家看到此时呢,我们这个纸呢,是不是一个off的状态啊,哎,表示呢,它是一个关闭的,那我们可以呢把它去打开啊,这个呢,我们就set一下啊,你就叫做这个s low诶query,然后这个log是不是改成是一个on的状态就可以了。好,这时候我们在修改的时候呢,大家会发现呢,报错了,哎说呢,我们这个变量的话呢,它必须得是一个全局的一个系统变量,所以呢,我们一定要加上这个global。啊,这个大家清楚一下,我们说呢,系统编呢,有的是这个global的,有的只是global的,有的呢只是这个session啊,有的呢是既是global又是session,哎,它就属于只是global的啊,那我们改完以后的话呢,咱们再去做这样的一个查看,大家会发现呢,这个时候是不是就是on了,那我们就做了一个打开啊,那打开以后的话呢,大家你看啊,我在这个时候呢,再加个百分号啊,再回车,那我们就会显示出来另外的一个变量叫slow query log。
03:08
相当于呢,我们这个慢查询日志呢,它对应的有一个文件啊,就是慢查询日志文件,它呢是放在我们的是不是数据目录下呀,啊对应的你看啊,是在我们这儿啊叫艾特硅谷05SLOW这样的一个log,哎,也就是说默认情况下呢,它这个呢,放的就是我们这个主机名。150呢,咱们这个主机名呢,不就是呃,在这儿能看到是吧?艾特硅谷零五嘛,诶不是说呢,我们是第五个文件了啊,这个大家注意一下行,那这呢,我们就能看到这个基本的这个情况了,打开了,那么打开以后的话呢,下边咱们能做什么事啊,是不是可以考虑去设置一下这个long query time这个时间呀,来我们把它呢,CTRLC啊选中一下。打过来。啊执行好,大家看到呢,默认这个时候呢,值就是十秒钟的意思,我们把这个值呢,给它改的小一点,这个十秒钟的这个时间呢,确实比较长,咱们做这个模拟的话呢,这个超过十秒呢,也比较困难一些啊,你像这这个几百万条上千万条这个数据那才可以,而且还得写一个比较烂的一个circle口,对吧,那这块我们把它改的小一点,比如说就改成一秒。
04:06
好,这里边呢,有个点需要去注意一下,我们改的话呢,哎,这个变量的话呢,它既是一个全局的,又是一个呃这个呃绘画级别的,那我们这时候改的话呢,就要都改,那为什么呀,我们这时候呢,把这个global级别的long query呢,改成是一秒钟了,那我们要再查看这个值的话呢,自然而然它就是一秒钟,它呢是对我们在新建的这个绘画呢,它会起作用。啊一秒钟对吧,对我们新建这个绘画呢起起作用,那如果说呢,你看我这时候把这个格lo布呢给它去掉。诶这样空格一下去掉,大家你会发现呢,当前我们这个session呢,是不是还是十秒钟,那所以这个小细节呢,大家注意一下,我们需要呢,把当前这个session,那我不写这个global呢,默认情况下呢,就是这个三审级别的,把它呢也改写成是这个一秒钟。好,那改完以后的话呢,我们再去查看一下,这就针对当天session的话呢,也改成这个一秒钟了啊没有问题,好,那么咱们这块这个修改,咱们讲变量的时候呢,都提到过,都是属于临时的方式去修改的,对吧?一旦呢,你这个数据库服务器呢,重启以后呢,是不是就都失效了,那大家呢,如果想设置这个永久的方式的话呢,那就可以改我们这个配置文件了,改配置文件的话呢,我们可以改这几个参数,第一个的话呢,就是我们去开启一下这个慢查询日志,改成是个on对吧?那其次的话呢,我们设置一下这个阈值啊,这个比如我写的是这个三秒钟是这个阈值,其次的话呢,我们可以再指定一下我们这个输出的话呢,可以放到文件当中,而且呢,对应的文件呢,在哪儿我们都可以呢,明确给大家指定下来,你也可以呢,不用咱们默认情况下的这个主机名啊,你改写一个自己愿意起的名都行。
05:36
没有问题是吧,那设置完以后呢,你再重启一下服务器就行啊,这个大家都知道啊,就不说了。那这个完了以后啊,我们这个相应的参数主要是两个,一个是它,一个是它都设置好了,我们呢,首先看一下咱们当前这个系统当中有没有这个慢查询的这个日志啊,那这时候我们回过来啊,把这个变量往这一粘啊一走起,好大家发现呢,此时呢,我们这个慢查询呢,是不是就没有啊,啊没有过这个慢查询,那下边呢,我们就要给查去造出几个这个慢查询,我们做一个这样的演示,那演示的话呢,这时候我去创建一个新的表,然后往这个表里边儿呢,我们添加400万条数据。
06:09
啊,这样的一个场景,好,那此时呢,我就把它CTRLCL一下选中啊回过来,嗯,这块的话呢,咱们就放在OK啊,我use一下叫艾特硅谷DB1吧,哎,咱们这个数据库下啊,然后把它粘过来。啊,走起。好,那这时候我们这个表呢,就创建成功了,那这比较简单,那这个表创建成功以后呢,接下来我们要往这个表中呢,去添加数据,我们需要呢,涉及到产生随机字符串,对于我们这里边这个字符串类型的这变量呢,去进行进行一个值的,呃,一个赋值,然后呢,还有这个随机的一个数值类型的,对吧?那么这块的话呢,咱们跟上一章咱们及到那个叫student in这个表用的这个函数啊,都是一样的。啊,运动函数都是一样的,所以呢,我这儿呢,就不用再去把这两个去创建了,对吧?下一个的话呢,需要我们去创建这个存储过程啊存储过程呢这块呢,我是使用了一个新的存储过程,那就这样个操作,那这个操作的话呢,咱就别放在这个命令行了啊,我就直接在我们这里边呢去做个操作吧,那咱们再去新建一个。
07:06
好,这个我粘过来啊,粘过来哎,变大一点,这呢,我们针对的是不是艾特硅谷d be1啊,然后然后呢,我们把它选中了,做一个执行。啊,这个执行,那稍微花一点这个时间。好可以了是吧,那执行完以后啊,以后的话呢,我们可以在这儿呢,F5做一个刷新,我们看一下这个具体的存储过程,诶这呢是不是就多了一个,好,那多了一个以后呢,我们下边呢,是不是就执行一下咱们当前这个存储过程啊哎,把我们这个数据呢给它真正的创建成功,然后此时的话呢,诶你看我这呢,是从这个诶。呃,十万零一开始的这样的一个student number,然后对应的呢,是有400万条数据啊,大家能看得到是吧?诶我们CTRC一下,那这块呢,我们也是在这个SSQ这块呢去执行啊,因为这个数据量比较大的时候呢,有可能呢,咱们在当前这个连接的过程当中呢,它可能会断开连接啊,这个我们是有这样的风险的啊啊这个我们执行一下啊,如果大家呢,在执行过程当中啊,这个断了啊,你记着呢,可以每次呢100万条数据,100万条数据的往里边去添加。
08:11
好,这个时间呢,稍微会长一点,我呢先做一个暂停。好这呢,我们就经历了几分钟的时间啊,我们呢,就把这个数据呢,就都创建好了,那创建好以后的话呢,我们可以再回到咱们这个,呃,叉叉这里边儿呢,咱们做一个操作啊,首先的话呢,我们去查看一下是否我们这个数据呢,是创建的是对的啊select count星。哎,我们这呢去一下,我们这个呢叫做student。啊做一个执行好,那这块呢,我们查询到了是不是一共呢,就是400万条这个数据,诶大家你看有没有发现一个小细节,就是我刚才在执行的时候呢,稍微的有那么一点这个像卡顿一样啊包括呢,我们这呢也能看得到是不是0.82秒,对吧,相当于我们这个执行呢,是花了一定的时间的,呃,如果大家呢,有兴趣的话呢,你可以使用这个麦埃啊,我这呢是不是使用这个in DB啊大家呢,你可以使用这个MY呢,你去创建这个表,然后呢,去往这里边呢添加数据,然后你再通过这个MY这个存储引擎呢,去查看一下这个个数,你会发现呢,它这个瞬间就出来了啊,因为呢,在MYS当中,它其实有一个专门的呃,这个量变量啊,去记录一下我们这个表中的记录数。
09:17
所以呢,这个关于这个康德星这块呢,啊,这个麦的这个性能要更高一些,OK,行这儿呢,我们就说到这儿,这个表中的数据呢,已经创建完成了,那下边的话呢,我们就可以做一个查询的操作啊,比如说我们这块呢,去写一下啊,首先呢,我们这个de一下,这个叫student啊这呢是我们表中的这些字段,OK,那我们这呢,可以去select一个星,然后from我们这个叫student。啊,在这里边儿呢,我们去查询一下是where啊,这个student,这个number等于嗯,这呢是一个in类型的。然后呢,我们一共是400万条数据是吧,那我就这样查吧,400万,嗯345345,嗯这块呢是多少?嗯,这再来个一吧,啊这就345万对吧?哎,这样的一个位置上的这个数据,好我们这块呢走起。
10:04
诶查询好,大家看这时候呢,我查询这个数据的话呢,花了是不是1.19秒是吧,这样的一个时间啊这块呢,咱们上边是不是也没有这个对应的索引了是吧?好,然后的话呢,它对应的名是他,那比如说我们再查一下名叫他的这个,呃,数据呢,都有哪些啊,这时候我们再去做一个select。Select from。那student说where这个呢叫name等于哎,我们这块呢,给它粘过来啊,再这样。啊,执行一下。好,看到这时候呢,他花费的时间呢,是1.25秒行,那我们比如说呢,就执行这样两个操作就OK了,一共呢,呃,这个执行了两次,这个查询语句都超过这一秒钟了啊,我们这时候呢,是可以通过这样的啊叫啊status。啊,然后like,那我们就可以来写,是不是叫slow,然后呢,叫queries是吧。啊,变Y为I加ES啊,这是我们复数的意思,好大家呢,你会发现呢,此时你看我们这个值呢,是不是就是二啊啊,那就意味着我们这块呢,就记录了有两条呢,这个慢查询的这个情况。
11:07
诶这就没有问题了,好,那这块呢,就是记录到这个数据以后呢,下边呢,我们就要去找到这个慢查询的这个S库语句了,啊,那么找到之前呢,咱们再做个说明。啊,说明什么呀?啊在这块有个补充说明,呃,我们这里边呢,是把定义超过一秒钟的这个,呃,SQL语句呢,就到慢查询了,那实际上我们在真实的这个,呃,这个底层当中啊,除了我们这个long query time这个变量之外呢,还有一个变量去确定我们这个慢查询的这个记录的这个叫做mean啊,Examine的limit啊,这个变量的意思呢,就是查询扫描过的最小的记录数。啊,那默认情况下呢,我们这个值呢是零啊,那比如说呢,我们这个值是零,Long time的这个值呢,假设是十合在一起的,就是说如果我们查询的执行时间超过十秒钟了,哪怕呢一个记录也没有扫描过,那我们也要把它呢记录在我们的慢查询日志当中,那如果说我们这个值呢,比如说调成100了,那就相当于你扫描的这个数据呢,比如说超过100条才可以是吧,才会放到我们这个慢查询日志文件当中。
12:09
啊,一般的话呢,大家可以这个变量值呢,就设置成零就可以了啊,你知道这么一个事儿啊,就并不是单独的由我们这一个变量来决定的。好,那么这个完了以后呢,下边的话我们就想找一下说诶我们在整个执行过程当中啊,发现呢这个呃,程序呢,有这个服务器呢,有这个不规则的这个卡顿的情况,然后呢,我们定位这个慢查询日志,诶那么定义好以后呢,最后发现有两个诶慢查询的日志啊实际开发当中有可能这个数值呢,会更大一些,对吧?哎,那么接下来的话呢,我们是不是要找到对应的这个慢查询的操作是哪些,然后做一个最后的plan是吧?啊,那么我们如何呢,去找到对应的这个呃查询语句呢,诶我们就需要呢,使用这个日本文件的一个分析工具啊,叫做myslmp slow这个工具的话呢,呃,因为它对应的一个帮助文件啊首先的话呢,我们看一看这个工具,这个工具呢,大家一定要小心一点,我们不是在这个MYSQL这个呃指令下面去执行的啊,因为它其实对应的是一个对应的脚本文件啊,这个脚本文件的话呢,我们就呃应该是在咱们直接呢是这个啊根目录下呢去执行,不是MYSQL这样的一个环境下了。
13:13
好,那这块我们去输一下啊,叫MYMP啊,是不是叫slow啊,这块我们先来一个,这个叫help,是先查看一下我们这个指令呢,该如何呢去使用啊。在这里边呢,有一些罗列,我们比较感兴趣呢,是这样的几个参数,首先这个呢叫杠S啊,叫order,说呢,我们应该以如何的顺序的方式呢,去展示我们查询到的这些结果,慢查询,那结果呢,这个对应的这个参数呢,有这个aal a啊,CLT这样的几个,那其中这个at的话呢,是一个默认的情况,就是你要不写这个杠S,后边这个参数呢,默认就是它叫average query,平均的查询时间。啊,这个T的话呢,就是查询时间啊这样的几个参数,嗯,还有的话呢,我们这有个叫杠T这个number是吧,就just show the top n的这个query啊它呢主要是返回前面的一共是多少条这个数据,呃,杠A的话呢,说don't啊,Abstract说不要呢去抽象所有的数值啊,变成N,子符串呢,变成S,这个大家可能看不懂啊,因为我们一演示呢就知道了。
14:14
行啊,那这块呢,咱们就做一个演示啊,咱们看看如何呢,去查询到我们对应的这个慢查询日志文件中的这几个查询语句啊。呃,这块呢,需要明确一下,就是你得知道我们这个文件呢,它存放在哪个路径下啊,首先呢,我们去做一个哎CD啊,啊labor啊,MY。嗯,然后先这样,然后LR一下啊,咱们先找到我们这个文件啊,这个文件的话呢,是不是就在这里边了,所以我们就去分析这个文件就OK了啊,这个文件呢,我们就可以这样来去分析啊,首先呢,我们这个地方叫my circle是不是叫damp,然后呢叫slow是吧?哎,我们这块呢,就可以加参数的,首先呢杠S涉及到这个排序,比如我们用这个查询的这个时间来进行排序,还有呢,有这个叫杠气啊,我们说呢,返回前面多少条这个记录的意思啊,我们返回几条呢?返回五条吧。
15:01
哎,其实咱们这里边呢,也没有那么多的慢查询啊,咱就返回前五条啊,嗯,OK,然后再往后的话呢,就是我们对应的这个路径了啊,Label下的这个MYSQL下的,然后呢,就是这个文件啊,把它呢选中。啊,复制一下。嗯,再粘过来,然后回车一下。那这块呢,是不是就呈现给我们了啊,呈现给我们了,好,那我们这里来看一下啊,嗯,这里边对应的话呢,诶是不是我们刚才这里边儿这个查询语句就出来了。啊,查询就出来,那出来以后的话呢,你看上边这个啊,这其实还有一个这个话呢,就是我当时呢,去执行我们这个扣啊花费的这个时间它也超过一秒钟了是吧?OK,然后下边呢,涉及到这个查询的话呢,你看这里边有两个,这里边呢,这有一个S,这里边有个N。啊,这个SNN呢,就是刚才我们这个杠A这个参数咱没有加呢,呃,他就把这个数值类型呢都用N来表示,字符串类型呢都用S来表示了,如果你不希望他这样去做个替换抽象的话呢,你可以把这个参数呢给他加上啊,你比如我们在这儿呢,来一个杠A是吧,还再回车,那就能看到这个情况了。
16:01
我们呢那块呢,是真先执行这个number后执行的这个name啊,但是这块呢,先把它放上面,主要呢是他花的时间啊要更多一些,这个呢更少一些,所以整个呢是一个降序来排序的。行了,那这时候呢,我们是不是就定位到具体这个产品语句了,那下一步什么呢?我们可以考虑使用我们的这个叫plan啊,查看一下你对应的这两个查询语句的这个执行计划,那么在实际生产环境当中呢,你可以去top,比如来个十看看这个,诶按照时间排序呢,这个用的最多的这个查询语句,那优先的话呢,是不是要查看前边这些查询语句的这个执行计划了,就是吧。哎,这块呢,执行计划呢,我们下边再去讲。那么关于我们去定位这个慢查询的circle控呢,咱们就讲到这儿了,那下边这个点呢,就涉及到我们去关闭这个慢查询的这个日志啊,因为呢,我们说在开发当中,只要你是不调约的话呢,尽量呢就不要开这个慢查询日志了,它多少呢会影响我们这个性能,那关闭的话呢,如果你是一个持久化的方式呢,打开的,那你这块呢,还需要呢,在我们这个配置文件当中,把它呢改成是个off的状态,或者呢是把它整个给注入掉,或者把它整个这个语句呢给它删掉啊都可以。
17:06
啊,这个是永久的一个改变,那如果说呢,是临时的方式进行设置的啊,那你这块呢,也可以通过这种临时的这种设置变量的方式呢,给它做一个关闭对吧?诶我们随时CTRLC一下。来,我来。回到我们这个位置啊,然后我们再粘过来啊,做一个off。啊,这是不是就关了,那关了以后的话呢,我们再通过这样来用指令呢,去做一个查看啊再粘过来,哎,这个slow好这块呢,我们看到呢,咱们这个呃,Query log是不是变成是个off状态了啊这没有问题,行,然后呢,我们再去查看一下这个long query的一个time。啊,这个时间啊,我们再选中的再执行一下啊,这个时间的话呢,我们看到这个还是这个一秒钟。对吧,还是这一秒钟,哎,然后呢,我们可以怎么办呢?哎,再把这个服务器呢,做一个重启啊,再看一下这个long query time啊,这就相当于我们又恢复成默认的这个十秒钟了啊,咱们可以在这儿啊去重启一下。System。
18:01
哎,CTMY,这个restart啊,这个MYD。啊,OK。哎,重启,哎重启完以后的话呢,我们对应的你这个参数呢,之前设置的是这个十秒钟,呃,是这个十秒钟改成一秒钟了,重启以后呢,是不是就失效了。啊,这个时间稍微长一点。哎,可以了,回过来我们再去做了一个测试,哎,又恢复成这个十秒了,行,哎,上面这个呢,我们也做了一个off的一个关闭,行,哎,这就完事了啊呃,那这呢是我们提到了关于这个漫长日志的一个关闭操作,然后下边的话呢,还涉及到关于日志文件的一个删除。我们在这个调用的过程当中啊,咱们开启这个慢查询日志了,咱们把这个数据呢,是不是就写入到我们刚才看到的这个文件当中。那随着这个时间的流逝呢,我们的文件呢,可能就会越来越大。啊,那我们调休结束以后呢,咱们把这个,呃,这个操作呢,慢长印制的这个记录呢,已经关闭掉了,那这个文件的话呢,如果说没有用了,是不是这个文件呢,也可以考虑给它删掉吧。
19:01
啊,这个是没有问题的是吧,那我们就把这个文件呢,比如把它删一下,哎删掉以后呢,我们还可以呢,诶对这个文件呢,进行一个重置。啊,就节省一下我们这个磁盘空间啊,我们可以通过这个的方式啊,我们去删除啊叫艾特硅谷啊,这个是零五啊下载这个slow这样的一个文件。啊,是不是要删除啊,来个yes啊,这个还删除了,那你在L的话呢,我们这块呢,就看不到它了,行,那删除完以后的话呢,我们想对这个文件呢,进行一个啊重置啊,就重新恢复我们这个文件啊,一个默认的,那就是初始化的一个状态了,呃,我们可以使用一个指令啊,叫做my circlemin啊,这个呢叫flash locks,诶这样的一个指令,诶主要呢,就是这个指令,那这个flash locks的话呢,是重新刷新一下我们这个,诶或者叫重置一下我们这个日志文件,这时候这个日志文件呢,不止是咱们这个慢查询日志了。还涉及到呢,有我们这个叫blog日志,还有read度安度日志啊等等一些日志文件,所以呢,如果我们仅想是仅仅是想呢,重置我们慢查询日志的话呢,我们可以加上一个。
20:01
诶,所以就可这样,可以这样的去操作,那这个指令的话呢,也想执行呢,需要借助于我们登录这样的一个状态哈,所以CTRLCL一下,我们就这样的,诶操作呢,来进行来我们这块呢,把它粘过来啊,然后一回车。这块呢,因为有杠u root-P呢,就输入我们这个密码,哎,我就输入了啊输入以后呢,我们直接呢再做回车。啊就结束了是吧,好结束以后啊呢,我们这块呢,LL再去查看,诶看一下我们这个爱的硅谷零五这个lo文件出现了吗。诶大家呢,发现诶并没有生成,并没有生成对吧?诶这个主要没有生成的原因呢,是因为咱们刚才呢,把这个呃是不是已经设置成是一个off的状态了,那既然是off的状态,它就没有必要呢帮我们去生成了啊如果大家呢,你想看到是不是帮我们重置了的话呢,那你可以这么着,嗯把这个粘过来,咱们再临时的给它打开一下。哎,这是不是就打开了,好,那打开的这种状态呢,咱们再回过来,把刚才这个指令呢,咱们再跑一下。诶,我把这个密码呢写一下,哎,这就可以了,然后我们再L再来查看,好这时候大家再去找是不是我们这个,诶慢查询日志文件就帮我们生成了,这时候这个文件呢,是我们重置的一个文件啊,刚才这个大小呢,你看比我们要想的这个比我们刚才这个情况呢,是不是要大一些。
21:15
在哪儿呢?在这儿呢是吧,哎,这个是908,因为呢,里边记录了相关的信息,我们这儿呢,是一个重置以后的初始化状态的一个,诶日志文件。行,那这样的话呢,咱们就把这个慢查询日志呢,相关的这个操作呢,咱们就介绍清楚了啊,那么在实际开发当中,这个工具呢,还是比较有用的啊,那有了这样的一个记录,我们接下来的话呢,就可以使用plan呢,去查看一下这个慢查询的当中的这个语句是不是说有问题。好,所以咱们定位到这个慢查询以后啊,一般情况下呢,咱们会使用这个plan啊,去查看一下当前这个慢查询的一个执行计划,那除了这个plan之外呢,其实我们还有一个工具呢,叫做收这个在咱们前面讲这个逻辑架构的时候呢,也讲过,当时呢,我们讲的重心呢,主要呢,是想让大家去查看一下,在咱们这个MYL8.0当中,相较于这个5.7当中,它的一个变化,就是我们这个查询缓存呢没有了,对吧,当时我们这个重心呢是在这儿,那我们呢,在现在的讲解当中,咱的重心呢,就是关注于在整个这个SQ语句执行过程当中,每一个步骤的时间成本啊是多少。
22:17
好,那么针对于咱们刚才查到的那些,呃,这个慢查询语句的话呢,我们就可以通过这个收的这个方式呢,去做一个查看,哎,然后呢,进行进一步的定位,好,那这里边的话呢,我们就可以讲一下这个收啊,也算是做一个复习啊,前面呢,我们其实都说过了,首先的话呢,我们去做一个查看,看看这个功能呢,是不是正常的是启动状态的。啊,默认情况下呢,它也是一个off的状态,所以呢,我们需要呢,是不是把它做为一个开启啊,啊这个开启的话呢,就针对我们这个变量呢,给它改成是一个on的状态啊这个比较简单,我就直接粘过来去做执行了。好,这呢我们就启动了,启动以后呢,我们再去查看一下这个呢,是不是就是个on的状态,好那么在这种场景下呢,我们就可以执行相关的这个SQL语句啊,比如说呢,我们再把前面讲的这个select咱们跑一遍。
23:01
这呢做一个查询。哎,花费了这个两秒多钟的时间,我们呢,再跑一个。嗯,咱们对应的是这个名字的执行。可以了,好,那么这个执行完以后的话呢,我们就可以呢,是不是使用这些收诶file对吧,那这样的一个操作,那此时的话呢,我们就能看到当前的这样的两个这个查询语句了,然后的话呢,我们可以呢,是不是使用的叫收,是不是叫profile啊。诶,这样的方式就行,那么此时呢,我们这种查看的话呢,是不是针对的就是我们最近的这样一条这个查询语句来讲的,那你也可以呢,是不是查询指定的某一行啊,那怎么办呢?我们只需要在前面,呃,这个后边呢,是不是再加上一个for就可以了,那么针对于我们这个语句的话呢,你也可以查看它的其他的一些信息,不光是呢,我们这个叫duration就执行时间了,还有呢,关于这个CPU的一个情况,关于block IO的一个情况,哎,都OK的,那这块我们比如说把这个粘过来,嗯,这样CTRL一下。啊,站到这儿。这块呢,如果我们针对于这个第三条啊,这个编号为三的这个查询语句感兴趣的话呢,我们就来做它的一个查看,那我们就写个三是不是就OK了,那么在这个当中呢,我们看一看到底哪个步骤呢,导致我们执行比较慢了,我们会发现呢,是不是就是这个执行过程比较慢,而不是呢,我们前期的这种准备过程啊,或者等待的过程比较慢,就是纯粹执行比较慢,那么针对这种场景的话呢,我们就可以呢使用比如说。
24:22
啊,这个呢,查看它的一个执行计划,是不是里边呢缺少我们这个索引了呀,是不是这时候呢,链接的这个表比较多啊,是不是我们现在这个字段的设置不太合适啊,诶没有遵循相关的范式啊,诶等等这样的情况。就去分析你具体的这个SQ语句呢就可以了啊,前面这块我们也查看一下这个二啊,你会发现呢,也是我们在这个执行过程当中啊,它算是比较慢的,那在我们这个问题当中呢,就是咱们对应的这两个语句当中的这两个字段是不是没有设置这个索引,那我们加上索引以后啊呢,这个速度呢,就会有个大幅度的一个提升。好,这呢就是我们讲解的这个事儿啊,那么在整个这个售的这个过程当中啊,大家需要关注的就是有这样的几个操作啊,如果呢,我们在这个收profile当中,大家会看到比如说converting he to my,这呢就是由于我们这个堆内存中这个数据啊过大了,我们需要呢,把它存储到这个磁盘当中。
25:12
然后这个呢叫creating,需要呢创建临时表,那创建完临时表之后呢,它还会被删除掉,诶还有一个操作呢,叫comput to on,就是把我们这个临时表中的数据啊复制到我们个磁盘上,还有呢叫lock,那么如果呢,我们在当中出现了这样的几个这个这个显示的数据的话呢,大家这时候呢,就需要警惕,那通常情况下呢,我们就需要呢,做这个SQ的一个优化。啊,这个大家注意一下,然后呢,下边有一个注意说我们这个收这个命令呢,将要被用了,我们可以呢,从这个中的这处以表中呢,哎,再做进一步的查看啊这个呢,大家做一个了解就行,那主要的话呢,其实咱们关注的呢,还是这个叫explain,这呢也是咱们这一章当中啊,主要要讲解的这样的一个工具。好,那下面的话呢,我们就来看一看这个plan的一个使用。
我来说两句