主頁 > 資料庫 > Mysql DDL執行方式-pt-osc介紹 | 京東云技術團隊

Mysql DDL執行方式-pt-osc介紹 | 京東云技術團隊

2023-05-31 09:48:26 資料庫

1 引言

大家好,接著上次和大家一起學習了《MySQL DDL執行方式-Online DDL介紹》,那么今天接著和大家一起學習另一種MySQL DDL執行方式之pt-soc

在MySQL使用程序中,根據業務的需求對表結構進行變更是個普遍的運維操作,這些稱為DDL操作,常見的DDL操作有在表上增加新列或給某個列添加索引,

DDL定義:

Data Definition Language,即資料定義語言,那相關的定義操作就是DDL,包括:新建、修改、洗掉等;相關的命令有:CREATE,ALTER,DROP,TRUNCATE截斷表內容(開發期,還是挺常用的),COMMENT 為資料字典添加備注,

注意:DDL操作是隱性提交的,不能rollback,一定要謹慎哦!

下圖是執行方式的性能對比及說明:

圖1 易維平臺說明圖

下面本文將對DDL的執行工具之pt-osc進行簡要介紹及分析,如有錯誤,還請各位大佬們批評指正,

2 介紹

pt-online-schema-change - ALTER tables without locking them.

pt-online-schema-change alters 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公司開發的一個非常好用的DDL工具,稱為 pt-online-schema-change,是Percona-Toolkit工具集中的一個組件,很多DBA在使用Percona-Toolkit時第一個使用的工具就是它,同時也是使用最頻繁的一個工具,它可以做到在修改表結構的同時(即進行DDL操作)不阻塞資料庫表DML的進行,這樣降低了對生產環境資料庫的影響,在MySQL5.6之前是不支持Online DDL特性的,即使在添加二級索引的時候有FIC特性,但是在修改表欄位的時候還是會有鎖表并阻止表的DML操作,這樣對于DBA來說是非常痛苦的,好在有pt-online-schema-change工具在沒有Online DDL時解決了這一問題,

Percona 公司是成立于2006年,總部在美國北卡羅來納的Raleigh,由 Peter Zaitsev 和 Vadim Tkachenko創立, 這家公司聲稱他們提供的軟體都是免費的,他們的收入主要來與開源社區,企業的支持,以及使用他們軟體的公司的支付他們提供support的費用, 而實際上這家公司"壟斷"了業內最流行資料庫支持類的軟體,并且還開發了一些其他的與資料庫相關的東西,

Percona-Toolkit工具集是Percona支持資料庫人員用來執行各種MySQL、MongoDB和系統任務的高級命令列工具的集合,這些任務太難或太復雜而無法手動執行,這些工具是私有或“一次性”腳本的理想替代品,因為它們是經過專業開發、正式測驗和完整記錄的,它們也是完全獨立的,因此安裝快速簡便,無需安裝任何庫,

Percona Toolkit 源自 Maatkit 和 Aspersa,這兩個最著名的 MySQL 服務器管理工?具包,它由 Percona 開發和支持,

3 作業流程

pt-osc 用于修改表時不鎖表,簡單地說,這個工具創建一個與原始表一樣的新的空表,并根據需要更改表結構,然后將原始表中的資料以小塊形式復制到新表中,然后洗掉原始表,然后將新表重命名為原始名稱,在復制程序中,對原始表的所有新的更改(insert,delete,update)都將應用于新表,因為在原始表上創建了一個觸發器,以確保所有新的更改都將應用于新表,有關 pt-online-schema-change 工具的更多資訊,請查閱手冊檔案 ,

pt-osc大致的作業程序如下:

1.創建一個和要執行 alter 操作的表一樣的新的空表結構(是alter之前的結構);

2.在新表執行alter table 陳述句(速度應該很快);

3.在原表中創建觸發器3個觸發器分別對應insert,update,delete操作,如果表中已經定義了觸發器這個工具就不能作業了;

4.以一定塊大小從原表拷貝資料到臨時表,拷貝程序中通過原表上的觸發器在原表進行的寫操作都會更新到新建的臨時表,保證資料不會丟失(會限制每次拷貝資料的行數以保證拷貝不會過多消耗服務器資源,采用 LOCK IN SHARE MODE 來獲取要拷貝資料段的最新資料并對資料加共享鎖阻止其他會話修改資料,不過每次加S鎖的行數不多,很快就會被釋放);

5.將原表Rename為old表,再把新表Rename為原表(整個程序只在rename表的時間會鎖一下表,其他時候不鎖表);

6.如果有參考該表的外鍵,根據alter-foreign-keys-method引數的值,檢測外鍵相關的表,做相應設定的處理(根據修改后的資料,修改外鍵關聯的子表),如果被修改表存在外鍵定義但沒有使用
--alter-foreign-keys-method 指定特定的值,該工具不予執行;

7.默認最后將舊原表洗掉、觸發器洗掉,

圖2 pt-osc作業程序示意圖

4 用法

Percona Toolkit 是成熟的,但是官方還是建議在使用前做到以下幾點:

?閱讀該工具的詳細檔案

?查看該工具的已知“錯誤”

?在非生產服務器上測驗該工具

?備份您的生產資料并驗證備份

下載安裝:

從官方網站下載percona-toolkit,然后執行下面的命令進行安裝(示例):

# 安裝依賴包
yum install perl-TermReadKey.x86_64 
yum install perl-DBI
yum install perl-DBD-MySQL
yum install perl-Time-HiRes
yum install perl-IO-Socket-SSL


# 安裝percona-toolkit
rpm -ivh percona-toolkit-3.1.0-2.el7.x86_64.rpm


執行類似下面的命令修改表結構:

pt-online-schema-change --alter="add column c1 int;" --execute D=test,t=table,u=user,p=password


alter引數指定修改表結構的陳述句,execute表示立即執行,D、t、u、p分別指定庫名、表名、用戶名和密碼,執行期間不阻塞其它并行的DML陳述句,pt-online-schema-change還有許多選項,具體用法可以使用pt-online-schema-change --help查看聯機幫助,

5 限制

pt-online-schema-change也存在一些局限性:

1.在使用此工具之前,應為表定義PRIMARY KEY或唯一索引,因為它是DELETE觸發器所必需的;

2.如果表已經定義了觸發器,則不支持 pt-osc ;(注:不是不能有任何觸發器,只是不能有針對insert、update、delete的觸發器存在,因為一個表上不能有兩個相同型別的觸發器);

3.如果表具有外鍵約束,需要使用選項
--alter-foreign-keys-method,如果被修改表存在外鍵定義但沒有使用 --alter-foreign-keys-method 指定特定的值,該工具不予執行;

4.還是因為外鍵,物件名稱可能會改變(indexes names 等);

5.在Galera集群環境中,不支持更改MyISAM表,系統變數 wsrep_OSU_method 必須設定為總序隔離(Total Order Isolation,TOI);

6.此工具僅適用于 MySQL 5.0.2 及更新版本(因為早期版本不支持觸發器);

7.需要給執行的賬戶在 MySQL上授權,才能正確運行,(應在服務器上授予PROCESS、SUPER、REPLICATION SLAVE全域權限以及 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER 和 TRIGGER 表權限,Slave 只需要 REPLICATION SLAVE 和 REPLICATION CLIENT 權限,)

6 對比OnLine DDL

下面的表格是國外技術牛人進行的測驗資料,是Online DDL和pt-osc對一個包含1,078,880行的表應用一些alter操作的對比結果,僅供參考:

online ddl pt-osc
更改操作 受影響的行 是否鎖表 時間(秒) 受影響的行 是否鎖表 時間(秒)
添加索引 0 3.76 所有行 38.12
下降指數 0 0.34 所有行 36.04
添加列 0 27.61 所有行 37.21
重命名列 0 0.06 所有行 34.16
重命名列更改其資料型別 所有行 30.21 所有行 34.23
洗掉列 0 22.41 所有行 31.57
更改表引擎 所有行 25.3 所有行 35.54

那么現在的問題是,我們應該使用哪種方法來執行alter陳述句呢?

雖然pt-osc允許對正在更改的表進行讀寫操作,但它仍然會在后臺將表資料復制到臨時表,這會增加MySQL服務器的開銷,所以基本上,如果Online DDL不能有效作業,我們應該使用 pt-sc,換句話說,如果Online DDL需要將資料復制到臨時表(algorithm=copy)并且該表將被長時間阻塞(lock=exclusive)或者在復制環境中更改大表時,我們應該使用 pt-osc工具,

pt-osc官方檔案:
https://docs.percona.com/percona-toolkit/pt-online-schema-change.html

7 總結

本次和大家一起學習了解pt-online-schema-change工具,介紹了其產生的背景、基本作業流程、用法及相應的一些限制,還介紹了其與Online DDL執行方式的一些對比,如果錯誤還請指正,

目前可用的DDL操作工具包括pt-osc,github的gh-ost,以及MySQL提供的在線修改表結構命令Online DDL,pt-osc和gh-ost均采用拷表方式實作,即創建個空的新表,通過select+insert將舊表中的記錄逐次讀取并插入到新表中,不同之處在于處理DDL期間業務對表的DML操作,

到了MySQL 8.0 官方也對 DDL 的實作重新進行了設計,其中一個最大的改進是 DDL 操作支持了原子特性,另外,Online DDL 的 ALGORITHM 引數增加了一個新的選項:INSTANT,只需修改資料字典中的元資料,無需拷貝資料也無需重建表,同樣也無需加排他 MDL 鎖,原表資料也不受影響,整個 DDL 程序幾乎是瞬間完成的,也不會阻塞 DML,不過目前8.0的INSTANT使用范圍較小,后續再對8.0的INSTANT做詳細介紹吧,

下一期文章將和大家一起學習、了解github的gh-ost,敬請期待哦!

作者:京東物流 劉鄧忠

來源:京東云開發者社區

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/553894.html

標籤:MySQL

上一篇:Mysql Php 推送獲取隨機資料解決分頁重復問題

下一篇:返回列表

標籤雲
其他(160048) Python(38189) JavaScript(25466) Java(18161) C(15234) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7219) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5344) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4579) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1950) C++(1927) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • Mysql DDL執行方式-pt-osc介紹 | 京東云技術團隊

    大家好,接著上次和大家一起學習了《MySQL DDL執行方式-Online DDL介紹》,那么今天接著和大家一起學習另一種MySQL DDL執行方式之pt-soc。 ......

    uj5u.com 2023-05-31 09:48:26 more
  • Mysql Php 推送獲取隨機資料解決分頁重復問題

    或許你已經看過很多博主寫的文章,要不就是抄襲,要不就是給你一個下面的陳述句,隨機是隨機了,但是多來兩頁,你會發現前面出現的資料在第三頁甚至第二頁就出現了 select * from table order by rand() 這是因為rand()機制的問題,他每次都會打亂資料給你,然后你去取的時候0- ......

    uj5u.com 2023-05-31 09:48:18 more
  • Doris(五) -- 資料的匯入匯出

    # 資料匯入 ## 使用 Insert 方式同步資料 用戶可以通過 MySQL 協議,使用 INSERT 陳述句進行資料匯入 INSERT 陳述句的使用方式和 MySQL 等資料庫中 INSERT 陳述句的使用方式類似。 INSERT 陳述句支持以下兩種語法: ```SQL INSERT INTO tabl ......

    uj5u.com 2023-05-31 09:47:57 more
  • 4萬多論壇頭像個性頭像ACCESS資料庫

    在之前就弄到過個性網名和論壇簽名的資料,比如有《8萬多個網名大全QQ網名ACCESS資料庫》、《個性網名大全網路名稱大全ACCESS資料庫》《2萬多條QQ簽名論壇簽名大全ACCESS資料庫》、《24萬QQ傷感簽名論壇簽名ACCESS資料庫》、《近2萬簽名的句子網路簽名ACCESS資料庫》、《上萬條個 ......

    uj5u.com 2023-05-31 09:47:38 more
  • 用一杯星巴克的錢,訓練自己私有化的ChatGPT

    ![file](https://img2023.cnblogs.com/other/2685289/202305/2685289-20230530115137903-2141604303.png) > 文章摘要:用一杯星巴克的錢,自己動手2小時的時間,就可以擁有自己訓練的開源大模型,并可以根據不同的 ......

    uj5u.com 2023-05-31 09:45:27 more
  • Doris(三) -- Rollup和物化視圖

    # Rollup ROLLUP 在多維分析中是“上卷”的意思,即將資料按某種指定的粒度進行進一步聚合。 通過建表陳述句創建出來的表稱為 Base 表(Base Table,基表) 在 Base 表之上,我們可以創建任意多個 ROLLUP 表。這些 ROLLUP 的資料是基于 Base 表產生的,并且在 ......

    uj5u.com 2023-05-30 08:18:20 more
  • 花了億點點時間,寫了一個趕海和茶藝小程式:探索多重功能,開啟精彩互

    在繁忙的生活中,我們常常渴望找到一個靈感迸發、充滿藝術與智慧的休憩之所。幸運的是,經過小編沒日沒夜的奮斗,趕海和茶藝小程式應運而生,為您帶來一系列令人驚喜的功能,讓您盡情享受多重體驗。 趕海和茶藝小程式融合了多種功能,帶給您全方位的娛樂、學習和創作體驗。無論是積累功德、獲取每日推送的精彩內容,還是發 ......

    uj5u.com 2023-05-30 08:18:00 more
  • GaussDB(DWS)遷移實踐丨row_number輸出結果不一致

    摘要:遷移前后結果集row_number欄位值前后不一致,前在DWS上運行不一致。 本文分享自華為云社區《GaussDB(DWS)遷移 - oracle兼容 --row_number輸出結果不一致》,作者:譡里個檔 。 【問題表現】 遷移前后結果集row_number欄位值前后不一致,前在DWS上運 ......

    uj5u.com 2023-05-30 08:17:39 more
  • 玩轉MySQL資料庫之SQL優化之慢查詢

    本系列為:MySQL資料庫詳解,為千鋒資深教學老師獨家創作,致力于為大家講解清晰MySQL資料庫相關知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【關注】持續追更~文末有本文重點總結,技術類問題,也歡迎大家和我們溝通交流! ......

    uj5u.com 2023-05-30 08:17:34 more
  • 上萬條全球各國紙幣大全含圖ACCESS資料庫

    《上萬條全球各國紙幣大全含圖ACCESS資料庫》是今天采集自錢幣大全網站的紙幣資料,大類包含:中國大陸、中國臺灣、中國香港、中國澳門、亞洲紙鈔、歐洲紙鈔、美洲紙鈔、非洲紙鈔 、大洋洲、其他紙鈔等,而且紙幣資訊包含:國家名稱、英文名稱、目錄編號、紙鈔面額、紙鈔年版、紙鈔規格、所屬類別、詳細資訊等。 收 ......

    uj5u.com 2023-05-30 08:11:56 more