00:00
今天的这堂课呢,就是来说一下这个更改表结构的技巧,还有一些注意事项。那么我们在日常的上线的时候呢,经常呢,研发会让加个字段啊,加个索引啊,更改个属性啊什么的。那么这里呢,就先明确一个问题。就是这个更改表结构要加什么锁。那这里呢,是首先需要获取这个原数据表索,那么呢,就比如说我们通过一个打开一个Excel这个例子来说一下,当用户A呢在翻阅的时候呢,那此时呢,如果B呢要增加一个列,这时候呢B呢。它是需要等待的,需要等待这个A翻译完以后,它才能去增加呢,否则呢。呃,这个用户A查询数据,它就会出现不一致。那么呢,这个就不符合这个事物的四大特性。那这里呢,我们通过一个案例,呃,来演示一下,嗯,那个什么叫MDL锁。
01:05
那我这里呢,有一条啊,有一个表叫体表,那么数据呢,就123。那么呢?我们这里呢,要执行一个就是先休眠1800秒,然后呢再返回这个三条记录。当我执行以后呢,我们到绘画壁上来看一眼。这里呢,他就需要先等待。哎呀,真是。12是吧,那这里呢,我们现在呢,要现在要增加,呃,执行这个更改表也够了,要加一条索引。当我按下回车以后,那么这个时候呢,这个加索引是不成功的,它需要等待,等待什么呀,等待这个。这个事物A要把这条语句执行完了以后,我才能去增加这个索引的,这个时候呢,就叫原数据索叫MDL。
02:07
我们通过执行这个show process list就可以看见。哎,这里呢,就会出现一个这条语句啊,等待这个锁,那么呢,现在呢,更危险的是什么呀。是我现在。对这个体表后续的啊,增删改查他都执行不了了。我们这里呢,随便一条很简单的填表查询。这里个这时候呢,它就会出现那个等待。他需要等待这个。二会话二截,嗯呃,加完索引以后,我才能去完成这个查询的。发现没有,现在这个雨区又被卡,又又出现卡顿了。我们到绘画四上再看一眼。
03:05
这时候你发现,哎,又多了一个。那么呢,如果呢,现在呢,生产成跑着业务呢,这时候呢,可能你就出现故障了。啊,那怎么去避免这个问题的发生呢?那么在这个玛雅迪币里啊,他对这个al语句啊。它添加了一个新的语法,叫no wait。啊,这样我们来先看一下那个官方文档,它它增加了就这些语语法。他都会增加一个no。加上这个nova以后呢,它就会能自动的去检测出来啊,当这个表有大查询的时候呢。啊,我们要执行这个al操作,它就会立即返回失败。呃,从而避免呢,刚才我们演示那些呃,那些故障。诶,当回车以后,它就会出现一句,啊,它现在已经检测出来了,它就自动的去退出了。
04:04
那么这个呢,是在这个马DB里头,那么在这个马赛克L8.0里呢,它是没有这种语法的,那这里呢,我是通过写了一个脚本。来去,呃,模拟这个。这个no way的。啊,这个功能。那么这个呢,就是我的写的脚本,那么我们这里呢,只需要改几个,把这些一改了,然后把这个你要执行那条那个修改表结构的思口往里一填就完事了。你先来看一下这个效果。哎,他就会。显示出啊,这个T表现在持有这个MTL原数据锁无法更改表结构,它就自动去退出了,然后呢,这里呢,它我这里呢,给出了一个,你可以自动把这条这个给杀死。
05:03
我们来看一下这个13啊啊。13就是这个process id13。就把这条语句就给杀了啊,给它杀掉,我们就可以加索引了。我们来看一眼啊。把这个ID这个只要一杀死了,就可以加索引了。那么通过我这个脚本呢,就可以呢,模拟一下这个玛亚DB的这个功能。那么这个时候呢?呃,如果呢,你知道这条语句没有什么用啊,可以安心的想去给他杀掉,那么你也可以执行这个脚本。把这个呢。变成一,它就会自动的去把刚才那条语句给杀死,并且呢,后续呢,会自动的去执行这个更改表结构。
06:01
那现在呢,我执行这条这个脚本。这时候呢,先把这条绘画A先给杀了,杀完以后呢,我们在这脚本会自动的去执行这个加索引。走。那这时候呢,你看先把这绘画先把这条语句先给杀掉,然后呢,并且呢,要把并且呢会执行加索引我们来。哎,来验证一下是否加成功了。哎,这时候呢,这个缩引已经加成功了。好,这个呢,就是我写的一个功能,大家呢,如果呢,你刚来公司不久。然后呢,对线上业务不是很熟悉的,你就可以安心的使我这个脚本。然后呢,就可以去加。放心的去那个加索引或者。然后呢,下面一个呢,就是。
07:00
嗯。来介绍一下这个买38.0这个。它有一个新特性,就就这个加字段快速加字段这个功能,那么这个灵活加字段这个,呃,这个算法呢,就是说它不需要修改这个存储,呃,存储层也不需要重建表,它只需要嗯,相当于在你的Excel里,它多多增加一个列。这样它它的执行效率非常非常快的,不论你这表有多大,比如一个亿也好啊,都无所谓,是瞬间就可以执行,执行完的,然后呢,我们可以通过这条语句呢。啊,来去验证一下。那比如说现在我要增加一个字段叫这个年龄,那这时候呢,我们先用这个。这个instant看看能否快速加。
08:03
哎,这里呢,就瞬间呢,就给它加完了,那比如说现在呢。现在上线。现在的研发呢,要想把这个我们这个cid啊。他想给改了,改成那个挖岔类型,我们来看一眼。这个灵活加字段是否还能成功呢?当我现在执行这条语句以后呢?他就发现哦,原来这个灵活加字段的功能呢,它只能用于这个增加字段或者是删除字段,如果呢,你要想改那个字段,那个属性呢,那需要拷贝了,这种方式呢,那就只能是锁选表了,那你就可以通过这个PT这个工具。啊,PT online change。
09:03
S这个功能,这个工具去加。那么呢,这里也是给大家介绍一下怎么去。这个在买8.0里呢,通过这种语法呢,我们来先检测一下,看看哪些呃更呃,哪些DDL是可以通过这个灵活加字段inan的这个算法,哪些呢是不可以。这里呢,是给大家呃一个小技巧,小技巧。来避免呢这个线上故障。那这节课呢,主要就是先讲的是。啊,第一个怎么去安全的去增加。嗯,哦,对,还有一个就是。嗯,也是线上一个问题就是,呃,我们要现在要加索引。那加索引呢,一般就是说,如果呢,我这个表很大,上千万条,比如说我在主库上执行了一条加索引,它需要耗时30分钟,那么呢,你要同步到重复呢,是不是也也得需要30分钟才能执行完呢?那这时候呢,这时也出现这个主从延迟了,那么怎么。
10:09
更好的去加呢,那么呢,你可以用这种方式,就是说先呢。啊,在那个存库上加。然后呢,再回到主库上加,然后这时候呢,我们只需要把这个主库让这个这个blo呢,先临时给关闭了,呃不让他去记这个blo,这样呢,我们就可以避免这个呃主从同步呃发生延迟了,那么这里呢,你也可以通过我这个脚本。你只需要改一下这个是否开启这blog啊,那那个零呢,是代表不关闭,一代表关闭,那你可以把这个设置为一,就代表先临时去关闭B,它这里呢,是就是执行了一个。这个命令。这个就叫临时关闭频道了,那这呢。
11:00
啊,这节课呢,就是给大家嗯,讲解了一下这个我们上线的时候呢,一些更改表结构的一些小技巧。嗯,这个算法呢,只有在买8.0里才有呢,5.7是不支持的,玛莉亚DB呢,是10.3就已经支持这个算法了。那今天我们的课呢,就到这儿了。
我来说两句