pt_tools04 pt-archiver

TOChtml

http://www.javashuo.com/article/p-vwpskpsw-ga.htmlmysql


1. 語法

注意:pt-archiver操做的表必須有主鍵。sql

1.1 選項:

Specify at least one of "--dest","--file", or "--purge".數據庫

下面幾個參數都是互斥的,只能選其一app

"--ignore"and "--replace" are mutually exclusive. 
    "--txn-size"and "--commit-each" are mutually exclusive.
    "--low-priority-insert"and "--delayed-insert" are mutually exclusive.
    "--share-lock"and "--for-update" are mutually exclusive.
    "--analyze"and "--optimize" are mutually exclusive.
    "--no-ascend"and "--no-delete" are mutually exclusive.

1.2 經常使用參數

--limit10000 每次取1000行數據用pt-archive處理,Number of rows to fetch and archive per statement.
--txn-size 1000 設置1000行爲一個事務提交一次,Number of rows pertransaction.
--where‘id<3000‘ 設置操做條件
--progress5000 每處理5000行輸出一次處理信息
--statistics 輸出執行過程及最後的操做統計。(只要不加上--quiet,默認狀況下pt-archive都會輸出執行過程的)
--charset=UTF8 指定字符集爲UTF8
--bulk-delete 批量刪除source上的舊數據(例如每次1000行的批量刪除操做)
--bulk-insert 批量插入數據到dest主機 (看dest的general log發現它是經過在dest主機上LOAD DATA LOCAL INFILE插入數據的)
--replace 將insert into 語句改爲replace寫入到dest庫
--sleep120 每次歸檔了limit個行記錄後的休眠120秒(單位爲秒)
--file‘/root/test.txt‘
--purge 刪除source數據庫的相關匹配記錄
--header 輸入列名稱到首行(和--file一塊兒使用)
--no-check-charset 不指定字符集
--check-columns 檢驗dest和source的表結構是否一致,不一致自動拒絕執行(不加這個參數也行。默認就是執行檢查的)
--no-check-columns 不檢驗dest和source的表結構是否一致,不一致也執行(會致使dest上的沒法與source匹配的列值被置爲null或者0)
--chekc-interval 默認1s檢查一次
--local 不把optimize或analyze操做寫入到binlog裏面(防止形成主從延遲巨大)
--retries 超時或者出現死鎖的話,pt-archiver進行重試的間隔(默認1s)
--no-version-check 目前爲止,發現部分pt工具對阿里雲RDS操做必須加這個參數
--analyze=ds 操做結束後,優化表空間(d表示dest,s表示source)

默認狀況下,pt-archiver操做結束後,不會對source、dest表執行analyze或optimize操做,由於這種操做費時間,而且須要你提早預估有足夠的磁盤空間用於拷貝表。通常建議也是pt-archiver操做結束後,在業務低谷手動執行analyze table用以回收表空間。工具


2. 例子

2.1 刪除老數據

pt-archiver --txn-size=2000 --sleep=1 --limit=2000 --statistics --no-check-charset --no-version-check --purge --bulk-delete --source h=rm-bp191tt4364tbtpqb143.mysql.rds.aliyuncs.com,P=3306,u=,p='',D=esjobdata,t=job_execution_log,i=idx_complete_time --where "complete_time < '2019-04-1 00:00:00'"

2.2 歸檔

pt-archiver --txn-size=1000 --limit=1000 --sleep=1 --bulk-insert --no-delete --statistics --no-check-charset --no-version-check --source h=rm-bp13xy75phh7c60em206.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=bx_app_chatroom,t=t_chatroom_behavior_log --dest h=rm-bp13xy75phh7c60em206.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=bx_app_chatroom,t=t_chatroom_behavior_log_tmp --where "create_time < '2019-03-28 11:00:00'"
# 37---> 存放歷史數據 rm-bp1vwq001c60rav2o.mysql.rds.aliyuncs.com [ ypp_app_2016 ]  

## 反歸檔
pt-archiver --txn-size=1000 --sleep=1 --limit=1000 --bulk-insert --no-delete --statistics --no-check-charset --no-version-check --source h=rm-bp1vwq001c60rav2o.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=ypp_app_2016,t=risk_hit_data_20190119 --dest h=rm-bp1p8i0ia67e44cbi.mysql.rds.aliyuncs.com,L=1,P=3306,u=inception_rw,p='',D=ypp_fengkong,t=risk_hit_data --where "play_order_create_time = '1970-01-01 00:00:00'"

## 刪除控制延遲
pt-archiver --txn-size=3000 --limit=6000 --statistics --no-check-charset --no-version-check --purge --bulk-delete --source u=,p='',h=rm-bp1p8i0ia67e44cbi.mysql.rds.aliyuncs.com,P=3306,D=ypp_fengkong,t=risk_message_record --where "created_at < '2019-03-01 00:00:00'" --max-lag=30 --check-slave-lag u=,p='',h=rr-bp18xi82q15s3ahao.mysql.rds.aliyuncs.com,P=3306

2.3 pt-archiver 測試對錶數據重複插入

#test表3條數據, test_tmp空表
#pt-archiver --txn-size=1000 --limit=1000 --sleep=1 --bulk-insert --no-delete --statistics --no-check-charset --no-version-check --source h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=test_ince,t=test --dest h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=test_ince,t=test_tmp --where "id < 4"
Started at 2019-03-28T17:27:07, ended at 2019-03-28T17:27:08
Source: D=test_ince,L=1,P=3306,h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,p=...,t=test,u=
Dest: D=test_ince,L=1,P=3306,h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,p=...,t=test_tmp,u=
SELECT 3
INSERT 3
DELETE 0
Action Count Time Pct
sleep 1 1.0002 98.67
bulk_inserting 1 0.0021 0.21
commit 2 0.0021 0.21
select 2 0.0017 0.17
print_bulkfile 3 0.0000 0.00
other 0 0.0076 0.75


#test 表3條數據, test_tmp 3條數據
#pt-archiver --txn-size=1000 --limit=1000 --sleep=1 --bulk-insert --no-delete --statistics --no-check-charset --no-version-check --source h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=test_ince,t=test --dest h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=test_ince,t=test_tmp --where "id < 4"
Started at 2019-03-28T17:27:40, ended at 2019-03-28T17:27:41
Source: D=test_ince,L=1,P=3306,h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,p=...,t=test,u=
Dest: D=test_ince,L=1,P=3306,h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,p=...,t=test_tmp,u=
SELECT 3
INSERT 0
DELETE 0
Action Count Time Pct
sleep 1 1.0002 98.67
bulk_inserting 1 0.0022 0.21
select 2 0.0019 0.19
commit 2 0.0014 0.14
print_bulkfile 3 0.0000 0.00
other 0 0.0080 0.79


#mysql> delete from test_tmp where id = 2;
#pt-archiver --txn-size=1000 --limit=1000 --sleep=1 --bulk-insert --no-delete --statistics --no-check-charset --no-version-check --source h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=test_ince,t=test --dest h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=test_ince,t=test_tmp --where "id < 4"
Started at 2019-03-28T17:29:35, ended at 2019-03-28T17:29:36
Source: D=test_ince,L=1,P=3306,h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,p=...,t=test,u=
Dest: D=test_ince,L=1,P=3306,h=rm-bp1q926uimur046k5905.mysql.rds.aliyuncs.com,p=...,t=test_tmp,u=
SELECT 3
INSERT 1
DELETE 0
Action Count Time Pct
sleep 1 1.0002 98.51
select 2 0.0027 0.27
bulk_inserting 1 0.0024 0.24
commit 2 0.0023 0.22
print_bulkfile 3 0.0000 0.00
other 0 0.0077 0.75

結論: 已有數據不會重複插入測試

主鍵非遞增類型

建議強制走索引fetch

# 默認語句
pt-archiver --txn-size=2000 --limit=4000 --sleep=1 --bulk-insert --no-delete --statistics --no-check-charset --no-version-check --source h=rm-bp13xy75phh7c60em206.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=bx_app_chatroom,t=t_chatroom_behavior_log_old --dest h=rm-bp13xy75phh7c60em206.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=bx_app_chatroom,t=t_chatroom_behavior_log --where "create_time >= '2019-03-28 18:45:00' "

#執行的語句是全表掃描
mysql> explain SELECT /*!40001 SQL_NO_CACHE */ `id`,`room_id`,`user_id`,`platform`,`app_version`,`bundle_id`,`content`,`type`,`status`,`memo`,`create_time`,`app_id` FROM `bx_app_chatroom`.`t_chatroom_behavior_log_old` FORCE INDEX(`PRIMARY`) WHERE (create_time >= '2019-03-28 18:45:00' ) AND ((`id` > '12881a67935244d6b4b0190bea499822')) ORDER BY `id` LIMIT 4000;
+----+-------------+-----------------------------+-------+---------------+---------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------------------+-------+---------------+---------+---------+------+----------+-------------+
| 1 | SIMPLE | t_chatroom_behavior_log_old | range | PRIMARY | PRIMARY | 98 | NULL | 11111765 | Using where |
+----+-------------+-----------------------------+-------+---------------+---------+---------+------+----------+-------------+



# i指定索引
pt-archiver --txn-size=2000 --limit=4000 --sleep=1 --bulk-insert --no-delete --statistics --no-check-charset --no-version-check --source h=rm-bp13xy75phh7c60em206.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=bx_app_chatroom,t=t_chatroom_behavior_log_old,i=idx_create_time --dest h=rm-bp13xy75phh7c60em206.mysql.rds.aliyuncs.com,L=1,P=3306,u=,p='',D=bx_app_chatroom,t=t_chatroom_behavior_log --where "create_time >= '2019-03-28 18:45:00' "


mysql> explain SELECT /*!40001 SQL_NO_CACHE */ `id`,`room_id`,`user_id`,`platform`,`app_version`,`bundle_id`,`content`,`type`,`status`,`memo`,`create_time`,`app_id` FROM `bx_app_chatroom`.`t_chatroom_behavior_log_old` FORCE INDEX(`idx_create_time`) WHERE (create_time >= '2019-03-28 18:45:00' ) AND ((`create_time` > '2019-03-28 18:55:04')) ORDER BY `create_time` LIMIT 4000;
+----+-------------+-----------------------------+-------+-----------------+-----------------+---------+------+--------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------------------+-------+-----------------+-----------------+---------+------+--------+-----------------------+
| 1 | SIMPLE | t_chatroom_behavior_log_old | range | idx_create_time | idx_create_time | 4 | NULL | 231168 | Using index condition |
+----+-------------+-----------------------------+-------+-----------------+-----------------+---------+------+--------+-----------------------+

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">優化



本站公眾號
   歡迎關注本站公眾號,獲取更多信息