精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談DDL技術解密

開發 開發工具 MySQL
如果對一個存儲了上百萬甚至上千上萬的數據表進行 DDL 操作,數據庫是怎么做到的呢?會不會有一個很大的事務鎖?會不會影響數據的插入和更新?今天就會聊聊這個問題,以及 PT-OSC、GH-OST 等技術,是如何高效的解決這個問題的。

首先,用過數據庫的小伙伴們(本文以 MySQL InnoDB 為例)都知道,MySQL 不止有增刪改數據操作(DML),還有改表結構的操作(DDL),當新增加字段等修改表結構時,就需要進行 DDL 操作。可是,如果對一個存儲了上百萬甚至上千上萬的數據表進行 DDL 操作,數據庫是怎么做到的呢?會不會有一個很大的事務鎖?會不會影響數據的插入和更新?今天就會聊聊這個問題,以及 PT-OSC、GH-OST 等技術,是如何高效的解決這個問題的。

Before MySQL 5.5

在 MySQL 5.5 版本及之前版本,DDL 操作主要有 copy table 和 inplace 兩種方式。

1. Copy Table 方式

Copy Table 顧名思義,就是通過臨時表拷貝的方式實現的。在 MySQL 5.5 版本及之前版本,修改表結構是表級鎖,所以在整個 DDL 過程中表都是鎖著不可寫入的。這使得在修改時容易導致數據庫 CPU、IO 等性能的消耗,以及主從同步的延遲。

上述過程,MySQL 自動完成轉存數據,交換表名和刪除舊表等操作,時間消耗最多的是在往臨時表(Server 層)插入數據的過程,整個 DDL 過程中,表是不能執行 DML 的。

2. IN-Place 方式

在 MySQL 5.5 版本中,增加了 IN-Place 方式。所謂 IN-Place 方式,就是索引創建在原表上直接進行,不會 copy 整個表,只需要在原來的 idb 文件上,新建所需要的索引頁,這比 Copy Table 節約極大的 IO 資源,且減少了 DDL 執行時長。

對比 Copy Table 和 IN-Place 兩種方式,我們看下官網的內容(MySQL 5.5):

(引自:https://dev.mysql.com/doc/refman/5.5/en/alter-table.html)

以上是 MySQL 5.5 版本中的說明,而 MySQL 5.6 版本,則正式提出了 COPY 和 INPLACE 兩種方式。

(引自:https://dev.mysql.com/doc/refman/5.6/en/alter-table.html)

3. Fast Index Creation(FIC)

Innodb 存儲引擎從 1.0.x 版本開始,對添加索引操作引入了新特性 Fast Index Creation(FIC 特性)。FIC 就是添加或刪除二級索引的時候,可以不用復制原表,而是在創建或刪除二級索引時會對原表加上一個 S 鎖(共享鎖),允許其他會話進行讀操作,但禁止寫操作,根據當前表數據創建索引,新索引創建完成之后,解除 S 鎖,允許寫操作。

FIC 在創建索引時不需要拷貝整表數據,但只對二級索引有效,對主鍵索引無效,對于主鍵索引的創建和刪除同樣需要重建一個臨時表。

對比 IN-Place 和 FIC,在網上查了一些資料,說“INPLACE 方式也稱為 InnoDB fast index creation”,那兩個應該不是一回事?我們看下官網的內容(MySQL 5.5):

(引自:https://dev.mysql.com/doc/refman/5.5/en/innodb-create-index-overview.html)

在 MySQL 5.5 的官方說明中,并沒有明確說明 FIC 就是 INPLACE,并且此版本中的 FIC 只支持二級索引和輔助索引的增加和刪除。而在 MySQL 5.6 官方說明中,則指出 Online DDL 特性基于 InnoDB FIC 構建。

(引自:https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html)

在 MySQL 8.0 的官方說明中,則指出了 FIC 是 Online DDL 的延伸和擴展。

(引自:https://dev.mysql.com/doc/refman/8.0/en/glossary.html)

所以,綜上所述,“INPLACE 方式也稱為 InnoDB fast index creation”這句話是對的,Online DDL 方式延伸了 Fast Index Creation,并逐漸擴展了 FIC 的范圍。

Since MySQL 5.6

在 MySQL 5.6 版本,引入了 Online DDL,這個新特性解決了早期版本 MySQL 進行 DDL 操作時帶來的鎖表問題,Online DDL 執行的過程中依然保證可以讀寫,不影響數據庫對外提供服務。

Online DDL

  1. Alter table …. , ALGORITHM [=] {DEFAULT|INPLACE|COPY}, LOCK [=] { DEFAULT| NONE| SHARED| EXCLUSIVE } 

ALGORITHM 子句指定執行 DDL 采用的方式,LOCK 子句描述持有鎖類型來控制 DML 的并發。其中,某些 DDL 語句不支持 Online DDL 的采用 COPY 方式,支持的就采用 INPLACE 方式,因為 Online DDL 是對早期 INPLACE 方式的增強,所以 INPLACE 方式根據是否涉及記錄格式的修改又分為:Rebuilds Table 和 No-Rebuilds Table,我們看下官方給出的內容(MySQL 5.7):

(引自:https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html)

基于 Online 對比 COPY 和 INPLACE,COPY 方法從表中的數據導出來的存放位置叫作 tmp_table,這是一個臨時表,是在 server 層創建的。INPLACE 方法從表中重建出來的數據是放在 tmp_file 里的,這個臨時文件是 InnoDB 在內部創建出來的,整個 DDL 過程都在 InnoDB 內部完成。

Online DDL 實現過程主要包括三個階段:Initialization 階段, Execution 階段,Commit Table Definition 階段。我們看下官方給出的內容(MySQL 8.0):

(引自:https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-performance.html)

我們詳細描述下這三個過程的過程:

(1) Initialization

  • 創建 frm 臨時文件
  • 持有EXCLUSIVE_MDL鎖,禁止讀寫
  • 根據 ALTER 操作,確定執行過程(COPY,Online-Rebuilds,Online-No-Rebuilds)
  • 更新數據字典的內存對象
  • 若是需要 Rebuilds,分配 row_log 對象記錄增量
  • 若是需要 Rebuilds,新建 ibd 臨時文件

(2) Execution(如果僅修改 MetaData,則無此部操作)

  • 降低EXCLUSIVE-MDL鎖,允許讀寫(COPY 僅允許讀)
  • 記錄執行期間產生的 DML 操作到 row_log(僅 Rebuilds 需要)
  • 掃描老表的聚集索引中每一條記錄 record
  • 遍歷新表的聚集索引和二級索引,逐一處理
  • 根據 record 構造對應的索引項
  • 將構造的索引項插入 sort_buffer 塊中
  • 將 sort_buffer 塊插入新的索引
  • 將 row_log 中的記錄應用到新臨時表,應用到最后一個 Block

(3) Commit Table Definition

  • 升級到EXECLUSIVE-MDL鎖,禁止讀寫
  • 重做 row_log 中最后一部分增量
  • 更新 InnoDB 的數據字典
  • 提交事務,寫 InnoDB redo 日志
  • 修改統計信息
  • Rename 臨時的 ibd 和 frm 文件
  • DDL 執行變更

我理解,Online DDL 中的 COPY 和 INPLACE 的區別在于有沒有原地,COPY 會將數據從 InnoDB 存儲層 copy 到 Server 層,而 INPLACE 不會;而 INPLACE 中的 Rebuilds 和 No-Rebuils 的區別在于,有沒有重建表。

PT-Online-Schema-Change(PT-OSC)

全稱 Percona Toolkit Online Schema Change,其中 Percona Toolkit 源自 Maatkit 和 Aspersa 工具,這兩個工具是管理 MySQL 最有名的工具,但 Maatkit 已經不維護了,全部歸并到 Percona Toolkit。Percona Toolkit 是一組高級的命令行工具,用來管理 MySQL 和系統任務。

PT-OSC(pt-online-schema-change)工具特點與優勢是支持并發 DML 操作。

GitHub’s Online Schema Transformer(GH-OST)

GH-OST 是 GitHub 的在線表定義轉換器,與 PT-OSC 的最大區別,在于 GH-OOST 的無觸發器設計。

至此,我們對比下 Online DDL、PT-OSC 和 GH-OST 的優缺點:

(引自:吳夏《在線DDL原理、對比分析和實踐》)

總結

傳統的 DDL,多數的 ALTER TABLE 操作是通過創建一個滿足需求的新表,之后拷貝數據到新表,在用新表替換老表,整個過程會加鎖,不支持并發 DML。在 MySQL 5.5 版本中,以 InnoDB Plugin 方式,優化了新增和刪除索引的操作,避免了這種數據 copy 的開銷,出現了 FIC。在 MySQL 5.6 開始增強了對各種 ALTER TABLE 操作支持,避免數據 copy 的開銷,同時允許在 DDL 進行中,并發執行 DML 操作。在 MySQL 5.7 實現了 ALTER TABLE RENAME INDEX 操作,即支持在線的索引重命名,這種特性的綜合,即 ONLINE DDL。PT-OST 通過改造原生 DDL 的方式,實現不鎖表的在線修改表結構。

【本文是51CTO專欄作者張開濤的原創文章,作者微信公眾號:開濤的博客,id:kaitao-1234567】

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO
相關推薦

2021-11-26 07:31:43

Java反射程序

2023-06-01 13:15:23

2010-03-30 13:56:43

wifi無線技術結構

2012-08-20 09:57:00

虛擬化

2013-11-21 11:09:01

NAS虛擬化

2018-02-23 14:44:41

負載均衡技術分類

2018-11-21 14:27:54

VxLAN數據中心局域網

2025-03-12 06:00:00

加密流量安全

2022-09-20 08:00:32

VMWARE云原生

2011-05-23 11:17:42

2018-11-21 14:42:58

無線定位

2019-12-25 10:17:53

騰訊Elasticsear開源

2018-03-21 14:16:45

虛擬化技術解密

2019-12-25 09:10:44

技術研發指標

2018-09-07 14:53:30

MarTechAdTechROI

2022-11-03 12:06:41

2009-02-17 18:17:42

2009-06-18 16:13:14

J2EE開發

2015-11-03 09:28:52

Hybrid技術設計實現

2023-10-22 11:54:19

點贊
收藏

51CTO技術棧公眾號

日韩三级成人av网| 69久久99精品久久久久婷婷| 欧美午夜精品久久久久久蜜| 丰满人妻一区二区三区四区| 国产精品成久久久久| 555www色欧美视频| 国产精品自拍片| 91欧美在线视频| 国产一区二区在线免费观看| 97福利一区二区| 日韩视频在线观看免费视频| 日韩区一区二| 色婷婷综合激情| 9191国产视频| 成人午夜影视| 99久久久久久| 成人精品网站在线观看| 久久国产视频播放| 欧美黄污视频| 日韩中文字幕在线观看| 国产精品福利导航| 久久九九精品视频| 欧美性一区二区| 人人妻人人添人人爽欧美一区| 麻豆视频免费在线观看| 久久综合视频网| 粉嫩av一区二区三区免费观看| 波多野结衣啪啪| 亚洲天堂偷拍| 久久久国产精品亚洲一区| 欧洲美一区二区三区亚洲| 一本色道69色精品综合久久| 欧美日韩国产一级二级| 国产超级av在线| 婷婷在线播放| 综合色天天鬼久久鬼色| 欧美日本韩国国产| 国精品人妻无码一区二区三区喝尿| 蜜臀av在线播放一区二区三区| 亚州av一区二区| 久久久久久久国产精品毛片| 999久久久国产精品| 亚洲午夜精品久久久久久性色| 亚洲啪av永久无码精品放毛片| 99视频这里有精品| 欧美日韩国产影片| 中文字幕亚洲乱码| 精品久久久网| 欧美日韩一区二区不卡| 成人性生生活性生交12| 欧美日韩精品免费观看视完整| 婷婷亚洲久悠悠色悠在线播放| 成人小视频在线观看免费| jizz性欧美10| 亚洲日本一区二区三区| 宅男av一区二区三区| 免费的黄网站在线观看| 亚洲欧洲三级电影| 懂色av粉嫩av蜜臀av| 国产黄色在线网站| 综合色天天鬼久久鬼色| 超碰超碰超碰超碰超碰| 在线观看wwwxxxx| 一区二区三区日本| av日韩一区二区三区| 2018av在线| 欧美日韩亚洲一区二| 成人久久久久久久久| av日韩电影| 欧美影院一区二区三区| 亚洲一区二区福利视频| 欧美成人一级| 精品国产麻豆免费人成网站| 欧美xxxxx精品| 久久99精品久久久久久园产越南| 亚洲天堂免费观看| 日本激情视频一区二区三区| 91精品国产自产拍在线观看蜜| 欧美日韩福利电影| 精品成人久久久| 日韩精品电影在线| 91在线视频九色| 天天色棕合合合合合合合| 久久久三级国产网站| 在线观看精品视频| 久久香蕉一区| 91成人看片片| 久久久久久久久久毛片| 岛国成人av| 国产亚洲精品成人av久久ww| 免费成人深夜夜行网站| 在线日韩电影| 国产美女被下药99| 亚洲欧美高清视频| 中文字幕精品在线不卡| 污污污污污污www网站免费| 日本黄色免费在线| 欧美欧美欧美欧美| 亚洲欧美在线不卡| 欧美国产美女| 17婷婷久久www| 一级aaaa毛片| 99re视频精品| 日本老太婆做爰视频| 中文字幕在线直播| 日韩色视频在线观看| 亚洲乱码国产乱码精品精大量| 久久精品99久久无色码中文字幕| 欧美激情亚洲自拍| 亚洲国产无线乱码在线观看| 成人精品一区二区三区四区| 亚洲国产精品一区二区第一页| 日本色护士高潮视频在线观看| 在线欧美一区二区| 免费不卡的av| 香蕉久久网站| 国产精品老女人精品视频| 亚洲精品字幕在线| 亚洲视频一区在线观看| 日韩精品一区二区三区色欲av| 中文一区二区三区四区| 精品国产欧美一区二区五十路 | 国产精品久久久久久久免费观看 | 日韩高清精品免费观看| 久久综合综合久久综合| 噜噜噜噜噜久久久久久91| 亚洲欧美成人影院| 欧美丰满高潮xxxx喷水动漫| 亚洲激情视频小说| 999亚洲国产精| 99久久自偷自偷国产精品不卡| 婷婷在线视频| 欧美天堂一区二区三区| 国产色视频一区二区三区qq号| 国内精品福利| 亚洲一区二区三区777| 蜜桃视频在线观看www社区| 色综合色综合色综合| 超碰男人的天堂| 韩日欧美一区| 国产精品日韩二区| 国产偷倩在线播放| 精品国免费一区二区三区| 欧美日韩成人免费观看| 国产精品综合久久| 一本色道久久88亚洲精品综合| 日本一区二区三区中文字幕| 中文字幕在线国产精品| 亚洲永久精品视频| 亚洲欧洲日本在线| 国产无遮挡猛进猛出免费软件| 日韩黄色大片| 91精品国产综合久久香蕉| 18免费在线视频| 欧美日韩亚洲丝袜制服| 女人裸体性做爰全过| 久久99精品国产91久久来源| 亚洲综合视频一区| 疯狂欧洲av久久成人av电影| 久久视频在线免费观看| 国内老熟妇对白hdxxxx| 洋洋av久久久久久久一区| 少妇极品熟妇人妻无码| 在线日本成人| 久久亚裔精品欧美| 人人鲁人人莫人人爱精品| 亚洲欧美三级在线| 在线免费观看一级片| 中文字幕一区二区三区av| 久久精品亚洲天堂| 激情久久婷婷| 久久综合给合久久狠狠色| 成人日韩精品| 北条麻妃在线一区二区| 精品人妻一区二区三区四区不卡| 亚洲伊人伊色伊影伊综合网| 人妻无码中文久久久久专区| 欧美专区18| 亚洲免费久久| 国产一区二区久久久久| 久久久久久久香蕉网| 免费黄网站在线观看| 欧美日韩视频在线第一区 | 精品露脸国产偷人在视频| 男人天堂av电影| 黑人巨大精品欧美黑白配亚洲| 日韩精品综合在线| 国产成人av| 444亚洲人体| 欧美1级2级| 美女久久久久久久| 蜜桃视频在线免费| 日韩一区二区视频| 中文字幕av第一页| 亚洲国产一区在线观看| 国产精品成人无码免费| 国产成a人亚洲| 丝袜制服一区二区三区| 欧美日韩一区二区三区四区在线观看| 久久精品ww人人做人人爽| 色综合一区二区日本韩国亚洲| 久久久久久久久网站| 最近高清中文在线字幕在线观看| 精品剧情v国产在线观看在线| 欧美日韩综合一区二区三区| 一区二区三区日韩欧美| 一级片黄色录像| www国产精品av| 4438x全国最大成人| 蜜桃视频一区二区| 精品视频免费在线播放| 亚洲久久久久| 亚洲日本精品国产第一区| 欧美日韩一区二区三区四区不卡| 91精品在线观| 免费污视频在线一区| 午夜精品一区二区三区在线| 欧美成年黄网站色视频| 一区二区欧美久久| 五月婷婷在线播放| 欧美成人aa大片| 国产喷水吹潮视频www| 欧美亚洲动漫另类| 69视频免费看| 色综合久久久久网| 天天操天天干视频| 一区二区日韩av| 国产av无码专区亚洲av毛网站| 欧美国产日韩在线观看| 女人又爽又黄免费女仆| 99久久99久久综合| 国产午夜在线一区二区三区| 国产一区二区电影| 三级av免费看| 极品少妇xxxx偷拍精品少妇| 国内自拍视频网| 日韩不卡免费视频| 无码播放一区二区三区| 99av国产精品欲麻豆| 日本一本中文字幕| 黑丝一区二区三区| 久久精品xxx| 怡红院精品视频在线观看极品| 日韩欧美视频免费在线观看| 91精品国产调教在线观看| 黄频视频在线观看| 国产精品伦理久久久久久| 最新精品视频| 亚洲欧美综合久久久| 老司机av福利| 欧美 日韩 国产 一区| 成人国产一区二区三区| 欧美特黄一区| 日韩在线观看a| a91a精品视频在线观看| 久久亚洲中文字幕无码| 国产婷婷精品| 午夜精品久久久内射近拍高清| 亚洲一区黄色| 男人的天堂日韩| 免费av成人在线| 亚洲精品久久久久久宅男| 激情欧美一区二区三区在线观看| 日韩在线一区视频| 高清视频一区二区| 午夜视频在线观看国产| 26uuu另类欧美| 久久免费手机视频| 中文字幕日韩一区| 久久久久久天堂| 岛国精品视频在线播放| 嫩草影院一区二区三区| 欧美日韩久久久一区| 精品免费久久久| 亚洲国内精品在线| av网站无病毒在线| 久久成人精品电影| 国产高清视频色在线www| 国产91九色视频| 国产日本亚洲| 精品久久蜜桃| 久久看人人摘| 妞干网视频在线观看| 蘑菇福利视频一区播放| www.这里只有精品| 成人久久视频在线观看| 性猛交娇小69hd| 亚洲精品日韩一| 午夜婷婷在线观看| 欧美精品日韩一本| 欧美熟女一区二区| 中文字幕在线亚洲| tube8在线hd| 国产精品精品国产| eeuss鲁片一区二区三区| 日韩成人在线资源| 欧美日本一区| 久久久久免费精品| 丁香婷婷综合五月| 日本综合在线观看| 亚洲成人高清在线| 国产一区二区三区在线观看| 亚洲国内高清视频| 91网址在线观看| 国产精品国产三级国产专播精品人| 欧美一区一区| 亚洲日本一区二区三区在线不卡 | 成人免费一区二区三区在线观看| 日韩精品成人一区| 91精品国产综合久久福利软件| 欧洲一区av| 久久久久久久一区二区| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 91精品国产综合久久香蕉麻豆| 午夜视频福利在线观看| 久久国产精品久久久久久久久久| 国模一区二区| 久久国产日韩欧美| 在线成人亚洲| 久久久久亚洲av无码麻豆| 国产精品美女www爽爽爽| 国产精品久久久久久99| 亚洲第一视频网站| 91亚洲天堂| 3d蒂法精品啪啪一区二区免费| sdde在线播放一区二区| 黄色动漫在线免费看| 不卡一区二区三区四区| 久久久久久久黄色| 欧美一区二区啪啪| 国产激情视频在线观看| 成人h视频在线| 日韩一区三区| 国产自偷自偷免费一区| 91麻豆蜜桃一区二区三区| 国产午夜视频在线播放| 欧美成人福利视频| 国模私拍视频在线播放| 成人免费福利视频| 999国产精品视频| 日韩av自拍偷拍| 成人免费一区二区三区视频| 国产又粗又黄又爽视频| 日韩在线小视频| 日本午夜免费一区二区| 最新精品视频| 国产毛片精品一区| 久草免费在线观看视频| 欧美白人最猛性xxxxx69交| 视频在线这里都是精品| av一本久道久久波多野结衣| 亚洲欧美综合| wwwxx日本| 精品久久久久久久久久| 欧美拍拍视频| 国产精品欧美日韩一区二区| 国产99久久精品一区二区300| 欧美两根一起进3p做受视频| 国产蜜臀av在线一区二区三区| 一级久久久久久| 久久精品成人一区二区三区| 精品久久亚洲| 国产3p露脸普通话对白| 26uuu色噜噜精品一区| 羞羞色院91蜜桃| www.久久色.com| 伊人精品综合| av动漫在线看| 国产欧美一区二区精品秋霞影院| 亚洲无码精品在线观看| 久久久精品视频成人| 大伊香蕉精品在线品播放| 国产一区二区三区精彩视频| 欧美国产一区在线| 国产精品一区二区人人爽 | 国产超碰精品| 中文字幕久久综合| 成人污视频在线观看| 一级黄色av片| 久热精品视频在线观看一区| 高清日韩中文字幕| 九色91popny| 亚洲国产精品一区二区久久恐怖片| 色视频在线看| 成人av色在线观看| 亚洲精品女人| 欧美日韩生活片| 精品粉嫩超白一线天av| 欧美最新精品| 日韩不卡一二区| 国产亚洲女人久久久久毛片| av天堂一区二区三区| 日本一区二区三区四区视频| 性欧美69xoxoxoxo| 四虎永久免费在线观看| 日韩精品中文字幕在线一区| 经典三级一区二区| 欧美一级欧美一级| 综合久久综合久久| 噜噜噜噜噜在线视频|