00:00
那么通过刚才这样一个讲解啊,大家应该对这个锐度日志啊,应该有了一个直观了啊,就是相当于呢,你会认为我们在这个磁盘当中是不是就有一个叫re度点file这样一个文件,对吧?诶当我们这个呃服务器呢,崩溃以后呢,我们可以考虑呢,通过这个锐度点file呢,进行一个数据的恢复,保证我们这个事物的一个持久性,好,那么真正意义上我们这个蕊度日啊,它的构成啊,其实比我们想的要稍微的复杂一点,它呢也涉及到了两部分这个结构,一部分呢是内存层面的,呃,另外一部分呢,还是我们这个持久化层面的这个re度log,这个file。啊,不光是我们这个file了,它还有一个内存层面的一个结构,来我们看一看,这个呢,叫做重做日志的缓冲啊redolog buffer啊,一看那个buffer呢,就知道我们内存层面这个结构,它呢是在内存层层面的,诶是容易丢失的。啊OK,那么我们在这个呃,服务器启动的时候呢,就会向这个操作系统啊,这个申请一片这个空间啊,这一片空间呢,我们叫做呃,Redo log buffer啊,就是来存储我们这个重做日志的啊呃,整个呢是这样一片空间,这个空间的默认大小呢是16兆。
01:04
诶,默认大小这是16兆,咱们可以呢,通过这样个变量呢,我们进行一个查看,诶CTRLC一下啊,比如我们就在这个命令行这块呢,直接我就粘过来跑一下就行,诶我们看到这个值了,对吧?这个值呢,我们把它呢做一个换算呢,其实呢,就是叫16兆的一个大小,哎,最大的值的话呢,可以是这么大啊,最小的话呢,可以是可以是那一兆UIG呢,就是我们这个变量呢,咱们可以去修改它的这个值对吧?OK,行,那么我们这一片空间呢,叫做redolo buffer,这个空间的话呢,我们又把它分割了,分割啊分割成一块一块一块一块,那么每一个呢,叫做redolo block啊就是redolo的一个块。啊,注意多了个块,那一个块的话呢,它占啊叫512个字节的大小,然后这个块的话呢,又分成这个具体的细节,这个咱们就先不说了,咱们先宏观上呢进行了一个讲解啊,就分成这样的一个一个的redolo block,整个呢构成的叫redolo buffer啊这样一个概念啊,那么这呢是我们说的这个内存层面的啊,然后的话呢,我们再说一个呢,叫重做日志文件啊,这个呢是咱们讲的这个,呃,一个真正磁盘意义上的一个文件,那我们所说的你这个服务器崩溃了,崩溃以后的话呢,我们这个为了体现这个事物的一个持久化呢,我们需要通过这个日志文件呢进行个恢复,那我们所说这个恢复呢,其实就不是内存层面了,因为你这个服务器崩溃,你这个数据也没了是吧,咱们所说的恢复呢,指的就是磁盘当中的这个文件当中来进行恢复的。
02:26
那么这个文件呢,它会有一个存储的位置,诶默认情况下呢,就在咱们当前的这个数据目录当中啊,那数据目录的话呢,诶咱们这块来看一下啊,我在这个150里边,嗯,咱们呢,就CD一下啊,是不是默认的我们数据目录呢,是不是叫啊y.Li啊MYSQL就在这个路径下,然后在这个路径下的话呢,默认情况下呢,我们会有两个文件。啊,这个一个文件呢,叫IB啊,然后log file01个呢叫IB log file1,诶认下的话呢,就有两,而且呢,你会发现呢,这两个文件的大小呢,你看都是一样的,诶说我们这块都记录满了吗?诶其实没有它相对呢,就是先把这个空间呢,先开辟出来,然后呢,我们后续的,呃,你这个事物的一个一个执行,我们就把相应的一些这个,诶你修改的这些信息啊,记录啊,我们就记录在这里边了,呃到时候呢,这个文件呢,相当于它不会再去变大了啊就是这个空间呢,先都占好啊就这个意思。
03:16
好,那么关于它在进一步说明呢,我们后边再讲啊,咱们呢,先宏观上的来讲一下,那刚才呢,我们看到这两个文件呢,就是我们磁盘当中真正存在的叫relo file,咱们恢复的话呢,是从这两个文件中来进行数据的恢复的啊这个大家注意一下,好,那么知道了,有我们内存层面的relo buffer,还有这个呃,磁盘层面的relo file以后呢,咱们先来给大家讲清楚这个relo它的整体的流程啊,这个呢,呃,需要大家呢是清楚的啊,至于说呢,这个文件里边的结构是什么啊,这个block block呢,这个头尾又又有什么东西啊,这个呢,你可以了解啊,但是整体流程是一定要清楚的啊,这个呢,也会涉及到我们优化啊,为什么呢,我们下边呢,是不是涉及到一些参数的设置了,咱们在讲这个,呃,数据库调入的时候呢,咱们提到过服务器层面呢,可以调的一些参数。
04:04
啊,我们还通过一个案例呢,是不是还用到这个参数了,诶这个参数呢,就在我们这块呢,能够讲清楚啊。好,首先的话呢,我们以一个更新的事物为例,咱们看一看这个redolo它的一个流转过程啊,因为现在我们明确了,是不是有两个角色,一个呢叫做redolo buffer,一个呢叫redo lock fair啊咱们上边呢,刚才讲的时候呢,只是泛泛的一说它这个redo lock的作用了,下边我们就得诶细致的来进行说明这个过程,我们现在的话呢,想更新做一个更新操作的一个事物,那我们首先呢,需要从那个磁盘当中把你更新这个事物对应的那个表中的那个数据呢,是不是先加载到我们这个内存当中啊,诶放到我们这个B分铺当中是吧,这是第一步,然后呢,你这个事物呢,对应的这个句操作是不是内存中这个数据呢,就做修改了,好,修改完以后啊,咱们说了啊,是不是你得先呢,叫呃这个right handlo是吧,诶你得先去写入我们这个日志文件啊。所以说呢,诶,在我们这个内存中改了以后呢,第二步呢,就是我们先去在内存层面这个redo log buffer当中做一个记录。
05:04
啊,这个注意咱们上面也讲了,假设呢,我们这个事物呢,是不是有多条的一个语句在我们这个事物的执行过程当中,诶,这个第二步呢,是不是就开始做了呀,而不是说事物commit以后他才做的啊,执行过程当中他就开始去记录了啊,这是我们的第二步,那记录完以后的话呢,我们下一步的话呢,就是把内存层面的你这个relo buffer中的数据呢,是不是把它呢,写入到我们这个磁盘中的re lock file中啊。哎,先写到这儿,然后的话呢,你再以一定的这种频率呢,去把你内存中这个数据的一个修改呢,再去诶刷盘到我们这个磁盘当中,哎,我们所谓的呢,叫做呃,Right logging,咱们只能是诶他优先其次是吧,是这样的一个策略。哎,这样一个策略,好,那这呢,是不是就清楚这个过程了,没问题是吧,好。那么下面的话呢,我们就提一下叫re lock的一个刷盘策略啊,这块大家会说,诶这个刷盘策略主要的是指的是谁呀?诶注意咱们主要指的呢,是这个过程。诶主要指的是这个过程啊,为什么说它是它呢?或者为什么我们核心关注是它呢?诶大家你想哈,这个咱们只要是把内存层面这个数据的修改,就是你这个事物涉及到的啊,只要是我们记录到了这个redo lock file当中,你这时候呢,是不是就放100个心就可以了。
06:17
因为我们既然都写到这个文件里了,然后呢,不管你这个MYSQL服务器挂了,还是你这个整个操作系统挂了,我都。不担心是吧,因为我们这个呃,修改的这些数据呢,是不是已经都持久化了,呃,我们这个MYSQL服务器呢,在这个启动以后呢,我们只需要呢,是不是呃,用这个文件来做一个恢复就可以了。诶,只要呢是记录到这儿就行,那现在的关键问题就是我们内存中这块一修改这个redolog buffer呢就改了,我们现在呢,特别担心的点就是你什么时候会把这个redolo b分钟的数据呢,是不是刷新到我们redo lock file里啊,这个呢过程我们是提心吊胆的,你别出事啊,这个你只要不出事儿,后边呢就不会有事儿,就能够保证事物的一个持久性。
07:01
哎,这个大家明白吧。好,那么这个明白的话呢,咱们下边呢,就重点来看这个过程什么时候刷盘,所以这个呢,我们指的刷盘呢,是从内存的redolo buffer中刷盘到redolo这个file当中的。啊,不是说那是我们这个刷盘啊,这个注意不是我们这个四这个步骤,咱们现在讲的这个刷盘呢,指的是这个三这个步骤。好,那么怎么刷呢?诶这里边儿就提到了,说呢,Redo buffer呢,刷新到这个文件中的这个,呃,过程首先呢,咱们首先指明不是真正意义上刷新到磁盘,诶这这这是啥意思呢?诶这呢,主要还涉及到呢,我们要刷新到这个文件系统缓存叫做配置catch中这个呢,是由于咱们现在的操作系统呢,为了提高文件写入的效率啊,它做了一个优化。啊,就相当于呢,咱们现在要讲这个事儿吧,还挺麻烦的啊,你说什么时候刷,诶是不是一两种方案就完了,结果呢,还麻烦一点,因为呢,我们要往这刷的时候呢,先得过一下谁啊叫做诶配置catch啊叫做文件系统的缓存,然后呢,诶由这个我们的操作系统它来决定呢,诶怎么或者什么时候呢,把这个文件系统缓存的这个数据呢,再刷到我们磁盘中的这个file中。
08:10
啊,这呢,相当于是操作系统呢,它做了一个优化啊这样一个行为,所以我们现在要谈这个刷盘的操作呢,是不是,诶原来以为是一个过程,现在其实是两个过程,对吧?诶这是一个事儿,叫配置cash,然后这是一个事儿啊这俩事儿好,那么针对这个刷盘的这个策略呢,我们就提供了一个参数叫做DB at trans,就是当我们在这个事务提交的时候呢,我们该如何呢去刷新我们这个日志。哎,这个呢,针对的就是我们这个log日志了。好,那么有这样的三种策略啊,三种策略咱们呢,先来说这个一啊,也是咱们说这个默认的行为啊,咱们在讲这个啊,是不是这个调优的时候呢,咱们也提过这个参数了啊,大家不知道还有没有印象啊,咱们讲这个参数测试的时候呢,其中有一个是不是就提到了它了,诶当时呢,咱们这个讲解的时候呢,实际上是范范一说啊,包括这个我们log buffer这个size是吧,这都是范范一说,咱们下边呢,相当于是诶这个正式的呢,在讲这个参数他应该如何呢去使用啊。
09:04
好,那默认质量是一。就表示呢,就是每次事务提交时呢,都将进行这个同步啊,刷盘的这样一个行为啊,也就是说呢,诶我们这儿呢,是不是从这个buff份当中诶到我们这个配置开当中,然后再到我们这个five当中,就每当我们去做一个commit啊,这个事务一提交了,因为呢,我们这个呢,实施的这块呢,都在呃你事务的执行过程当中,这块都已经记录了啊,只要我们的话呢,这块呢就会提交到这个配cash,然后配cash呢,马上呢就会去呃刷新到我们这个度file当中。那就相当于这块呢,是随着这个事务的提交来进行这个操作。那这个操作的话呢,其实大家也能够整体感受得到啊,他这个呃保障还是比较好的啊,因为我们只要一提交了,这马上是不是就呃考虑做这个事儿,那这时候我们这个呢,文件当中这个数据呢,还是比较有保障的,对吧?啊OK啊好,这呢是咱们一个默认的值啊等一下下边咱们说这个详细的这个这个这个情况啊,然后呢,接着还有两种情况,一个呢叫职位零,一个呢叫职位二,职位零呢,就是表示每次事务提交时呢,不进行这个刷盘操作。
10:08
啊,就相当于我们现在呢,诶你不是,呃一到这儿,然后这儿呢,再到这儿是吧,这个叫配置catchche了,呃这个零的时候怎么办呢?诶我们师傅在提交的时候呢,他也不主动的去做这个事儿,他也不主动去做事这个事。诶就相当于啊,有点像说什么也没做是吧?哎呀,那大家会想,那到底什么时候去这个做这个刷新啊,诶这里边就提到了一个点啊,这块呢,稍微有点绕啊,大家看有提到点,就这DB啊存储引擎它有一个后台这个线程,这个线程呢,它每隔一秒就会把呢lock buffer中的内容呢写入到这个文件系统的缓存当中,然后呢,就调用这个刷盘的操作了。诶,我这呢还画了个图,诶重做日志缓存,然后呢,诶每隔一秒钟它就会刷新到我们这个文件系统啊,这个叫配置catch当中,然后呢,诶再去同步到我们这个度这个file当中。啊,那也就是说呢,如果我们这个位置设置是零的话呢,因为呢,你这个提交事故呢,它没有任何的操作行为,那实际上就意味着是不是就会执行这样一个行为了,因为这是默认的了,那就意味着呢,咱们相当于是啊,如果我还在这块画的话呢,啊就相当于是呢,从这到这儿,这到这儿。
11:11
啊,那就是变成了是不是每隔一秒的行为啊,诶你每隔一秒呢,就我不管你这块呢,你这个事务提交了,还是这个没提交,因为这块呢,你没有这个事务提交上的这样的一个作为了,那我就是每隔一秒诶往这块呢刷一下,然后随后呢就把这个呢也做了,就是每隔一秒的这样的一个行为。啊OK好,这呢是这个零,然后一的呃二的话呢,就是每次事物提交时,哎,你每次事物提交时都会把那redo log buffer中的内容呢写入到这个,诶这叫配置catch当中,但是后边的话呢,那就不管了,那后边就不管了,诶那就意味着说咱们相当于呢是呃我呢就是只要一提交十物啊,我就马上呢把这个B呢就直接更新到我们这个叫配catch当中了。然后在之后这个事儿呢,我就不做了,那这个事儿你不做的话呢,那是不是又交交给这个操作系统啊,那操作系统的话呢,相当于是诶每隔比如说一秒钟的时候,诶他就把这个配置cat中的数据呢刷到这啊就成这样的行为了。
12:06
哎,所以这块呢,看着是稍微的有点绕是吧,那具体这个细节呢,等下咱们再给大家阐述一下啊,那首先的话呢,我们来看一看这个默认的这个参数的一个行为啊,回到这块我们还站到这儿。哎,走起就是默认的这个值呢,就是一是吧,哎,默认这个值是一啊,这个一的这种行为呢,其实对于我们这个持久性的保证呢,是最好的安全性最好啊,但是这个性能呢,稍微差一点,那那下面咱们哎来说一下这样一个问题啊。呃,诶刚才呢,我们提到了一下这个情况是什么呢?就是咱们有一个这个后台的这个,呃,这样的一个线程是吧?诶会帮我们去做这个事儿啊,他这是一个默认的行为,那那要有这个默认行为这个存在的话呢,就会出现一个什么情况呢?说一个没有提交事物的这个redolo啊,也会出现这个刷盘啊,其实就针对我们这个刚才参数呢为零的时候。是吧,这个参数为零的时候呢,他在提交的事物提交的时候呢,就不会去做这个刷盘了,那那那那这个数据会刷吗?会刷,那其实就是由于我们后台这个是不是每隔一秒做这个事儿来决定的,是吧?诶这个图呢,我就相当于重绘了一遍啊,诶每隔一秒去做这个事儿。
13:09
啊,这个呢已经清楚了,然后下边的话呢,咱们把这个呃,每一个这个刷盘策略呢,稍微的再说一说啊这块呢,稍微有一点这个难度,因为不是我们简单的直接呢,从我们这个log buffer中直接呢叫呃log file当中了,中间呢还有一个叫配置catch是吧,文件系统缓存啊当你要是一的时候呢,呃,相当于呢,就是我们每次,诶注意这里边呢,咱们前面说过了,这个只要你去更新这个数据啊,我们这个呢,Redolo buffer呢,这块呢,是不是实时的就在做记录是吧?诶实时做记录就是从写入这个redo lock buffer的这块呢,你不用去担心啊,这实时的去做的,跟我们这个参数没有关系啊,我们这个设置唯一的诶,它影响的是当我们在提交事物的时候,我事务一提交。啊,那这个时候的话呢,我们这个瑞多佬ber呢,呃两眼一瞪说哎呀,这个我现在接着该干什么事儿呢?诶这时候呢,就看这个事几了啊这时候呢是一是吧,你是一的话呢,就相当于我们就主动的刷盘,相当于我一提交你就呢马上呢是写到这儿,然后你马上呢去做刷盘。
14:05
那就就这个事儿,当然这里边儿的话呢,也跟我们这个事物呢,你到底它这个持续时间内有关系哈,你比如说你持续了两秒钟,那其实呢,是不是每隔一秒人家就刷了一次,你要执行的是0.5秒,那相当于是呢,还没到这一秒钟到的时候呢,是不是就已经诶做这样的操作了,是吧?诶这里边有这样的一个情况啊。好,这个呢,就是马上马上这样一个事儿,好那么这种情况的话呢,说咱们能够保证呢,是什么呢,就是整体来讲的话呢,是会更安全的,诶大家怎么去理解这个事儿啊,你比如说只要我们这个事物提交成功了,因为呢,我只要一提交成功,马上就马上就做这个事儿,马上就做这个事儿,你可以理解成了我们这个数据呢,就完全呢,就只要你提交这块呢,就立马写到这里了,只要写到这里了。我们是不是就放100个心,你这时候你谁爱挂,你挂哪搜Q挂没问题,操作系统挂了没问题是吧?诶这个我们数据已经都持久化了啊,然后呢,你接着就恢复就完了是吧?啊这是一个,那如果说我们这个数没提交呢。诶我们往这里边咔咔一顿写是吧,然后呢,15没提交这种呢,服务器挂了挂了就挂了,诶你挂了我们这个呢,数据呢,内存中呢就没有了,不要了,诶你这块因为你也没提交,那这块呢,就是呃,你15之前的这个最初状态是不是也是合情合理的呀。
15:11
诶所以也没关系,所以说我们这个是一的这种情况呢,就完全能够保证我们这个事物的一个持久化啊,这个安全性呢是最好的,但是呢,它这个,诶我们说这个这个叫什么呀,它的这个效率呢,会稍微的差一些哈。效率会稍微的差一些,嗯,这个大家是注意一下这个问题。好,那么下边的话呢,咱们来看一下这个值设置成二的这样一个场景啊,值是二,这个场景是什么呢?就是我们这块呢,还是啊,在你更新这个数据的过程当中,我们这个redo buffer呢,这个该改还都改着是吧,同步的记录着,诶我们接下来呢,你这块事事物咔一提交我们这块呢,哈,两眼一瞪说我到底该怎么办呢?这时一看这个质量还12,诶这个二呢,意味着就是我们呃马上呢就会把这个呃这个这个这个呃内存当中的LOCK8分钟的数据呢,我们去呃把它呢更新到咱们的这个配置catch当中。
16:03
啊,我就更新到这儿了啊,马上就更新,诶但是的话呢,接下来这个什么时候呢,是把这个数据刷盘到我们这个re这个file当中呢,这个呢,就看我们后台的线程了啊,我这个我就不管了,这就跟咱们那个一的一个区别。啊跟进这个区别,那这个的话呢,是不是每秒一次啊啊那如果说我们这个事故呢,假设哈,就是0.5秒就执行完了,相当于呢,你这个一开头一开始的执行到这块0.5秒,我们现在0.5秒到的时候呢,是不是你一提交15马上就跟到这儿了,然后呢,诶再等了0.5秒之后呢,诶是不是把这个事呢给做了呀。哎,就这样个情况,哎就这样个情况啊好,那么这种情况呢,相较我们说的第一种情况呢,会有哪些风险呢?啊会有哪些风险呢?诶大家你想哈,诶我们呢,就是在提交事物了,主要呢,咱们考虑的是不是就这个事物给提交了是吧?我一提交的时候呢,诶他马上就把这个事呢做到这儿了,但是做到这儿的时候呢,其实是不保险的,对吧?不保险,那我们不是说呢,诶假设呢,0.5秒啊把这个事物做完了,是不是有0.5秒的这个时间,他去做这个之后呢,才会做这个刷盘是吧?那么在这个0.5秒之内呢,假设啊咱们MYSQL数据库服务器呢挂了。
17:09
哎,你说他挂了会受影响吗?诶他挂的话呢,注意它会影响我们这块的东西是吧?诶这块的东西相当于呢,你这个,诶redo lock buffer这块呢就不靠谱了,但是呢,你现在注意我们,呃,在提交事务的时候呢,是不是已经把这个数据呢,更新到我们叫文件系统缓存了,这个呢,是不是已经归这个操作系统管了,DID呢,就是你MY服务器呢,挂了没关系,数据呢,是不是已经还在这儿了。诶这个是,诶不受影响的啊,但是呢,如果我们操作系统要是挂了的话,操作系统要挂了,是不是这个就挂了,这个挂了话呢,意味着我们当前的你这个失误啊,这个事物的话呢,相当于就没有呢,保存在我们这个redo这个file当中了,相当于呢,就是我们这个,呃,参数这个值是二的时候呢,呃,只要你操作系统别挂就行,操作系统不挂,MYSQL服务器挂了,哎这个时候呢,我们仍然保证呢,是叫持久化。啊,但是我们说这个,呃,操作系统这个挂的这种概率呢,还是比较低的是吧,还是比较低的啊,但是呢,毕竟呢,也算是有一定的风险吧,是吧,只能这么说啊,只能这么说。
18:11
好,这个呢,就是我们说的这样的一个场景啊,然后的话呢,我们要设置成是零的啊,这个零的话呢,那那确实就就。放飞了就是吧,诶我们这时候呢,你操作我们这个事物的时候呢,这块儿呢,你改个什么东西,我们这块呢,就同步的去记录一下,然后当你这块儿呢,去提交事物的时候呢,这块呢一看,哎呀我这时候该怎么办呢?诶一看哎要是零好那我就不管了是吧,那相当于这时候呢,重做日志呢,他不会马上去做下边这个事儿,而是呢,交给我们后台的这个线程,后台这线程的话呢,就每隔一秒钟诶写入一次。呃,然后的话呢,诶,他后边呢,就决定了我们写到这个文件里边,诶就是这样的一个过程啊,这个过程呢,相当于是最放飞了是吧?哎这样个场景,诶相当于呢,我们就不太能够保证这个数据的一个,呃是不是这个数据的一个安全性,它也会丢失,有丢失这个数据的这种风险。没问题的是吧,啊,这就我们说的这样一个场景啊,好,那么这个呢,我们从理论上呢就说清楚了,那么接下来的话呢,咱们来给大家呢去做一个举例,这个例子的话呢,就想体现一下说我们设置这个参数的值是不一样的,那么对于我们在呃,演示这个事物行为的时候呢来说,这个时间差别啊,大概是有多少啊,大家宏观上呢,有一个这样的一个概念啊,那么这时候呢,咱们就拿一个表来说明了啊,这呢是我们这样一个表啊,我就直接放在咱们这个里边啊。
19:25
啊,这个咱们是不是该这个幺零了啊,这个叫呃事物哎日志啊,先把这个粘过来好,这个呢,我们先CTRLCCTRLS。啊,CTRLV啊先保存一下啊好,那咱们使用一下啊,这个我写一个U啊,啊艾特硅谷DB3使用一下我们这个艾特硅谷DB3这样的一个数据库。OK,然后这里边儿呢,没有我们这个t log啊,咱们把这个创建一下啊,走起。啊,这个都比较简单是吧,创建个表,然后呢,我往这个表里边呢,去演示呢,插入数据这样的行为,所以呢,首先我们提供一个这个存储过程啊,CTRLC一下啊这个呢都比较简单,我就直接说了啊哎,把它呢做一个执行,这个呢相当于把我们这个存储过程呢,先创建好是吧?哎,这个我们是创建。
20:07
哎,存储过程啊,用于。哎笑哎,我们这个人啊叫test log中load中啊添加数据。好,那么这个存储过程呢,我们创建好了,然后接下来的话呢,我们就相当于是要调用啊这个存储过程。看存储过程好,那就是通过这个car呢去调用了,这个比较简单,我就直接拿过来了啊好在这CTRLC一下。哎,在这是不是做这个调用是吧?哎先别着急调用,哎我们怎么着呢,哎先呢去设置。诶,设置并查看。哎,我们刚才呢,说的这个参数啊,哎,把这个参数呢,我们拿过来是不是叫。哎,这个啊,DB啊,Flash log at transaction commit啊,这个比较长啊。拿过来好行,那么这个时候呢,我们,诶这个添加对我们现在主要就看这个添加的过程当中啊,这块的一个更新行为啊,首先我们去show一下啊variables。
21:07
Variables are like。诶粘过来,诶这么着对吧?好,然后我们把它那选中做一个执行,那这时候这个值呢是一没问题,好然后呢,我们做这个设置啊呃,设置咱们就set了,说set我不用这个global,那就是相当于S了啊,直接呢把它改成是一个,呃,咱们相当于就还是一了是吧,没必要改了哈啊只是我相在这块说一下,这个呢,你要是这样去写的话呢,它会给你报一个信息,说我们这个变量的话呢,它必须是一个格global卜级别的啊,所以你要是想设的话呢,记得一定加上这个格global卜啊这个我就不用设了,因为本身就是一是吧,好,这个我们就暂时呢先把它的这个诶注释一下了,好,它在是这个一的这个情况下呢,诶咱们看一看,我现在呢,去做这个call的一个调用呢,花费这个时间啊,那我们这块呢,就得看一看这个插入的行为是什么样子的一个细节啊,大家来看一下我这个存储过程。这呢是我们这个表,我呢往这个表里边呢,是不是就插入这个去插入一个数据是吧?哎,这个位置呢,我写成是个no了,哎针对的就是相当于我们这个A是吧,这个no,然后这个呢,写的是个CC呢,就是比较长的这样的一个呃字串了啊这个让这A呢重复了80次是吧?这样的一个串啊行,那么我们每什么呀,哎,我每隐色一下的话呢,诶这时候你看我就做了一个commit,相当于我这儿呢,如果是插入了3万条数据,相当于是不是有3万个这个事物。
22:20
啊,去做这个执行是这意思吧,哎,大家体会一下这样一个情况啊好,那么下边呢,我就把这个呢做一个执行,哎,来走起。这个时间的话呢,花的时间呢,会长一点啊,会长一点,所以这块呢,我先做一个暂停啊,这块呢是目前是五点钟。好可以了,诶这块呢,大家会看到整个我们花费的时间呢,是一分钟28秒,诶我把它呢,这块稍微的截一下啊,我把这样盯一下,诶放在这儿,这个呢是针对的咱们是这个参数的值是一的这个场景下,诶它花费的这个时间,也就是我们所谓的这个默认的这个情况下,对吧?诶这块呢,大家诶这个其实我写到这儿也行啊哎,一分钟,然后呢,28哎秒,嗯,这个我就都写成英文吧,啊second,那这个就OK了,然后接着来我们再去测试其他的一个场景啊,诶测试二。
23:10
这个咱们下面呢,叫测试一。哎,测试一好,那么这个测试二的话呢,咱们需要做的事呢,首先哎,咱们使用这个tnket啊,把这个表中的数据呢,咱们先做一个清空nket table啊,Test这个load load啊。啊,做一个执行。那没问题了,咱们也稍微的搂一眼啊,Select这个count一个,诶,Count一个星。嘿,From一下。好,选中。哎,执行,嗯,From这个A写错了吗。呃,C来啊,刚才选中的时候应该少选个S啊好,这时候呢,表里边是没有数据的,那么在这个情况下呢,咱们去做一个设置啊,我们CTRLC一下。啊,CTRLV粘过来,这时候呢,我先把它改成是零吧,好选中啊走起,然后呢,我们再去查看一下啊,CTRLC这个我们都拿过来。
24:09
查看一下当前这个变量的这个值,好确实已经是零了,那么在它是零的这个情况下呢,我们是不是还接着去调用这个存储过程对吧?好我们粘过来啊,这个时间呢,我们看看这时候呢会变成多少来选中。哎,走起。啊,这个时间的话呢,怎么也得有几十秒啊,所以这块我也稍微的暂停一下吧。啊可以了啊,那这块的话,我们发现呢,它这个执行呢,花了叫37.945秒,哎这样一个时间啊,然后把它呢,诶粘过来,那这时候呢,大家能够对比出来呢,他俩的时间你看还是有这个差别的,对吧?哎,我们此时呢,稍微的说明一下啊,在我们这个参数呢,是这个值的这个情况下。哎,我们花费的这个时间呢,是这么多。还吃这么多?好诶,那么这呢,咱们只执行了相当于是3万条数据,按说呢,还不算特别多,诶你会发现呢,这个时间的差别呢,大概呢,应该是呃1:3这样的一个关系了,好那么咱们再接着去测试啊,咱们测试一下这个值呢,是二的这个情况啊,CTRLC一下啊完整的我把它呢复制过来,这咱们是测试这个三的这种啊第三种测试,首先呢,把我们这个表中的,诶这个你也想看一下的话,我们来先看一下是不是3万条数据没问题是吧?好,那我们把这个数据再清空一下。
25:20
然后呢,再去做这个查看啊,没有数据了,呃,因为这个清空操作呢,它相当于是做过这个事物的一个commit,所以我们再去测试的时候呢,其实不会有什么影响啊,表中的数据呢,每一次都是完全空的啊,一个新的事物开始的好,那此时的话呢,我们把这个值呢改成是个二。来选中了做个执行。啊,执行完以后的话呢,我们再去查看一下这个质量,看是不是二啊没有问题是二,然后接着我们再去调这个存储过程,看看此时呢,花费这个时间呢,还是多少对吧?哎,选中。哎,走起。来我们这块呢,也是再暂停一下。好了可以了是吧,哎,那这块呢,我们看到花费的这个时间呢,是这个,诶45秒多的这个时间,相当于呢,正好介呃介于呢,我们这个是一的这个值的情况,和这个零的这个值的这个情况,对吧?啊那么应该来讲的话呢,我们设置为是这个零或者是这个二的时候呢,它俩的时间呢,算是比较接近的,都比我们设置为一的这种时间呢,是要更少的。
26:15
而这一呢,是我们的一个默认行为,诶默认呢,相当于它一定是比我们这个零和二呢花的时间更多,但是它能够保证的什么呀,我们真正意义上的这个数据的安全性,或者我们所谓的叫诶事物的一个持久性,是真正意义上能够保证的啊,咱们也说了,为什么了,刚才也说到了对吧?诶所以呢,从这个呃实际情况来看的话呢,虽然说它的时间最多,但是呢,咱们还是建议大家哈。建议大家的话呢,是相较于零和二来讲呢,我们去选择这个一啊,选择这一啊,除非呢,就是面对了咱们像上一章呢,讲的这个案例的这种场景啊,因为我们说的这个服务器啊,宕机的这种场景呢,还是比较少出现的,诶我们可以考虑呢这个,嗯,比如说是降低一下我们这个CPU的这个使用频率啊,咱们可以呢,考虑把这个值呢做一个修改啊,当时呢,咱们讲这个数据库调案例的时候呢,我们把这个一呢,是不是改成了二了。
27:04
诶是这样一个场景啊,OK,那这块呢,大家针对于他们几个效率啊,还有这个安全性的问题啊,诶咱们已经讲过了啊,整体上有一个直观啊,跟我这块呢,整体来测的这个数据的这个情况呢,其实差不太多啊,你看极其接近啊。那么刚才我们在演示的时候呢,呃,虽然我说了一下,说这个数据量呢,3万其实不算太多,但是呢,从另外一个角度来讲呢,咱们这里边儿执行的时候呢,其实花时间花到哪儿了?因为我们每啊做一个操作呢,是不是就做了一个commit,相当于呢,咱们这里边有3万个这样的一个事物了,对吧?诶单纯针对我们这个题目来讲的话呢,如果我们想插入三条数据呢,其实你应该把他们整体是不是看成一个事物来操作,不要呢,每次执行完一个隐L,我们去commit一下,这个肯定花的时间要多啊,3万个完了以后呢,你是不是再去做这个commit。啊,这个时候呢,是不是要更靠谱一点是吧?啊这个呢,就是针对我们这个呃题目来讲,咱这个题目呢,要测的就是想让他事物多一点,呃想把这个呃每个事物呢,诶多花的一点时间呢,累积起来,一共3万个呢,看看它的一个差别的大小啊这个大家懂我现在要说的意思就可以了啊好,那么这样的话呢,咱们就把这个呃整个刷盘的这个策略啊,哎,咱们就说清楚了。
我来说两句