paip.解决 数据库mysql增加列 字段很慢添加字段很慢
环境如下:
mysql5.6 数据仅仅3w
alter table xxx add column yyy int default 0;
添加字段很慢,好几份中都没有好。。
原因以及解决
[SQL] alter table grejx_def add column flag12 int default 0;
受影响的行: 0
不是那种lock–copoy–rewrite的方式.effeic row sh 0 ,为甚还是这么慢的是??
Oracle 11g的快速加字段功能就是好啊..
数据结构紊乱兰,只要不个table 优化给挂走ok兰。。
字谣0.3s走ok兰..
作者 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
mysql数据库添加字段或者修改结构过程如下
由于mysql在线ddl(加字段、加索引等修改表结构之类的操作)过程如下:
A.对表加锁(表此时只读)
B.复制原表物理结构
C.修改表的物理结构
D.把原表数据导入中间表中,数据同步完后,锁定中间表,并删除原表
E.rename中间表为原表
F.刷新数据字典,并释放锁
添加字段很慢
alter table grejx_def add column flag int default 0;
大的数据哈的解决
停掉mysql服务器来修改表结构。然后进行滚动式更新
Facebook数千台MySQL服务器在过去增加个索引需要几个月的滚动升级(后来他们自己开发了后面提到的工具,只需要几天)
在加字段之前进行测验mysql是否复制表,以减低应用卡死的风险:
在命令结束之后看看显示“rows affected “的值。例如,这里您可能会看到在做不同类型的DDL操作:
拷贝表结构,然后插入少量的数据。去修改表结构。看影响的行。如果为0,则表示不会拷贝中间表的方式
关于online-schema-change
是percona推出的一个针对mysql在线ddl的工具
新的思路(手动执行mysql的过程)
1:手动的创建好修改后的表结构 NEW_TAB。(比如新增字段,修改表字段类型。删除表字段,可以一并一次性搞定)
对于MyISAM表,您可以通过把myisam_sort_buffer_size系统变量设置到一个较高的值,来加快重新创建索引(该操作是变更 过程中速度最慢的一部分)的速度。
2: 选择性的将旧表OLD_TAB数据插入到修改后的表。(这里需要注意的是海量数据的处理。可以将表记录按照主键分批进行插入处理,其实在如果分表处理的话,在业务代码中也是可以进行修改处理的,分而治之。)
3:rename表名称。 (这里需要注意的是RENAME过程中的锁表,可以在业务空闲的凌晨晚上进行处理)。