00:00
那关于咱们这个测控呢,整个执行的理论部分啊,咱们就说完了,然后接下来的话呢,咱们看一下具体的一个实操啊,这块实操的话呢,我们在8.0当中和5.7当中啊,分别做一个演示,咱们查看一下这个具体的,呃,在代码层面呢,给我们呈现出来的这样的一个执行的过程,嗯,同时的话呢,我们也看一看这个8.0和5.7当中一个区别,就是提到这个查询缓存的问题,对吧。好,那首先的话呢,咱们先做一个操作,就后续呢,为了咱们使用这个数据啊方便啊,有一些这个数据呢可以去使用,所以这块呢,咱们还把上天呢讲到的爱硅谷DB这样一个文件呢,咱们给它诶导进来啊,这呢为了方便起见呢,我直接粘到这个桌面上,然后呢,在咱们这个SQ当中,这呢是咱们连接的这个远程的MYSQ的服务器,对吧?选择这个工具执行搜QL脚本,这个大家应该都比较熟悉了,选中这个文件呢打开然后执行啊,这个是对吧。然后点一下这个完成好这块呢,F5我们做一个刷新,那就过来了,同样呢,我们在这个5.7当中也执行同样的这个操作。
01:00
啊,桌面上选中这个文件啊,打开然后执行啊是的啊完成,然后F5刷新一下。啊,没有问题是吧,好这块过来之后呢,你也可以呢,在我们这个,嗯,叉叉里边呢,做一个演示啊看一下,比如我们去show一下叫data啊basis是吧?来执行一下,好这里边我们就看到了艾TB啊,这个5.7里边我就不演示了啊,肯定也都有行,那这块我们先来演示一下在8.0当中的这个情况。那首先的话呢,这里边提到一个变量,这个变量呢,叫做Ling,这个变量什么意思呢?就是我们首先呢,需要修改一下这个proling这个值,那默认情况下呢,我们不会去记录一下咱们执行的这个,呃,查询语句啊,或者相关的一些这个SQ语句的,呃,它的一个执行过程的啊,OK,所以这块呢,我们首先呢,把这个指量修改一下,那修改之前呢,咱们也可以先看一看这个变量的值对吧?好,这块我复制以后呢,直接粘过来啊,已执行这个值呢,你看默认是零。那这个呢,写法呢,咱们再讲上篇的时候呢,是不是也都提到过了,就是我们查询的话呢,可以通过这个select,然后呢,诶后边呢,你可以写成一个global或者是一个session啊,当然这个前提呢,是针对于你这个系统变量呢,是既是一个global级别又是一个session级别的,对吧?诶这呢,我们什么也没有写的情况下呢,默认其实就是一个session级别的啊,你写上这个。
02:15
那这个值呢,就还是这个零啊,跟他这个是一个意思,你要改成glo的话呢,就成了全局的了,行,这个值是零意味着就是默认情况下呢,它是不记录咱们整个这个SQ执行过程当中这个诶它的各个环节的,那我们需要呢去修改这个值,那修改的话呢,我们当然可以呢,在这个配置文件中去改,那如果呢,临时的一个修改呢,我们就使用这个set的方式,对吧?哎,CTRLC一下,那此时的这种方式呢,仍然是使用这个session级别的啊,应该都比较清楚,那设置完以后的话呢,我们再去做一个select,此时的值呢就是一了。呃,就表示呢,我们再去写这个SQL语句的时候呢,它会记录一下咱们当前这个SQL它的执行啊,这样的一个细节过程啊好,那这里边呢,我们这个就写几个这个SQL语句,比如说首先呢,我们去use一下,咱们叫呃艾特硅谷DB是吧,哎,这样的一个数据库。
03:03
然后呢,我们可以呢,去show tables查看一下我们当前数据库下的这些表,那我们比如说针对这个employees这个表呢,我们做一个这个查询操作,那我就这样来写了select from。Employees是吧,哎,我们回车这个呢,就查询出来这个数据了,注意此时的话呢,我点一下这个键盘的方向上。那那此时呢,我们就能保证我这个SQ语句啊,跟我刚才执行这个是完全一样的,来我们再做一个回车。那是不是你看我们又查询出来了,OK,那相当于我们执行了两条完全一样的,是不是SQL语句呀,没问题,那么接下来的话呢,我们就可以呢,去执行一个操作叫做什么呀?哎,叫做受啊profiles。好,这样写啊一回车,好那这里边呢,我们看一看他这个查询出来这个结果对吧,那这个结果里边呢,是不是就记录了我当前啊,就是刚才呢,执行的这样的几条这个语句,那最后呢,就是我们这两个是不是查询语句啊好那这里边呢,我们想查看一下,比如我们这样写叫受,那上面就要加个S了,我要不加S呢,叫profile是吧,那我们来一个回车。
04:07
大家你会发现呢,它执行了相关的一些语句,那具体细节咱们先不看啊,这个时候呢收呢,它默认情况下呢,其实执行的就是我们这个第七条。诶就是默认执行的是第七条,诶就查看的是最近一次,那如果我们想查看指定的某一次怎么办呢?那这个时候呢,我们就可以这样去写,比如说叫收,诶,Profile fair,然后呢,这个时候呢,用个单词呢,这个叫做for,诶for什么呢?For query77呢,就是我们前面这样的一个ID。那我们这个操作呢,是最近呢,其实也是七,这个呢是显示写出来的七好回车一下,那是一回事对吧?好这个呢是七第七条这个操作,然后呢,把这个七呢,咱们改成是个六来,我们再做个回车。来,你看一下我这两条查询语句呢,你看是不是完全一样的,那咱们先说六六呢,因为是咱们首次执行这个SQ语句,你看它中间的这样的一些执行环节,比如说开始状态检查权限啊,打开表,初始化啊所系统,然后呢,一个优化啊,统计啊,准备执行啊结束,这里边呢,是不是就每一个环节当中,它所花费的这个时间呀。
05:10
哎,就都在这块去展示了,那这个呢,等咱们后边讲到这个关于S优化工具的时候呢,就是监控工具啊,还会再提到我们这个和,因为这里边呢,如果一个语句执行的很慢的话呢,你这块做一个监控,你看一下呢,哪个环节这个时间比较长,然后呢,具体针对性的做一些操作,对吧?那这呢,其实就罗列出来,我们刚才说的一个S口执行的一个全过程,然后这个呢,看完以后,大家你再看咱们这个,诶query期你会发现呢,这是17条,这个呢也是17条。那其实呢,间接的就能够证明我们现在是没有开启这个查询缓存的。啊,是没有开启这个查询缓存的,那些同学可能会想这个问题,说老师啊,你这个查询缓存这个变量啊,也没见你设置啊,是不是有可能默认情况下呢,它就不是开启状态的呀,哎,这个问题说的非常好啊,说的非常好,但是你看啊,咱们在上边两节讲的过程当中的时候呢,咱们是不是查过这个变量啊。
06:06
说收variables like啊,Query catch tap,那咱们查过这个变量啊,这个变量你看是一个M的状态,也就是说呢,你设置了它也没有意义啊,设置没有意义,好,你看我把这个CTRLC一下,咱们回到160这块,我再做一个这个啊粘贴执行,你看它是一个off的状态,那5.7当中是有这个变量的,那确实默认情况下呢,它是没有开启查询缓存的啊,但是8.0当中相当于我们设置了也没有意义。啊,因为他根本就没有这样一个变量对吧。好,所以说呢,我们通过这儿呢,能够证明8.0呢是没有查询缓存的,好回过来我们再看一下这个5.7中的这个场景啊,5.7中的场景,那5.7当中我们要想演示一下是否有查询缓存的话呢,咱们是不是把这个也得改成是个on的状况啊。二的话呢,你可以使用我们临时的方式也可以呢,是不是使用一下我们叫配置文件的方式,咱们一直也没怎么用过啊,来给大家演示一下,那配置文件的话呢,我们使用这个vim这个指令,哎,咱们在这个ETC,这个大家最好记一下。
07:03
啊,这个咱们MYSQL的这个配置文件的一个位置是吧?CF啊,我们就进来了,进来以后的话呢,我们点一下这个I啊,此时的话呢,我们需要呢,来给大家增加一个这样的一个声明,那这个声明的话呢,我们就把这个呃,Query catch tap呢给它改成是几啊。哎,咱们前面的实际稍微提过,是不是改成是一呀。啊,咱们在上边讲的时候。啊,这个咱得往上翻了哈,涉及到这个值呢,是不是有三个,呃,零一还有二。嗯,在哪儿呢?呃,这这提到个经这个按需使用是吧,那这个012,然后这个一的话呢,表示它就是一个开启的状态,咱们就也别用这个了,咱就用这个on吧,啊就是相当于是个一,OK,那这里边呢,我们就做一个修改啊,就把这个呢CTRLC一下粘过来。嘿,站到咱们的这个位置。啊,这块呢,我给它诶粘过来是吧,好,粘过来以后呢,点下这个ESC,然后冒号WQ啊相当于保存以后呢,做一个退出啊,这就退出了,退出以后呢,因为我们修改了这个配置文件了,相当于我们MYSQL服务呢,是不是需要重启一下啊system CTR一下,然后再去rear一下这个MMYQD啊回撤一下。
08:16
哎,这呢,我们做一个重启好,重启以后呢,我们回过来啊,此时的话呢,咱们也可以呢,先先那个退出一下啊,然后咱们再去呢,通过这个入的用户啊杠P啊ABC啊123啊这呢我们是不是就登录成功了,然后呢,此时我们可以呢去受啊variables。啊,然后like是吧,这个query。哎,Catch tap是吧,哎,这样回撤好,此时呢,我们发现呢,它就是一个on状态,也就是我们现在呢,开始使用这个叫查询缓存。嗯,那接下来的话呢,这个环节跟我们刚才这个8.0当中执行的就是一样子的啊,首先也是我们去select一下,你先看一下这个叫pro filing是吧?哎,这个值呢是个零,我们需要呢,给大家是不是改成是一啊哎,S。
09:04
啊,Pro等于一啊修改了,然后我们再做一个这个查询,这个时候呢,它就是一啊表示呢,开始记录我们具体的circle,它的一个呃,执行的这个细节,然后呢,我们是不是需要写两个具体的这个SQL查询语句啊。咱们也可以呢,叫show data basis是嗯,然后呢,我们去use一下,叫艾特硅谷DB,哎,这样的一个数据库,然后呢,我们去,诶这个show吧,哎,Show tables是吧,查看我们当地这个表,然后呢,咱们可以呢,Select from,比如叫departments。那这呢是我们其中的一张表执行,然后呢,我再点一下这个方向键上啊,跟刚才这个SQL语句是完全一样的,再回车啊又执行完了,然后接下来的话呢,我们去收pros是吧,一执行这呢,就是我们最近的执行的这样的几条这个SQ语句啊,全都罗列到这儿了,然后呢,我们关心的是不是最近的这两条,好,那这时候我们可以这样去写啊,怎么着呢,咱们叫做。这个受是吧,Per,哎,Fair,然后for啊,Query,咱们先写这个七吧。
10:06
啊,FOR7好,回车一下啊,25条,然后呢,咱们再回过来,把这个七呢改成是八啊再执行,当然呢,你会发现呢,此时明显是不是有区别啊,我们首次执行说selecting from department的时候呢,你看这里边这个执行过程是非常多的。啊,非常多的啊,打开我们这个表初始化啊,锁系统,然后呢,等待我们这个诶query catch的一个lock,看这里边提到这query catch了,然后系统锁啊,这个优化啊,统计准备执行,然后这个sending数据啊,这样的一个环节结束,然后在最后的话呢,你看它有一个这样的操作说叫soring啊,Results in query catch,这样呢,就是我们提到了,是不是把你最后呃执行的这个呃查询的结果呢,是不是我们还要把它缓存起来啊。哎,缓存到咱们这个查询缓存当中啊,通过这呢是一个验证,然后呢,当我们再次去查询的时候啊,这时候呢,你会发现呢,咱们命中了啊,因为checking query catch for query的时候呢,那这时候它其实有一个命中的一个环节。
11:05
嗯,通过这儿呢,我们能够验证就是5.7当中是存在这个查询缓存的,当然默认情况下呢,它是个off的,我们需要呢把它开启才可以。啊才可以,那如果大家在5.7中去使用的话呢,其实咱们建议大家呢,你使用就咱们上边的推荐的是不是咱们改成是一个二的这个情况呀。因为这个时候的话呢,因为本身呢,它命中率比较低嘛,咱们可以呢,通过显示的加上这个circle cash或者circle no cash的方式,然后表示呢,咱们是不是要调用一下这个查询缓存啊,OK,行,这呢就是我们相当于给大家做了一个验证啊,那除此之外的话呢,咱们还可以再来看一下,这里边儿呢,除了咱们查看这个duration这个时间之外呢,实际上呢,还可以再丰富一些。哎,我看我们这课件。啊,在这这个我们还可以呢,查询其他的一些这个字段的信息,比如说叫IO,呃叫CPU叫block IO是吧,显示一些这个IO的相关开销,显示这个CPU的相关的开销啊这个也可以怎么写呢?就是收profile啊这块呢,之前写上具体这个参数就可以了,来举个例子啊,比如说啊,我们刚才看到的是不是受啊profile。
12:15
然后后边呢,我们写比如CPU,还有那叫block IO,哎,然后一下咱们这个query。哎,Query几假期吧,哎,这时候查看,那除了这个duration之外啊,执行时间还有呢,我们CPU的相关的开销,还有我们这个IO的相关的开销啊,都能给我们罗列出来,OK,就是大家呢,如果有需要,哎,我们后边呢,可以做一个查看,咱们在后期讲到这的时候,那性能分析工具的时候呢,咱们还会再提一下当前讲的这个收profiles和收profile。因为呢,咱们这块呢,可以通过这个duration呢,查看相关的环节花费的时间,那如果有执行时间特别长的,哎,那我们就要考虑呢,对它这个环节呢,是不是进行一些优化处理的,对吧?好的,这个呢,是我们说的这个事儿,然后呢,这块又提到一个说只要呢,咱们写的这两个呃,SQL语句呢,有一点点差别,它就不会出现一个命中的场景,比如说我们这里边呢,是想查询ID为二的这条记录,然后这条记录呢,是写成ID大于1AND ID小于三啊其实也相当于二,这两个呢,一看长得就不一样,差别很大,所以呢,它是不可能去命中的,对吧?那我们这里边呢,还可以做一个微小的变化啊,比如说咱们去select星from一下啊,我叫。
13:26
Department from departments是吧,然后呢,Where。比如我们叫。Depart。啊,ID等于,哎,我写一个十吧,哎,这是一个情况。嗯,写错了是吗?嗯,Depart啊,这个少一个T啊。在这好走一下,这个呢,是不是就执行成功了,那这个执行成功以后呢,然后我们在这个位置呢,看我诶多整几个空格,然后呢,我再做一个回车,这个结果呢,执行结果跟刚才是一样的,那此时呢,我们再去收哎profiles来执行,然后我们关心的是不是这个十和11啊来收profile。
14:09
Four,哎,QUERY10,哎,这是一个场景,然后呢,我们再呢,把这个十呢改成11,大家再看你会发现呢,是不是我们这个11又重新的走了一遍呀。啊,从我们这个逻辑上来讲呢,它俩是一样的,但是呢,呃,我们这个查询缓存呢,在命中的时候呢,它俩是不一样的字符串,因为我们做K存储的时候,其实存在字符串,这俩字符串呢,显然是不是不一样啊。OK啊,所以说它这个命中率呢,还是比较低的啊,OK。行,这个呢,我们就说清楚了,然后的话呢,这里边儿。啊,我又写了一个这个注意点哈,就是刚才我们其实也提到这个事儿了,就是咱们在这个8.0当中啊,是不存在啊回过来。诶,8.0当中,咱们是不存在这个叫query catch tap这样一个参数的啊,咱们刚才在这个里边,我再重新调一下这个微参数是不是这个啊,诶我把这个呢,再诶复制一下,回到咱们这150这块呢,我们再去复制。
15:01
啊,我们问一下。ETC。啊,卖点CF,然后呢,哎,输一个I。走到最后就是刚才呢,其实我们也演示了啊,再通过事物webs的时候,发现咱们就根本找不到这样个变量,当你试图呢,把这个变量呢,比如说配到咱们8.0的这个卖点CF这个文件中的时候啊,我WQ一下是吧,诶此时呢,你看我们做一个system啊CTRL。Control,然后呢,Restart。MYSQD好回车,这时候大家你会发现呢,我们汇报相应的这个错误信息。啊,你看是吧,哎,就失败了,这个失败原因呢,就是因为咱们刚才配的这个参数啊,在咱们这个8.0当中,实际上是不存在的。啊,这个你就知道了,咱们这个设置呢是不对的,对吧,那我们把它呢删掉就可以了。那删掉是吧,然后再点一下这个EIC,然后冒号WQ啊保存一下啊,这个呢,咱们再把这个服务呢,重启一下。
16:06
哎,这个时候应该就成功了,行,那这块呢,其实我们就通过这个对比啊,知道了我们8.0和5.7这样的一个区别。好,这个呢,我们就说到这儿。
我来说两句