MySQL在線修改大表神器:PT工具


緣由

最近我們公司的慢SQL特別多,特別是某個固定的表,每天基本都有好幾千的慢查詢,但是這個表有特別大,不能隨意加索引,索引我們就需要一個工具來協助我們進行改DDL的時候,不影響業務,那就是 PT工具


效果圖

如下是慢SQL數量折線圖 明顯可以看到大幅度下降了

image.png


使用場景

在線數據庫的維護中,總會涉及到研發修改表結構的情況,修改一些小表影響很小,而修改大表時,往往影響業務的正常運轉,如表數據量超過500W,1000W,甚至過億時

在線修改大表的可能影響

在線修改大表的表結構執行時間往往不可預估,一般時間較長

由於修改表結構是表級鎖,因此在修改表結構時,影響表寫入操作

如果長時間的修改表結構,中途修改失敗,由於修改表結構是一個事務,因此失敗后會還原表結構,在這個過程中表都是鎖着不可寫入

修改大表結構容易導致數據庫CPU、IO等性能消耗,使MySQL服務器性能降低

在線修改大表結構容易導致主從延時,從而影響業務讀取


pt-online-schema-change介紹

pt-online-schema-change是percona公司開發的一個工具,在percona-toolkit包里面可以找到這個功能,它可以在線修改表結構

原理:

1.建立一個與需要操作的表相同表結構的空表

2.給空表執行表結構修改

3.在原表上增加delete/update/insert的after trigger

4.copy數據到新表

5.將原表改名,並將新表改成原表名

6.刪除原表

7.刪除trigger

pt-osc限制條件

1.表要有主鍵,否則會報錯;

2.表不能有trigger

pt-online-schema-change安裝

wget percona.com/get/percona-toolkit.tar.gz
tar -zxvf percona-toolkit.tar.gz
cd percona-toolkit-3.1.0/
yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
#提示缺少perl-DBI模塊
yum install perl-DBD-MySQL
#Can't locate Digest/MD5.pm
yum -y install perl-Digest-MD5
perl Makefile.PL
make && make install

使用

pt-online-schema-change --help 可以查看參數的使用,我們只是要修改個表結構,只需要知道幾個簡單的參數就可以了

場景1:增加列

pt-online-schema-change --no-version-check --host=192.168.0.0 -uroot --ask-pass --alter "add column age int(11) default null" D=test,t='test_tb' --execute 

場景2:刪除列

pt-online-schema-change  --no-version-check --host=192.168.0.0 -uroot --ask-pass --alter "drop column age" D=test,t='test_tb' --execute 

場景3:更改列

pt-online-schema-change  --no-version-check --host=192.168.0.0 -uroot --ask-pass --alter "CHANGE id id_num int(20)" D=test,t='test_tb' --execute 

場景4:創建索引
pt-online-schema-change  --no-version-check --host=192.168.0.0 -uroot --ask-pass --alter "add index indx_ukid(address_ukid)" D=test,t='address_tb' --execute 

場景5:刪除索引
pt-online-schema-change  --no-version-check --host=192.168.0.0 -uroot --ask-pass --alter "drop index indx_ukid" D=test,t='address_tb' --execute

建議

pt-online-schema-change工具還有很多其他的參數,可以有很多限制,比如限制CPU、線程數量、從庫狀態等等,不過我做過一個超過6000W表的結構修改,發現幾乎不影響性能,很穩定很流暢的就修改了表結構,所以,對以上常規參數的使用基本能滿足業務

一定要在業務低峰期做,這樣才能確保萬無一失

參考手冊

  1. https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html#cmdoption-pt-online-schema-change-recursion-method

  2. https://www.cnblogs.com/hxlasky/p/11555271.html



原文地址: MySQL在線修改大表神器:PT工具
標簽: pt    mysql   

智能推薦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM