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過程中的鎖表,可以在業務空閑的凌晨晚上進行處理)。
#參考
mysql在線修改表結構大數據表的風險與解決辦法歸納 - 王滔 - 博客園.htm
一個資料介紹online-schema-change這個工具,
MYSQL 在線DDL操作是否copying data - zuoxingyu - 博客園.htm
