日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL 大表添加一列的實現

瀏覽:51日期:2023-10-06 08:06:22

問題參考自: https://www.zhihu.com/question/440231149 ,mysql中,一張表里有3億數據,未分表,要求是在這個大表里添加一列數據。數據庫不能停,并且還有增刪改操作。請問如何操作?答案為個人原創

以前老版本 MySQL 添加一列的方式:

ALTER TABLE 你的表 ADD COLUMN 新列 char(128);

會造成鎖表,簡易過程如下:

新建一個和 Table1 完全同構的 Table2 對表 Table1 加寫鎖 在表 Table2 上執行 ALTER TABLE 你的表 ADD COLUMN 新列 char(128) 將 Table1 中的數據拷貝到 Table2 將 Table2 重命名為 Table1 并移除 Table1,釋放所有相關的鎖

如果數據量特別特別大,那么鎖表時間很長,期間所有表更新都會阻塞,線上業務不能正常執行。

針對 MySQL 5.6(不包含)之前的版本,通過觸發器將一個表的更新在另一個表上重復,并進行數據同步,當數據同步完成時,業務上修改表名為新表并發布。業務不會暫停。觸發器設置類似于:

create trigger person_trigger_update AFTER UPDATE on 原有表 for each row begin set @x = 'trigger UPDATE';Replace into 新表 SELECT * from 原有表 where 新表.id = 原有表.id;END IF;end;

MySQL 5.6(包含) 以后的版本引入了在線 DDL 的功能:

Alter table 你的表 , ALGORITHM [=] {DEFAULT|INSTANT|INPLACE|COPY}, LOCK [=] { DEFAULT| NONE| SHARED| EXCLUSIVE }

其中的參數:

ALGORITHM:

DEFAULT:默認方式,在 MySQL 8.0中,如果未顯示指定 ALGORITHM,那么會優先選擇 INSTANT 算法,如果不行再使用 INPLACE 算法,如果不支持 INPLACE 算法則使用 COPY 的方式完成 INSTANT:8.0 中新添加的算法,添加列是立即返回。但是不能是虛擬列。這個原理很簡單,對于新建一列,表所有原有數據并不是立刻發生變化,只是在表字典里面記錄下這個列和默認值,對于默認的 Dynamic 行格式(其實就是 Compressed 的變種),如果更新了這一列則原有數據標記為刪除在末尾追加更新后的記錄。這樣做就是沒有提前預留出列空間,之后更新可能經常會發生行記錄空間變動。但是對于大多數業務,都是最近的時間的記錄才會修改,所以問題不大。 INPLACE:在原表上直接進行修改,不會拷貝臨時表,可以逐條記錄修改,不會產生大量的 undolog 以及 redolog,不會占用很多 buffer。可以避免重建表帶來的IO和CPU消耗,保證期間依然良好的性能和并發。 COPY:拷貝到臨時新表上進行修改。由于記錄拷貝,會產生大量的 undolog 以及 redolog,并占用很多 buffer,對業務性能有影響。

LOCK:

DEFAULT:和 ALGORITHM 的 DEFAULT 類似 NONE:無鎖,允許并發讀取和更新表 SHARED:共享鎖,允許讀取不允許更新 EXCLUSIVE:不允許讀取和更新

各個版本支持的在線 DDL 修改使用的算法的對比:

MySQL 大表添加一列的實現

參考文檔:

MySQL 5.6:https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-operations.htmlMySQL

5.7:https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.htmlMySQL

8.0:https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html

可以通過:

ALTER TABLE 你的表 ADD COLUMN 新列 char(128), ALGORITHM=INSTANT, LOCK=NONE;

類似的語句,實現在線增加字段。最好還是明確 ALGORITHM 以及 LOCK,這樣執行 DDL 的時候能明確知道到底會對線上業務有多大影響

同時,執行在線 DDL 的過程大概是:

MySQL 大表添加一列的實現

可以看出,在開始階段需要 metadata lock,metadata lock 是在 5.5 才引入到mysql,之前也有類似保護元數據的機制,只是沒有明確提出 metadata lock 概念而已。但是 5.5 之前版本(比如5.1)與5.5之后版本在保護元數據這塊有一個顯著的不同點是,5.1對于元數據的保護是語句級別的,5.5對于metadata的保護是事務級別的。所謂語句級別,即語句執行完成后,無論事務是否提交或回滾,其表結構可以被其他會話更新;而事務級別則是在事務結束后才釋放 metadata lock。

引入 metadata lock 后,主要解決了2個問題,一個是事務隔離問題,比如在可重復隔離級別下,會話A在2次查詢期間,會話B對表結構做了修改,兩次查詢結果就會不一致,無法滿足可重復讀的要求;另外一個是數據復制的問題,比如會話A執行了多條更新語句期間,另外一個會話B做了表結構變更并且先提交,就會導致 slave 在重做時,先重做 alter,再重做 update 時就會出現復制錯誤的現象。

如果當前有很多事務在執行,并且有那種包含大查詢的事務,例如:

START TRANSACTION;select count(*) from 你的表

這樣類似的會執行較長時間的事務,也會阻塞。

所以,原則上:

避免大事務 在業務低峰去做表結構變化

到此這篇關于MySQL 大表添加一列的實現的文章就介紹到這了,更多相關MySQL 大表添加一列內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情久久久久久久| 色吊丝一区二区| 天堂中文在线播放| 欧美国产视频| 日本欧美一区二区| 久久xxxx精品视频| 9国产精品视频| 欧美日韩免费看片| 日韩精品专区| 少妇久久久久| 欧美日韩中文字幕一区二区三区| 美女精品久久| 国产不卡精品在线| 欧美日韩国产v| 久久中文亚洲字幕| 蜜桃av在线播放| 日韩电影免费网址| 99精品综合| 鲁大师成人一区二区三区| 99国产精品视频免费观看一公开 | 四虎4545www国产精品 | 国产一区二区视频在线看| 精品欧美激情在线观看| 日韩高清欧美激情| 亚洲理论在线| 久久精品国产亚洲一区二区三区| 国产欧美91| 夜久久久久久| 亚洲黄色网址| 久久影视三级福利片| 国产传媒在线| 一区二区三区国产在线| 欧美精品一区二区三区精品| 日本一区二区高清不卡| 国产欧美一区| 日韩欧乱色一区二区三区在线| 成人啊v在线| 四季av一区二区凹凸精品| 国产精品美女久久久久久不卡| 蜜臀av性久久久久蜜臀aⅴ四虎| 91久久亚洲| 亚洲视频二区| 美女网站一区| 日韩午夜黄色| 国产一区二区三区不卡av | 夜夜嗨一区二区| 一区二区精彩视频| 国产一区二区三区免费在线| 最新亚洲一区| 成人国产综合| 日本欧美久久久久免费播放网| 激情亚洲影院在线观看| 日本不卡视频在线观看| 久久蜜桃资源一区二区老牛| 日本不卡视频在线| 日韩啪啪电影网| 日本在线不卡视频| 激情偷拍久久| 五月激情久久| 91日韩在线| 九九九精品视频| 人人爱人人干婷婷丁香亚洲| 亚洲精品网址| 久久xxxx精品视频| 欧美在线亚洲| 欧美aa在线观看| 精品一区二区三区亚洲| 日本午夜精品久久久久| 六月天综合网| 日韩视频中文| 蜜桃视频在线网站| 国产一区二区三区不卡视频网站| 美女视频免费精品| 日本少妇一区二区| 日本不卡高清| 日韩国产欧美在线播放| 日本不卡视频在线观看| 日本91福利区| 国产欧美日韩精品高清二区综合区| 亚洲日本三级| 日本精品另类| 精品久久97| 亚洲欧美日韩国产一区二区| 亚洲午夜精品久久久久久app| 日韩中文字幕av电影| 亚洲精品看片| а√天堂中文在线资源8| 1024精品久久久久久久久| 日韩中出av| 日本在线啊啊| 亚洲一区观看| 精品一区二区男人吃奶| 伊人精品在线| 麻豆极品一区二区三区| 亚洲成人精选| 九九久久国产| 综合在线一区| 精品精品久久| 亚洲精品免费观看| 久久精品官网| 日韩av在线免费观看不卡| 久久久国产亚洲精品| 亚洲精品观看| 亚洲精品一区二区妖精| 国产一区二区亚洲| 国产美女精品视频免费播放软件| 99精品电影| 福利一区视频| 日韩国产欧美三级| 国产模特精品视频久久久久| 麻豆网站免费在线观看| 久久不见久久见国语| 妖精视频成人观看www| 日韩和的一区二在线| 视频精品一区| 亚洲综合二区| 国产成人免费精品| 国产乱人伦精品一区| 日韩中文字幕视频网| 蜜臀久久久99精品久久久久久| 91精品啪在线观看国产18| 精品久久久久中文字幕小说| 欧美视频久久| 国产精品3区| 麻豆精品国产91久久久久久| 国产精品magnet| 国产精品久久久久久久久久久久久久久| 一区二区三区网站| 女人天堂亚洲aⅴ在线观看| 免费av一区| 国产精品普通话对白| 性欧美69xoxoxoxo| 久久久夜夜夜| 美日韩精品视频| 日韩国产在线一| 国产精品午夜av| 精品一区二区三区的国产在线观看| 亚州av乱码久久精品蜜桃| 日韩中文字幕麻豆| 欧美精品影院| 日本黄色精品| 国精品产品一区| 国产极品久久久久久久久波多结野| 999国产精品999久久久久久| 亚洲午夜视频| 97成人超碰| 国产精品一区二区中文字幕| 日韩电影免费在线观看| 亚洲精品大全| 精品五月天堂| 国产精品天堂蜜av在线播放| 中文字幕在线视频网站| 亚洲欧美成人综合| 精品视频自拍| 亚洲一区日韩| 91偷拍一区二区三区精品| 亚洲日本欧美| 国产尤物精品| 久久久久久网| 日韩高清电影一区| 亚洲国产一区二区在线观看| 亚洲精品麻豆| 欧美日韩国产综合网| 亚洲免费黄色| 久久久久久一区二区| 蜜臀av一区二区三区| 久久久久久久久99精品大| 国产精品99久久免费观看| 蜜臀久久99精品久久久久久9 | 中文字幕日韩亚洲| 国产欧美日韩综合一区在线播放| 日本免费一区二区三区四区| 亚洲影院天堂中文av色| 91精品一区| 亚洲www啪成人一区二区| 日韩精品高清不卡| 99久久夜色精品国产亚洲1000部| 日韩高清三区| av不卡免费看| 日韩国产欧美| 国产精品亚洲产品| 水野朝阳av一区二区三区| 成人午夜亚洲| 欧美一区自拍| 亚洲精品精选| 麻豆91精品| 久久视频精品| 伊伊综合在线| 欧美日韩伊人| 婷婷视频一区二区三区| 亚洲激情av| 国产综合精品一区| 日韩欧美网址| 在线看片福利| 欧美国产一级| 欧美男人天堂| 涩涩av在线| 欧产日产国产精品视频| 在线看片福利| 丝袜美腿诱惑一区二区三区|