PT工具3.0版本詳解(持續更新中)

#格式化輸出     
vmstat | pt-align
r b swpd   free   buff  cache si so  bi  bo in cs us sy id wa st
4 0 7936 248772 120240 750980  0  0 199 476 29 14  1  0 98  1  0
#監控磁盤   
pt-diskstats              
#記錄MySQL外鍵錯誤
pt-fk-error-logger u=root,p=970125,h=127.0.0.1,P=3306       
#將mysqladmin輸出的多次迭代的相同status變量值放到同一行輸出
pt-mext -r -- mysqladmin -uroot -p970125 ext -i1 -c3                  
#PostgreSQL 數據收集
pt-pg-summary  --host= --username= --password= --port= --database=           
#在一定條件下觸發,採集一些監控數據便於分析問題。運行該功能需要有root權限
pt-stalk --disk-pct-free 20 --collect-tcpdump --function status --variable Threads_connected --threshold 20 --iterations 2000 --daemonize --user=root --password=970125
日誌默認存儲:/var/log/pt-stalk.log
pid默認存儲 :/run/pt-stalk.pid
記錄文件默認存儲 : /var/lib/pt-stalk
#分析pt-stalk的輸出
pt-sift
#OS信息               
pt-summary     
#分析參數,並且給出參數設置建議           
pt-variable-advisor h=127.0.0.1, P=3306, u=root, p=970125
#數據導入導出工具
pt-archiver --source h=127.0.0.1,P=3306,D=sbtest,t=t_user,u=root,p=rootpwd --dest h=127.0.0.1,P=3306,D=test,t=t_user_tg,u=root,p=rootpwd --no-check-charset  --share-lock --sleep=1 --where 'id>=0'  --no-delete --progress 1000 --limit 1000 --txn-size 1000 --statistics --file '/tmp/arch_%Y-%m-%d-%D.%t.log'
#檢測表中重複的索引或者主鍵            
pt-duplicate-key-checker --host=127.0.0.1 --user=root --password=970125
#不要用SECONDS_BEHIND_MASTER來衡量MYSQL主備的延遲時間,原因如下:
#A:備庫Seconds_behand_master值是通過將服務器當前的時間戳與二進制日誌中的事件的時間戳對比得到的,所以只有在執行事件時才能報告延遲
#B:如果備庫複製線程沒有運行,就會報延遲爲null
#C:一些錯誤,如主備的max_allowed_packet不匹配或者網絡不穩定時,可能中斷複製或者停止複製線程,但Seconds_behand_master將顯示爲0而不是顯示錯誤
#D:即使備庫線程正在運行,備庫有時候可能無法計算延遲時,如果發生這種情況,備庫會報0或者null
#E:一個較大的事務可能導致延遲波動,如:有一個事務更新數據長達一個小時,最後提交,這條更新將比它實際發生時間要晚一個小時才記錄到二進制日誌中,當備庫執行這條語句時,會臨時地報告備庫延遲一個小時,然後很快又變回0
#F:如果分發主庫落後了,並且其本身也有已經追趕上它的備庫,備庫的延遲將顯示爲0,而事實上備庫和源主庫之間此時是有延遲的。
#這個時候可以使用pt-heartbeat腳本是複製心跳
CREATE TABLE heartbeat (

  ts                    varchar(26) NOT NULL,
  server_id             int unsigned NOT NULL PRIMARY KEY,
  file                  varchar(255) DEFAULT NULL,    -- SHOW MASTER STATUS
  position              bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS
  relay_master_log_file varchar(255) DEFAULT NULL,    -- SHOW SLAVE STATUS
  exec_master_log_pos   bigint unsigned DEFAULT NULL  -- SHOW SLAVE STATUS
);
pt-heartbeat -D sbtest --update --host=127.0.0.1 --user=root --password=970125 --daemonize             
#mongo統計信息收集
pt-mongodb-summary -uroot -p970125   
#pt-pmp有兩方面的作用:一是獲取進程的堆棧信息,二是對這些堆棧信息進行彙總
pt-pmp --binary mysqld                   
#可以使命令延遲寫入從庫,一定程度上緩解問題,從庫執行
pt-slave-delay --delay=1m --interval=15s --run-time=10m --ask-pass u=root,h=127.0.0.1,P=3307
#校驗主從
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'USER'@'MASTER_HOST' identified  by 'PASSWORD';
pt-table-checksum h='127.0.0.1',u='repl',p='970125',P=3306 --nocheck-replication-filters --replicate=pt.checksums  --no-check-binlog-format --recursion-method=processlist
#格式化explain出來的執行計劃按照tree方式輸出  
mysql -uroot -p970125 -h127.0.0.1 -e "explain select * from sbtest.test2 where id<10" | pt-visual-explain             
#模擬切割文件並通過管道傳遞給先入先出隊列而不用真正的切割文件
#一個每次讀取一百萬行,指定fifo文件爲/tmp/my-fifo,並使用load data命令導入到mysql中:
pt-fifo-split infile.txt --fifo /tmp/my-fifo --lines 1000000
while [ -e /tmp/my-fifo ]; do
  mysql -e "set foreign_key_checks=0; set sql_log_bin=0; set unique_checks=0; load data local infile '/tmp/my-fifo' into table load_test fields terminated by '\t' lines terminated by '\n' (col1, col2);"
  sleep 1;
done    
#從慢查詢日誌中讀取查詢並分析它們如何使用索引   
pt-index-usage /data/mysql/logs/slow.log --host=127.0.0.1 --user=root --password=970125                  
#分析慢日誌
pt-query-digest -uroot -p970125 -h127.0.0.1 slow.log --since '2019-01-01 00:00:00' --until '2019-12-01 00:00:00'> slow_report.log
(1)直接分析慢查詢文件:
pt-query-digest slow.log > slow_report.log
 
(2)分析最近12小時內的查詢:
pt-query-digest  --since=12h  slow.log > slow_report2.log

 

(3)分析指定時間範圍內的查詢:

pt-query-digest slow.log --since '2014-04-17 09:30:00' --until '2014-04-17 10:00:00'> > slow_report3.log


(4)分析指含有select語句的慢查詢
pt-query-digest--filter '$event->{fingerprint} =~ m/^select/i' slow.log> slow_report4.log

(5) 針對某個用戶的慢查詢
pt-query-digest--filter '($event->{user} || "") =~ m/^root/i' slow.log> slow_report5.log

(6) 查詢所有所有的全表掃描或full join的慢查詢
pt-query-digest--filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' slow.log> slow_report6.log

(7)把查詢保存到query_review表
pt-query-digest  --user=root –password=abc123 --review  h=localhost,D=test,t=query_review--create-review-table  slow.log


(8)把查詢保存到query_history表
pt-query-digest  --user=root –password=abc123 --review  h=localhost,D=test,t=query_ history--create-review-table  slow.log_20140401
pt-query-digest  --user=root –password=abc123--review  h=localhost,D=test,t=query_history--create-review-table  slow.log_20140402

(9)通過tcpdump抓取mysql的tcp協議數據,然後再分析
tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log

(10)分析binlog
mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql
pt-query-digest  --type=binlog  mysql-bin000093.sql > slow_report10.log

(11)分析general log
pt-query-digest  --type=genlog  localhost.log > slow_report11.log



#從查詢分析器聚合查詢並報告查詢使用情況統計信息
pt-mongodb-query-digest -uroot -p970125 -dtest
#查找和打印MySQL從庫的複製層次樹
pt-slave-find -h127.0.0.1 -P3307 -uroot -p970125           
#恢復主從一致
pt-table-sync --execute h=127.0.0.1,P=3306,D=sbtest,t=test2,u=root,p=970125 h=127.0.0.1,P=3307,u=root,p=970125 --no-check-slave --print           
#diff不同的MySQL配置文件以及不同的服務器變量設置
pt-config-diff h=127.0.0.1,P=3306,u=root,p=970125 h=127.0.0.1,P=3307,u=root,p=970125 --report-width=120           
#查找MySQL表並執行命令
pt-find -uroot -p970125 --tablesize +1k        
#pt io
pt-ioprofile --profile-process=mysqld --run-time=60 --save-samples=/root/ioprofile.txt --group-by=filename --cell=count --aggregate=sum
pt-ioprofile --profile-pid=$(31828 mysqld) --run-time=60  --cell=count 
#輸出MySQL的基本信息        
pt-mysql-summary  --user=root --password=970125
#收集、清理、打包和加密數據
pt-secure-collect collect --bin-dir=/usr/bin --temp-dir="/root/pt_collection" --no-encrypt --no-remove-temp-files --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=970125      
#監控和出錯後重啓MySQL複製,跳過錯誤
pt-slave-restart -h127.0.0.1 -P3307 -uroot -p970125 --sleep=60        
#析查詢如何使用表
pt-table-usage --query="select * from sbtest.t1 where id=1"
#監控死鎖
pt-deadlock-logger --run-time=10 --interval=3 --create-dest-table --dest D=sbtest,t=deadlocks u=root,p=970125      
#將一類SQL語句轉換成綁定變量的模式
pt-fingerprint --match-embedded-numbers file.txt |sort|uniq          
#pt kill
查殺大於30s的會話
pt-kill --host=10.39.45.13 --port=3306 --user=root --password=970125  --match-db='sbtest'  --match-command="Query" --busy-time 30 --victims all --interval 10 --daemonize --kill  --print --log=/tmp/kill.log
查殺select大於30s的會話
pt-kill --host=10.39.45.13 --port=3306 --user=root --password=970125  --match-db='sbtest'  --match-info "select|SELECT" --busy-time 30 --victims all --interval 10 --daemonize --kill  --print --log=/tmp/kill.log
查殺某IP來源的會話
pt-kill --host=10.39.45.13 --port=3306 --user=root --password=970125  --match-db='sbtest'  --match-host "10.39.21.10" --busy-time 30 --victims all --interval 10 --daemonize --kill  --print --log=/tmp/kill.log
查殺訪問某用戶的會話
pt-kill --host=10.39.45.13 --port=3306 --user=root --password=970125  --match-db='sbtest'  --match-user "user" --busy-time 30 --victims all --interval 10 --daemonize --kill  --print --log=/tmp/kill.log
#pt ddl
pt-online-schema-change -uroot -p'****' --charset=utf8 --dry-run --print --alter="ADD INDEX idx_order_no (order_no) USING BTREE" D=virtual,t=trans_order_log
nohup pt-online-schema-change -uroot -p'****' --charset=utf8 --execute --alter="ADD INDEX idx_order_no (order_no) USING BTREE" D=virtual,t=trans_order_log&
#格式化打印輸出MySQL上的賦權
pt-show-grants --user=root --host=127.0.0.1 --port=3306 --password=970125                           
#對比不同mysql版本下SQL執行的差異,通常用於升級前進行對比
pt-upgrade h=127.0.01,P=3306,u=root,p=970125 h=127.0.0.1,P=3307,u=root,p=970125 --database sbtest aa.sql
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章