大家好,接著上次和大家一起學(xué)習(xí)了《MySQL DDL執(zhí)行方式-Online DDL介紹》,那么今天接著和大家一起學(xué)習(xí)另一種MySQL DDL執(zhí)行方式之pt-soc。
在MySQL使用過程中,根據(jù)業(yè)務(wù)的需求對表結(jié)構(gòu)進(jìn)行變更是個普遍的運(yùn)維操作,這些稱為DDL操作。常見的DDL操作有在表上增加新列或給某個列添加索引。
DDL定義:
(資料圖)
Data Definition Language,即數(shù)據(jù)定義語言,那相關(guān)的定義操作就是DDL,包括:新建、修改、刪除等;相關(guān)的命令有:CREATE,ALTER,DROP,TRUNCATE截斷表內(nèi)容(開發(fā)期,還是挺常用的),COMMENT 為數(shù)據(jù)字典添加備注。
注意:DDL操作是隱性提交的,不能rollback,一定要謹(jǐn)慎哦!
下圖是執(zhí)行方式的性能對比及說明:
圖1 易維平臺說明圖
下面本文將對DDL的執(zhí)行工具之pt-osc進(jìn)行簡要介紹及分析。如有錯誤,還請各位大佬們批評指正。
2 介紹pt-online-schema-change- ALTER tables without locking them.
pt-online-schema-changealters a table’s structure without blocking reads or writes. Specify the database and table in the DSN. Do not use this tool before reading its documentation and checking your backups carefully.
pt-online-schema-change是Percona公司開發(fā)的一個非常好用的DDL工具,稱為 pt-online-schema-change,是Percona-Toolkit工具集中的一個組件,很多DBA在使用Percona-Toolkit時第一個使用的工具就是它,同時也是使用最頻繁的一個工具。它可以做到在修改表結(jié)構(gòu)的同時(即進(jìn)行DDL操作)不阻塞數(shù)據(jù)庫表DML的進(jìn)行,這樣降低了對生產(chǎn)環(huán)境數(shù)據(jù)庫的影響。在MySQL5.6之前是不支持Online DDL特性的,即使在添加二級索引的時候有FIC特性,但是在修改表字段的時候還是會有鎖表并阻止表的DML操作,這樣對于DBA來說是非常痛苦的,好在有pt-online-schema-change工具在沒有Online DDL時解決了這一問題。
Percona 公司是成立于2006年,總部在美國北卡羅來納的Raleigh。由 Peter Zaitsev 和 Vadim Tkachenko創(chuàng)立,這家公司聲稱他們提供的軟件都是免費(fèi)的,他們的收入主要來與開源社區(qū),企業(yè)的支持,以及使用他們軟件的公司的支付他們提供support的費(fèi)用。而實(shí)際上這家公司"壟斷"了業(yè)內(nèi)最流行數(shù)據(jù)庫支持類的軟件,并且還開發(fā)了一些其他的與數(shù)據(jù)庫相關(guān)的東西。
Percona-Toolkit工具集是Percona支持?jǐn)?shù)據(jù)庫人員用來執(zhí)行各種MySQL、MongoDB和系統(tǒng)任務(wù)的高級命令行工具的集合,這些任務(wù)太難或太復(fù)雜而無法手動執(zhí)行。這些工具是私有或“一次性”腳本的理想替代品,因為它們是經(jīng)過專業(yè)開發(fā)、正式測試和完整記錄的。它們也是完全獨(dú)立的,因此安裝快速簡便,無需安裝任何庫。
Percona Toolkit 源自 Maatkit 和 Aspersa,這兩個最著名的 MySQL 服務(wù)器管理工?具包。它由 Percona 開發(fā)和支持。
3 工作流程pt-osc 用于修改表時不鎖表,簡單地說,這個工具創(chuàng)建一個與原始表一樣的新的空表,并根據(jù)需要更改表結(jié)構(gòu),然后將原始表中的數(shù)據(jù)以小塊形式復(fù)制到新表中,然后刪除原始表,然后將新表重命名為原始名稱。在復(fù)制過程中,對原始表的所有新的更改(insert,delete,update)都將應(yīng)用于新表,因為在原始表上創(chuàng)建了一個觸發(fā)器,以確保所有新的更改都將應(yīng)用于新表。有關(guān) pt-online-schema-change 工具的更多信息,請查閱手冊文檔 。
pt-osc大致的工作過程如下:
1.創(chuàng)建一個和要執(zhí)行 alter 操作的表一樣的新的空表結(jié)構(gòu)(是alter之前的結(jié)構(gòu));
2.在新表執(zhí)行alter table 語句(速度應(yīng)該很快);
3.在原表中創(chuàng)建觸發(fā)器3個觸發(fā)器分別對應(yīng)insert,update,delete操作,如果表中已經(jīng)定義了觸發(fā)器這個工具就不能工作了;
4.以一定塊大小從原表拷貝數(shù)據(jù)到臨時表,拷貝過程中通過原表上的觸發(fā)器在原表進(jìn)行的寫操作都會更新到新建的臨時表,保證數(shù)據(jù)不會丟失(會限制每次拷貝數(shù)據(jù)的行數(shù)以保證拷貝不會過多消耗服務(wù)器資源,采用 LOCK IN SHARE MODE 來獲取要拷貝數(shù)據(jù)段的最新數(shù)據(jù)并對數(shù)據(jù)加共享鎖阻止其他會話修改數(shù)據(jù),不過每次加S鎖的行數(shù)不多,很快就會被釋放);
5.將原表Rename為old表,再把新表Rename為原表(整個過程只在rename表的時間會鎖一下表,其他時候不鎖表);
6.如果有參考該表的外鍵,根據(jù)alter-foreign-keys-method參數(shù)的值,檢測外鍵相關(guān)的表,做相應(yīng)設(shè)置的處理(根據(jù)修改后的數(shù)據(jù),修改外鍵關(guān)聯(lián)的子表),如果被修改表存在外鍵定義但沒有使用--alter-foreign-keys-method 指定特定的值,該工具不予執(zhí)行;
7.默認(rèn)最后將舊原表刪除、觸發(fā)器刪除。
圖2 pt-osc工作過程示意圖
4 用法Percona Toolkit 是成熟的,但是官方還是建議在使用前做到以下幾點(diǎn):
?閱讀該工具的詳細(xì)文檔
?查看該工具的已知“錯誤”
?在非生產(chǎn)服務(wù)器上測試該工具
?備份您的生產(chǎn)數(shù)據(jù)并驗證備份
下載安裝:
從官方網(wǎng)站下載percona-toolkit,然后執(zhí)行下面的命令進(jìn)行安裝(示例):
# 安裝依賴包yum install perl-TermReadKey.x86_64 yum install perl-DBIyum install perl-DBD-MySQLyum install perl-Time-HiResyum install perl-IO-Socket-SSL# 安裝percona-toolkitrpm -ivh percona-toolkit-3.1.0-2.el7.x86_64.rpm執(zhí)行類似下面的命令修改表結(jié)構(gòu):
pt-online-schema-change --alter="add column c1 int;" --execute D=test,t=table,u=user,p=passwordalter參數(shù)指定修改表結(jié)構(gòu)的語句,execute表示立即執(zhí)行,D、t、u、p分別指定庫名、表名、用戶名和密碼,執(zhí)行期間不阻塞其它并行的DML語句。pt-online-schema-change還有許多選項,具體用法可以使用pt-online-schema-change --help查看聯(lián)機(jī)幫助。
5 限制pt-online-schema-change也存在一些局限性:
1.在使用此工具之前,應(yīng)為表定義PRIMARY KEY或唯一索引,因為它是DELETE觸發(fā)器所必需的;
2.如果表已經(jīng)定義了觸發(fā)器,則不支持 pt-osc ;(注:不是不能有任何觸發(fā)器,只是不能有針對insert、update、delete的觸發(fā)器存在,因為一個表上不能有兩個相同類型的觸發(fā)器);
3.如果表具有外鍵約束,需要使用選項--alter-foreign-keys-method,如果被修改表存在外鍵定義但沒有使用--alter-foreign-keys-method 指定特定的值,該工具不予執(zhí)行;
4.還是因為外鍵,對象名稱可能會改變(indexes names 等);
5.在Galera集群環(huán)境中,不支持更改MyISAM表,系統(tǒng)變量 wsrep_OSU_method 必須設(shè)置為總序隔離(Total Order Isolation,TOI);
6.此工具僅適用于 MySQL 5.0.2 及更新版本(因為早期版本不支持觸發(fā)器);
7.需要給執(zhí)行的賬戶在 MySQL上授權(quán),才能正確運(yùn)行。(應(yīng)在服務(wù)器上授予PROCESS、SUPER、REPLICATION SLAVE全局權(quán)限以及 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER 和 TRIGGER 表權(quán)限。Slave 只需要 REPLICATION SLAVE 和 REPLICATION CLIENT 權(quán)限。)
6 對比OnLine DDL下面的表格是國外技術(shù)牛人進(jìn)行的測試數(shù)據(jù),是Online DDL和pt-osc對一個包含1,078,880行的表應(yīng)用一些alter操作的對比結(jié)果,僅供參考:
| online ddl | pt-osc | |||||
|---|---|---|---|---|---|---|
| 更改操作 | 受影響的行 | 是否鎖表 | 時間(秒) | 受影響的行 | 是否鎖表 | 時間(秒) |
| 添加索引 | 0 | 否 | 3.76 | 所有行 | 否 | 38.12 |
| 下降指數(shù) | 0 | 否 | 0.34 | 所有行 | 否 | 36.04 |
| 添加列 | 0 | 否 | 27.61 | 所有行 | 否 | 37.21 |
| 重命名列 | 0 | 否 | 0.06 | 所有行 | 否 | 34.16 |
| 重命名列更改其數(shù)據(jù)類型 | 所有行 | 是 | 30.21 | 所有行 | 否 | 34.23 |
| 刪除列 | 0 | 否 | 22.41 | 所有行 | 否 | 31.57 |
| 更改表引擎 | 所有行 | 是 | 25.3 | 所有行 | 否 | 35.54 |
那么現(xiàn)在的問題是,我們應(yīng)該使用哪種方法來執(zhí)行alter語句呢?
雖然pt-osc允許對正在更改的表進(jìn)行讀寫操作,但它仍然會在后臺將表數(shù)據(jù)復(fù)制到臨時表,這會增加MySQL服務(wù)器的開銷。所以基本上,如果Online DDL不能有效工作,我們應(yīng)該使用 pt-sc。換句話說,如果Online DDL需要將數(shù)據(jù)復(fù)制到臨時表(algorithm=copy)并且該表將被長時間阻塞(lock=exclusive)或者在復(fù)制環(huán)境中更改大表時,我們應(yīng)該使用 pt-osc工具。
pt-osc官方文檔:https://docs.percona.com/percona-toolkit/pt-online-schema-change.html
7 總結(jié)本次和大家一起學(xué)習(xí)了解pt-online-schema-change工具,介紹了其產(chǎn)生的背景、基本工作流程、用法及相應(yīng)的一些限制。還介紹了其與Online DDL執(zhí)行方式的一些對比,如果錯誤還請指正。
目前可用的DDL操作工具包括pt-osc,github的gh-ost,以及MySQL提供的在線修改表結(jié)構(gòu)命令Online DDL。pt-osc和gh-ost均采用拷表方式實(shí)現(xiàn),即創(chuàng)建個空的新表,通過select+insert將舊表中的記錄逐次讀取并插入到新表中,不同之處在于處理DDL期間業(yè)務(wù)對表的DML操作。
到了MySQL 8.0 官方也對 DDL 的實(shí)現(xiàn)重新進(jìn)行了設(shè)計,其中一個最大的改進(jìn)是 DDL 操作支持了原子特性。另外,Online DDL 的 ALGORITHM 參數(shù)增加了一個新的選項:INSTANT,只需修改數(shù)據(jù)字典中的元數(shù)據(jù),無需拷貝數(shù)據(jù)也無需重建表,同樣也無需加排他 MDL 鎖,原表數(shù)據(jù)也不受影響。整個 DDL 過程幾乎是瞬間完成的,也不會阻塞 DML,不過目前8.0的INSTANT使用范圍較小,后續(xù)再對8.0的INSTANT做詳細(xì)介紹吧。
下一期文章將和大家一起學(xué)習(xí)、了解github的gh-ost,敬請期待哦!
作者:京東物流 劉鄧忠
來源:京東云開發(fā)者社區(qū)
關(guān)鍵詞:
【實(shí)探】中藥價格狂飆過后的“藥都”亳州:貨車司機(jī)閑坐等接單 【實(shí)探】中藥價格狂飆過后的“藥都”亳州:貨車司機(jī)閑坐等接單,當(dāng)歸,黨
馮奎章_馮奎 1、馮奎賣妻是明朝末年的故事。2、《馮奎賣妻》保定府有一對夫妻叫馮奎
粵電力A最新公告:預(yù)計上半年凈利潤8億元-9.5億元 同比扭虧為盈 粵電力A公告預(yù)計上半年凈利潤8億元95億元去年同期虧損1372億元同比扭虧
李玟媽媽首度發(fā)聲,公開吐槽外國女婿缺點(diǎn),李玟曾為老公整晚痛哭 閱讀此文前,誠邀您點(diǎn)擊一下“關(guān)注”,方便您隨時查閱一系列優(yōu)質(zhì)文章,
??谟瓉硎钇趯W(xué)車潮 這樣做可以避免學(xué)車“坑” 原標(biāo)題:??谟瓉硎钇趯W(xué)車潮這樣做可以避免學(xué)車“坑”新海南客戶端、南
【歌詞&羅馬音】デーモンロード デーモンロードプレイバック俯いてどうしたpureibakkuutsumuitedoushit
【實(shí)探】中藥價格狂飆過后的“藥都”亳州:貨車司機(jī)閑坐等接單 【實(shí)探】中藥價格狂飆過后的“藥都”亳州:貨車司機(jī)閑坐等接單,當(dāng)歸,黨
東方日升(300118.SZ)擬10股派2元 于7月14日除權(quán)除息 智通財經(jīng)APP訊,東方日升(300118)(300118 SZ)公告,公司2022年年度權(quán)益
中國蜀塔(08623)擬420萬元收購雅安寶盛金屬材料余下30%股權(quán) 智通財經(jīng)APP訊,中國蜀塔(08623)公布,于2023年7月7日,該公司全資附屬
南王科技最新公告:擬投建高端環(huán)保食品級紙制品項目 南王科技公告,公司擬在廣東省鶴山市鶴山工業(yè)城A區(qū)設(shè)立全資子公司“廣
南王科技(301355.SZ):擬設(shè)立子公司投資建設(shè)高端環(huán)保食品級紙制品項目 格隆匯7月7日丨南王科技(301355 SZ)公布,公司于2023年7月7日召開第三
拉夏貝爾(06116):管理人仍有序開展債權(quán)申報、債務(wù)及資產(chǎn)核查等工作 智通財經(jīng)APP訊,拉夏貝爾(603157)(06116)發(fā)布公告,自公司進(jìn)入破產(chǎn)清算
2023年7月7日江蘇省聚丙烯酰胺價格最新行情預(yù)測 中國報告大廳2023年7月7日江蘇省聚丙烯酰胺價格最新走勢監(jiān)測顯示:蘇州
CCER重啟真的要來了!生態(tài)環(huán)境部發(fā)布公開征求意見通知 CCER重啟真的要來了!生態(tài)環(huán)境部發(fā)布公開征求意見通知,配額,交易,ccer,
云南建投混凝土(01847)附屬高分子公司訂立保理協(xié)議 智通財經(jīng)APP訊,云南建投混凝土(01847)發(fā)布公告,于2023年7月7日,該公
明源云(00909.HK)委任梁瑞冰為聯(lián)席公司秘書 格隆匯7月7日丨明源云(00909 HK)宣布,司徒嘉怡因其他工作安排,已提呈
彩客新能源(01986)4月21日斥資8.58萬港元回購6.2萬股 智通財經(jīng)APP訊,彩客新能源(01986)發(fā)布公告,于2023年4月21日,該公司
富祥藥業(yè):7月6日接受機(jī)構(gòu)調(diào)研,包括知名機(jī)構(gòu)盤京投資的多家機(jī)構(gòu)參與 2023年7月7日富祥藥業(yè)(300497)發(fā)布公告稱公司于2023年7月6日接受機(jī)構(gòu)
廣東宏大:預(yù)計2023年1-6月盈利,凈利潤同比增20%至30% 廣東宏大發(fā)布業(yè)績預(yù)告,預(yù)計2023年1-6月歸屬凈利潤盈利3 02億元至3 27
馮奎章_馮奎 1、馮奎賣妻是明朝末年的故事。2、《馮奎賣妻》保定府有一對夫妻叫馮奎
注意!家里這些物品也要“防暑降溫” 入夏以來,多輪高溫天氣來襲用電需求量較常年同期偏高面對“烤”驗日常
2023年愛心售報|小報童帶病堅持來賣報 孩子成長迅速讓家長很欣慰 揚(yáng)子晚報7月7日訊(記者季宇軒實(shí)習(xí)生王元釗)7月6日是2023年揚(yáng)子晚報暑
粵電力A最新公告:預(yù)計上半年凈利潤8億元-9.5億元 同比扭虧為盈 粵電力A公告預(yù)計上半年凈利潤8億元95億元去年同期虧損1372億元同比扭虧
潼關(guān)黃金(00340.HK)擬3.39億港元收購宏勇投資100%股份 格隆匯7月7日丨潼關(guān)黃金(00340 HK)公告,于2023年7月7日,公司(作為買
小摩:轉(zhuǎn)型和AI利好被負(fù)面因素抵消 首予IBM(IBM.US)“中性”評級 摩根大通分析師BrianEssex發(fā)表研報,首次覆蓋IBM(IBM US),給予“中性
Wolfe下修派拉蒙環(huán)球(PARA.US)業(yè)績預(yù)期 降評級至“跑輸大盤” WolfeResearch將派拉蒙環(huán)球(PARA US)的評級從“與同行評級”下調(diào)為“跑
順豐控股最新公告:4月速運(yùn)物流業(yè)務(wù)營業(yè)收入146.46億元 同比增長27.29% 順豐控股公告,4月速運(yùn)物流業(yè)務(wù)營業(yè)收入146 46億元,同比增長27 29%;
青島銀行(03866.HK):提名陳霜及杜寧為董事候選人 格隆匯7月7日丨青島銀行(002948)(03866 HK)公布,董事會于2023年7月7日
深圳大動作!24條舉措 劍指… 作為全國外貿(mào)重鎮(zhèn),深圳在促進(jìn)外貿(mào)穩(wěn)定健康發(fā)展上再加碼!日前,中國人
我國人工智能蓬勃發(fā)展 核心產(chǎn)業(yè)規(guī)模達(dá)5000億元 7月6日,2023世界人工智能大會在上海世博中心拉開帷幕。圖為參觀者在達(dá)
李玟媽媽首度發(fā)聲,公開吐槽外國女婿缺點(diǎn),李玟曾為老公整晚痛哭 閱讀此文前,誠邀您點(diǎn)擊一下“關(guān)注”,方便您隨時查閱一系列優(yōu)質(zhì)文章,
中國銀河(06881)因可轉(zhuǎn)債轉(zhuǎn)股2022年末期股息調(diào)整為每股0.22533元 智通財經(jīng)APP訊,中國銀河(601881)(06881)公布,由于公司于2022年3月24
正業(yè)科技(300410.SZ)選舉余笑兵為董事長 智通財經(jīng)APP訊,正業(yè)科技(300410)(300410 SZ)公告,公司董事會同意選舉
紫金礦業(yè)(02899.HK)預(yù)計上半年凈利約102億元 同比下降19.2% 格隆匯7月7日丨紫金礦業(yè)(02899 HK)公告,公司預(yù)計2023年半年度實(shí)現(xiàn)歸屬
中航光電(002179.SZ):擬投資27.2億元在洛陽購置土地建高端互連科技產(chǎn)業(yè)社區(qū)項目 格隆匯7月7日丨中航光電(002179)(002179 SZ)公布,2023年7月7日,公司
建發(fā)國際集團(tuán)(01908.HK)根據(jù)以股代息計劃發(fā)行1.08億股 格隆匯7月7日丨建發(fā)國際集團(tuán)(01908 HK)公布,根據(jù)公司以股代息計劃而于
源自福特超級平臺,江鈴福特新款輕客來襲 說起輕客,大家的第一印象總是全順...
多彩新媒協(xié)同多省IPTV加速布局大屏生態(tài)圈,“看中國”深度挖掘 智能大屏價值 6月16日,在北京論道暨第25屆中國...
出擊!招行信用卡協(xié)助警方重拳打擊金融“黑灰產(chǎn)”! 在上海浦東新區(qū)某大廈內(nèi),掛著“法...
“2022-2023年度中國醫(yī)藥制造業(yè)百強(qiáng)”出爐,揚(yáng)子江藥業(yè)集團(tuán)榮登榜首 7月4日,由全國工商聯(lián)醫(yī)藥業(yè)商會、...
國慶假期懷柔北部山區(qū)的紅葉進(jìn)入最佳觀賞期 吸引游客前來賞秋景 國慶假期,懷柔北部山區(qū)的紅葉進(jìn)入...
重磅!四川省科創(chuàng)貸款較年初新增620.35億元 同比增長21.22% 記者日前從中國人民銀行成都分行獲...
252項“全程網(wǎng)辦”!川渝兩地企業(yè)登記檔案實(shí)現(xiàn)跨區(qū)域互查 8月30日,記者從省大數(shù)據(jù)中心獲悉...
2022年中國國際服務(wù)貿(mào)易交易會在京舉辦 四川參展企業(yè)數(shù)量創(chuàng)新高 8月31日至9月5日,主題為服務(wù)合作...