一次难忘的在线大表表结构修改

背景介绍:

服务器 252GMem 40CPU SSD盘

小编所使用的mysql版本是5.6.25

mysql> select count(*) from  CISXX_DATA_XXX;
+-----------+
| count(*)  |
+-----------+
| 110908162 |
+-----------+
1 row in set (1 min 27.38 sec)

mysql> desc  CISXX_DATA_XXX;

82 rows in set (0.01 sec)

第一次尝试直接加索引

mysql> alter table CISXX_DATA_XXX add column `RESERVED1` varchar(20) NOT NULL DEFAULT ‘‘ COMMENT ‘预留字段1‘,
    -> add  column `RESERVED2` varchar(20) NOT NULL DEFAULT ‘‘ COMMENT ‘预留字段2‘,
    -> add  column `RESERVED3` varchar(20) NOT NULL DEFAULT ‘‘ COMMENT ‘预留字段3‘;
ERROR 1878 (HY000): Temporary file write failure.

由于表太大,产生的临时表已经超出了 /目录下的磁盘限制。

第二次尝试新建表

修改新表结构,然后通过insert….select….方式导入数据

create table tmp_CISXX_DATA_XXX_20160620 (

……

);

insert into tmp_CISXX_DATA_XXX_20160620(

….

)select

from CISXX_DATA_XXX;

在数据导入的过程中,新开一个会话。测试本次建表过程对cis_data_tag表加的是什么锁。测试结果如下图:

由此可知,通过这种方式给cis_data_tag加的是一个共享锁。

在数据导入的过程中

服务器的负载如下:

磁盘读写压力情况:

在导数过程中发现/目录下的磁盘空间还是报警了

于是kill掉导数进程,执行kill掉操作后,发现服务器上的内存和磁盘使用率还是在不断上涨。于是再次尝试kill。再次尝试还是失败。小编意识到问题可能严峻了。如果系统资源一直这么消耗小去,会不会导致服务器挂机。oh no,这可是主库啊,要是挂机的话就意味着会影响生产业务。现在最主要的是要停止这恐怖的导数操作。正在小编想办法的时候,发现内存和磁盘空间资源开始释放。估计是和第一次尝试一样。但磁盘空间到达100%时,该导数进程就被服务器给终止掉了。

第三次尝试修改:

在第二尝试的基础上,小编是不会再在主库上执行这种操作了,同时意识到要操作的表实在太大。而/的磁盘空间又实在太小,必须要更改mysql临时空间的设置。于是整理了如下的解决方案

检查修改前中

内存的使用率一直在上涨,增长了72G

临时目录所在磁盘目录一直在上涨,增长了72G

磁盘的读写率达到了589836.00  wsec/s 172812.00 rsec/s

该表所占的物理文件大小也就48G

在建索引的过程中,小编发现,现在mysql居然支持在线DDL操作,即不会堵塞其它请求。请看:

这真的是个非常非常伟大的发现,mysql果然进步了。但是听说mysql只有部分表结构的修改是支持在线的,真是遗憾。

翻阅官方文档,可以了解更详细的信息:

参考链接:http://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-overview.html

修改一张2千万的表添加字段和加索引所需的时间参考:

修改一张一亿的表添加字段和加索引所需的时间参考:

时间: 2024-11-05 04:51:34

一次难忘的在线大表表结构修改的相关文章

MySQL如何妥善更改大表表结构(Alter table structure of a single column

MySQL如何妥善更改大表表结构(Alter table structure of a single column http://blog.sina.com.cn/s/blog_445e807b0101egpf.html 在网上搜到的一段很有帮助的三段脚本,贴出来供参考,以飨读者,做个笔记:##  Script 1#  Alter table structure of a single column of a large table#CREATE TABLE WorkingTableNew LI

MySQL 设计规范(续)

1.1    数据库字段设计规范 优先选择符合存储需要的最小的数据类型: 对于非负数据采用无符号整型进行存储: varchar(N)中N代表字符数,不是字节数(Oracle中是字节数,如中文GBK下2字节存一个汉字),即MySQL中varchar(2)可存储2个汉字,占用6个字节(UTF8). 避免使用text,blob数据类型: 常见的text类型可存储64k,一般是使用不到这么大空间: 非要使用,建议把blob或text列分离到单独的扩展表中,且避免使用select *; text, blo

MySQL 性能调优——SQL 查询优化

如何设计最优的数据库表结构,如何建立最好的索引,以及如何扩展数据库的查询,这些对于高性能来说都是必不可少的.但是只有这些还不够,要获得良好的数据库性能,我们还要设计合理的数据库查询,如果查询设计的很糟糕,即使增加再多的只读从库,表结构设计的再合理,索引再合适,只要查询不能使用到这些东西,也无法实现高性能的查询.所以说查询优化,索引优化,库表结构优化需要齐头并进. 在进行库表结构设计时,我们要考虑到以后的查询要如何的使用这些表,同样,编写 SQL 语句的时候也要考虑到如何使用到目前已经存在的索引,

Visual Studio 2015和.Net 2015 预览版在线安装和ISO镜像安装光盘下载

Visual Studio 2015和.Net 2015 预览版在线安装和ISO镜像安装光盘下载 微软刚刚宣布了 Visual Studio 2015和.Net 2015 预览版,并同时提供了下载. 微软在纽约正进行中的#Connect# 全球开发者在线大会上宣布了Visual Studio 2015 和.NET 2015预览版,将为开发者提供构建跨多个平台应用程序的新功能,包括从Windows 到 Linux 到iOS,是的,以及到Android. 微软MSDN介绍称,目前移动开发者需要面对A

技术与架构,解析如何将大数据最快落地到实践

免费开通大数据服务:https://www.aliyun.com/product/odps 直播回顾: https://yq.aliyun.com/webinar/history?spm=5176.8067841.wnold.1.rLvSkQ 3月9日14点,业内首个结合技术与应用的在线大数据技术峰会即将展开,届时6位阿里技术大咖与4位行业资深实践者将从技术与业务两个方面,与大家探讨大数据如何最快落地到实践.较为有看点的是: 最深入的实践:本次在线峰会上,6个阿里规模的大数据实践将被深入分享,包

阿里ODPS降低大数据应用门槛

阿里云计算的ODPS从内部使用的工具变成了面向社会开放的大数据平台,开创了国内大数据公共服务的先河,降低了大数据在资金.人才和应用方面的门槛. 小型企业只要花费几百元就能进行海量数据分析,这是真的吗?阿里云计算的大数据平台ODPS可以让你梦想成真. 今年举行的阿里巴巴大数据竞赛,首次将ODPS和阿里的天池平台开放给参赛的大学生,这可以看成是ODPS商用的前奏.2014年1月,阿里云计算的ODPS服务开始公测.7月,ODSP正式开始商用.阿里云计算总裁王文彬认为,此举标志着中国的大数据已经进入公共

使用 pt-online-schema-change 实现在线DDL

问题背景 平时进行修改表的结构,更改字段,新增字段,更改字段名称一般都是通过ALTER TABLE  语法进行修改的.对于小表或者并发访问不是很大的情况是OK.但是如果是在线大表,那就很麻烦.由于表数据量大,复制表需要比较长的时间,在这个时间段里面,表是被加了锁的(写锁),加写锁时其他用户只能select表不能update.insert表.表数据量越大,耗时越长. mysql在线ddl(加字段.加索引等修改表结构之类的操作)过程如下: 对表加锁(表此时只读) 复制原表物理结构 修改表的物理结构

转行或零基础不知如何学大数据?来看看这份大数据课程大纲

大数据领域每年都会涌现出大量新的技术,成为大数据获取.存储.处理分析或可视化的有效手段.大数据技术能够将大规模数据中隐藏的信息和知识挖掘出来,为人类社会经济活动提供依据,提高各个领域的运行效率,甚至整个社会经济的集约化程度.正是由于大数据技术展现的优势 ,让越来越多的人选择进入到大数据行业,那么对于大数据技术的学习,应该怎么学呢?又有哪些内容要学呢? 大数据课程大致分为八大阶段,以下内容就是关于课程的概况,大家可以具体参考一下: 很多初学者,对大数据的概念都是模糊不清的,大数据是什么,能做什么,

pt-online-schema-change工具简介

1.工具简介 pt-online-schema-change是percona提供的一个mysql在线修改表结构的工具 2.使用场景 当需要修改线上数据库中某个表的表结构时,发现这个表的数据量比较大,如果使用alter table语句的话可能会阻塞较长的时间,那么可以考虑使用pt-online-schema-change在线修改表结构,而不用担心阻塞应用 3.工作原理 对于要修改表结构的表,pt-online-schema-change首先会创建一个该表的拷贝,这里只拷贝表结构而不涉及到数据,然后