艾宾浩斯30天计划表二年级用,亿级大表在线不锁表变更字段与索引

极简大道 极简大道 2023-02-15 古诗词记忆 阅读: 157
摘要: 【摘要】在业界中有一个比较成熟的工具,针对大表的场景,可以在线进行Alter变更,且不会出现锁表的风险。除此之外,它还有其他的一些优点,让我们开始探索吧。背景大家在日常工作中,往往需要对数据库的表结构做变更,一般涉及到增删字段,修改字段属性等ALTER的操作。然而,在大表场景下,特别是千万级、亿级的大表,如果处理不当。这些操作往往会引发锁表的巨大隐患,特别是在生产环境中,一旦在变更表结构过程中,出现了长时间锁表,会导致用户产生的数据长时间无法正常变更到表中,进而导致服务功能异常,结果将是灾难性的。

【摘要】在业界中有一个比较成熟的工具,针对大表的场景,可以在线进行Alter变更,且不会出现锁表的风险。除此之外,它还有其他的一些优点,让我们开始探索吧。

背景

大家在日常工作中,往往需要对数据库的表结构做变更,一般涉及到增删字段,修改字段属性等ALTER的操作。然而,在大表场景下,特别是千万级、亿级的大表,如果处理不当。这些操作往往会引发锁表的巨大隐患,特别是在生产环境中,一旦在变更表结构过程中,出现了长时间锁表,会导致用户产生的数据长时间无法正常变更到表中,进而导致服务功能异常,结果将是灾难性的。

一般执行这种Alter类型的变更,我们可能有以下的想法:

1、停服,在停服期间做表结构的变更,自然就可以防止对用户产生影响。但是,很多场景是不允许停服的。并且如果表的数据量达到上亿,那么需要停服时间可能需要十几个小时,甚至更长,这是极不现实的;

2、凌晨执行,在用户较少的时间段内,做变更,尽量减少对用户产生影响。但是如果出现锁表的话,万一有用户使用服务,服务将不可用;

3、使用换表,但是缺点是复制数据到新表期间,如果用户在这期间做了update或delete操作,且数据发生在已经复制完成的部分,那么将无法感知到这部分数据,导致丢失掉用户的操作数据,风险太大;

4、使用存储过程,缺点是执行时间会很久,且有可能影响到用户的DDL操作。因为为了防止每次循环修改时,锁住太多数据行,我们需要控制每次更新数据的行数,粒度不能太大,否则很有可能会锁住用户正在操作的数据行。

那么针对以上实际的需求,就没有一个很好的工具,来解决我们的痛点吗?其实在业界中,就有一个比较成熟的工具,针对大表的场景,可以在线进行Alter变更,且不会出现锁表的风险。除此之外,它还有其他的一些优点,让我们开始探索吧。

一、pt-osc是什么

pt-online-schema-change是Percona-toolkit一员,通过改进原生ddl的方式,达到不锁表在线修改表结构的效果。在Percona的官网中,关于pt-osc工具,也特别提到了ALTER表不会出现锁表的特性。

针对上面谈到的避免锁表、感知用户更新删除动作等,ps-osc工具是怎么解决的呢?

pt-osc主要执行步骤如下:

1、创建一个跟原表一模一样的新表,命名方式为'_正式表名_new';

2、使用alter语句将要变更的内容在新创建的新表上做变更,避免了对原表的alter操作;

3、在原表中创建3个触发器,分别是insert、update和delete,主要是用于原表在往新表复制数据时,如果用户有DDL操作,触发器能够将在这期间出现的DDL操作数据也写入到新表中,确保新表的数据是最新的,不会丢失掉用户的新操作数据

4、按块拷贝数据到新表,拷贝过程对数据行持有S锁;

5、重命名,将原表重命名为老表,命名为“_正式表名_old”,将新表重命名为正式表,可通过配置决定执行完成后是否删除掉老表;

6、删除3个触发器。

二、pt-osc的安装

在linux系统中安装步骤:


三、pt-osc的使用

pt-osc工具使用起来很简单,直接在linux命令行输入pt-osc格式的命令,即可直接执行。

以Mysql数据库增加一个名字是MARK的字段为例:

pt-online-schema-change --user="root" --password="*****" --host="数据库IP" --port=3306 --alter "ADD COLUMN MARK TINYINT NULL DEFAULT 1 COMMENT 'mark source region is 1';" D=my_test,t=t_test --no-drop-old-table --execute --print
--no-check-replication-filters --charset=utf8
--no-check-unique-key-change --max-load="Threads_running=100" --critical-load="Threads_running=300" --recursion-method=none;

在上面的语句中:

1、user和password分别为数据库执行变更操作的用户名、密码,需要高权限;

2、host为数据库的IP地址;

3、port为数据库的端口号;

4、alter后面跟上具体的alter语句;

5、D为database名字;

6、t为要执行变更的表名;

7、no-drop-old-table就是不要删除

8、charset,字符集,使用utf8;

9、max-load,在复制数据时,工具会监控数据库中正在运行的线程数,如果大于配置的Threads_running值,那么会暂停复制,直到小于该值。以此防止对数据库造成较大压力,影响现网业务正常使用;

10、critical-load,默认为50,在每个块之后检查SHOW GLOBAL STATUS,与max-load不同的是,如果负载太高,,直接中止,而不是暂停。可根据自己数据库情况斟酌配置阈值。

注意:在--alter后面跟着的变更语句中,列名不可以加`符号,否则会出现报错。如--alter"ADD COLUMN MARK TINYINT NULL DEFAULT 1 COMMENT 'mark source region is1';",MARK字段加了`符号,就会出现错误,COMMENT后面有`符号无影响。

下面是使用pt-osc工具,实际执行一个作业时,打印出来的信息。为了安全起见,部分日志信息做了隐藏忽略。




四、性能对比

前面介绍了很多pt-osc的优点,以及良好的特性。那么实际使用效果到底怎么样呢?在测试环境中,专门做了一个测试,让大家有更加直观的感受。

在测试库中,准备了一张1600万数据的大表,目标为对大表添加一个字段,分别使用存储过程和pt-osc工具,进行测试。

4.1 使用存储过程

首先使用存储过程做测试,为防止锁表,每次只更新200行。整个变更从开始到完成,需要耗费90分钟。其实,存储过程在执行过程中,如果恰好用户也在DDL操作存储过程正在变更的数据行,还有可能会锁住用户的数据,导致用户不能变更成功。

4.2 使用pt-osc工具

pt-osc从开始执行到变更完成,耗时7分钟左右,速度非常快。在执行的过程中,测试环境的服务连接到该数据库,并执行多个会操作该表的任务,整个过程中,任务能够正常执行,未出现异常情况。

5、结语

ps-osc的上述优点,在现网环境的不停服等要求下,能够优雅地帮助我们实施变更,且保证在变更期间,数据库不会受到锁表、过载等的影响,进而保证了业务能够正常运转。


本文分享自华为云社区《千万级、亿级大表在线不锁表变更字段与索引》,原文作者:active_zhao 。


点击关注,第一时间了解华为云新鲜技术~

其他相关

艾宾浩斯21天计划表,长庆油田采油十一厂高质量发展系列报道之四优质建产晒出亮眼“成绩单”-长庆油田采油十一厂产能建设工作护航高质量发展

作者: 极简大道 时间:2023-02-15 阅读: 169
11月24日,长庆油田采油十一厂产能建设项目组传来捷报,新井日产突破400吨,预计全年新井贡献率60%以上、新建产能内部收益率达到10%,充分发挥了新建产能对全厂产量和效益的正向拉动作用。产能建设是能源企业高质量发展的基础。带着“能源的饭碗必须端在自己手里”殷殷嘱托,2022年以来,采油十一厂紧密围绕高质量发展战略部署,强化党建引领,突出油藏基础研究,扎实开展管理提升、油田稳产、增储建产、效益挖潜、专项治理等工作,全力推进油田开发实现良性循环。...
高效背诵方法,一直搞不清楚in和exists两者到底有什么区别,今天总算搞清楚了

高效背诵方法,一直搞不清楚in和exists两者到底有什么区别,今天总算搞清楚了

作者: 极简大道 时间:2023-02-15 阅读: 160
使用MySql查询数据时,一直搞不清楚in和exists两者到底有什么区别,今天总算搞清楚了。...
六级单词艾宾浩斯30天计划表,塔里木油田如何啃下“世界上最难啃的骨头”

六级单词艾宾浩斯30天计划表,塔里木油田如何啃下“世界上最难啃的骨头”

作者: 极简大道 时间:2023-02-15 阅读: 174
光明日报记者王瑟2020年12月21日零时,位于新疆南部的中国石油塔里木油田年生产石油液体达600.01万吨,天然气达301.59亿立方米,油气当量达3003.12万吨,成为我国3000万吨大油气田和300亿立方米大气区。实现这一目标用了31年的时间。科技人员持续技术攻关,深化理论创新,挑战超深层勘探开发极限,创新形成了两项关键油气地质理论、四大勘探开发技术系列,突破了深层超深层复杂油气藏安全封隔、快速钻进、井完整性三大关键技术瓶颈,将国外“卡脖子”技术一一攻破。...

艾宾浩斯记忆曲线计划表,《新概念》英语学习方法完全手册,附赠经典版英音全册MP3

作者: 极简大道 时间:2023-02-15 阅读: 184
一、新概念选择英音还是美音?答:在书店购买的《新概念》配套磁带就是英音版,85年英音版由外研社出版。一般我们说的经典语音就是这个版本。这个也是最经典的版本(福利!!!有想要英音版MP3的小伙伴直接留言或私信我,全四册都有哦!!!)...

生命一号一般建议喝几盒,4大高考补脑神药,吃了后患无穷,家长们千万别相信!

作者: 极简大道 时间:2021-12-29 阅读: 1812
今天是高考的最后一天,结束以后各位家长想必可以长舒一口气。而在高考之前,有些家长喜欢给孩子吃一些所谓的“补脑神药”。...

年度爆文