緣由
最近我們公司的慢SQL特別多,特別是某個固定的表,每天基本都有好幾千的慢查詢,但是這個表有特別大,不能隨意加索引,索引我們就需要一個工具來協助我們進行改DDL的時候,不影響業務,那就是 PT工具
效果圖
如下是慢SQL數量折線圖 明顯可以看到大幅度下降了
使用場景
在線數據庫的維護中,總會涉及到研發修改表結構的情況,修改一些小表影響很小,而修改大表時,往往影響業務的正常運轉,如表數據量超過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表的結構修改,發現幾乎不影響性能,很穩定很流暢的就修改了表結構,所以,對以上常規參數的使用基本能滿足業務
一定要在業務低峰期做,這樣才能確保萬無一失
參考手冊
https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html#cmdoption-pt-online-schema-change-recursion-method
https://www.cnblogs.com/hxlasky/p/11555271.html
原文地址: MySQL在線修改大表神器:PT工具
標簽: pt mysql