利用percona-toolkit定位數據庫性能問題

當你的性能瓶頸卡在數據庫這塊的時候,能夠經過percona-toolkit來進行問題定位。mysql

 

那麼,首先,介紹下percona-toolkit。percona-toolkit是一組高級命令行工具的集合,用來執行各類經過手工執行很是複雜和麻煩的mysql和系統任務,這些任務包括:sql

 

1)檢查master和slave數據的一致性數據庫

 2)有效地對記錄進行歸檔服務器

 3)查找重複的索引併發

 4)對服務器信息進行彙總tcp

 5)分析來自日誌和tcpdump的查詢工具

 6)當系統出問題的時候收集重要的系統信息性能

 

percona-toolkit源自Maatkit 和Aspersa工具,這兩個工具是管理mysql的最有名的工具,如今Maatkit工具已經不維護了,因此使用percona-toolkit吧!spa

 

 

1、percona-toolkit工具包的安裝命令行

 

1)  percona的安裝十分簡單,去percona的官網下載percona-toolkit:

 https://www.percona.com/downloads/percona-toolkit/

 

2)  在雲主機中進行解壓:tar -xvf percona-toolkit_2.2.15-2.tar.gz

3)  進入到解壓後的目錄 /percona-toolkit-2.2.16/bin 中,就有咱們須要的各類有用命令工具

4)  安裝完成後,能夠用如下命令來確認是否安裝成功

 

# pt-query-digest --help

# pt-table-checksum –help

 

 

2、percona-toolkit命令使用說明

percona-toolkit有32個命令,能夠分爲7大類,詳細見下表:

工具類別

工具命令

工具做用

備註

開發類

pt-duplicate-key-checker

列出並刪除重複的索引和外鍵

 

pt-online-schema-change

在線修改表結構

 

pt-show-grants

規範化和打印權限

 

pt-upgrade

在多個服務器上執行查詢,並比較不一樣

 

性能類

pt-index-usage

分析日誌中索引使用狀況,並出報告

 

pt-pmp

爲查詢結果跟蹤,並彙總跟蹤結果

 

pt-visual-explain

格式化執行計劃

 

pt-table-usage

分析日誌中查詢並分析表使用狀況

pt 2.2新增命令

配置類

pt-config-diff

比較配置文件和參數

 

pt-mysql-summary

對mysql配置和status進行彙總

 

pt-variable-advisor

分析參數,並提出建議

 

監控類

pt-deadlock-logger

提取和記錄mysql死鎖信息

 

pt-fk-error-logger

提取和記錄外鍵信息

 

pt-mext

並行查看status樣本信息

 

pt-query-digest

分析查詢日誌,併產生報告

經常使用命令

複製類

pt-heartbeat

監控mysql複製延遲

 

pt-slave-delay

設定從落後主的時間

 

pt-slave-find

查找和打印全部mysql複製層級關係

 

pt-slave-restart

監控salve錯誤,並嘗試重啓salve

 

pt-table-checksum

校驗主從複製一致性

 

pt-table-sync

高效同步表數據

 

系統類

pt-diskstats

查看系統磁盤狀態

 

pt-fifo-split

模擬切割文件並輸出

 

pt-summary

收集和顯示系統概況

 

pt-stalk

出現問題時,收集診斷數據

 

pt-sift

瀏覽由pt-stalk建立的文件

pt 2.2新增命令

pt-ioprofile

查詢進程IO並打印一個IO活動表

pt 2.2新增命令

實用類

pt-archiver

將表數據歸檔到另外一個表或文件中

 

pt-find

查找表並執行命令

 

pt-kill

Kill掉符合條件的sql

經常使用命令

pt-align

對齊其餘工具的輸出

pt 2.2新增命令

pt-fingerprint

將查詢轉成密文

pt 2.2新增命令

 本文中主要解鎖了pt-query-digest這個命令,其餘命令還待解鎖。

 

 

 

3、結合tcpdump命令一塊兒定位問題

 

1)  用tcpdump命令抓包,抓取須要操做數據的包,本文中以數據庫地址爲10.165.182.2:3306爲例進行說明:

 

sudo tcpdump -s 65535 -x -nn -q -tttt -i any -c 100000 port 3306 > mysql.tcp.txt

 

2)  採用pt-query-digest分析查詢日誌,併產生報告: 

 

./pt-query-digest  --type tcpdump --watch-server  10.165.182.2:3306  ../../mysql.tcp.txt  > ~/sql.txt

 

3)  查看sql.txt這個文檔

 

 

 

4、Percona的報告解讀

 

上面第三部分的步驟2產生的percona的報告以下:

 

1.       整體統計結果,以下圖

 

Overall: 總共有多少條查詢,上例爲總共3.33k個查詢。

Time range: 查詢執行的時間範圍。

unique: 惟一查詢數量,即對查詢條件進行參數化之後,總共有多少個不一樣的查詢,該例爲10。

total: 總計   min:最小   max: 最大  avg:平均

95%: 把全部值從小到大排列,位置位於95%的那個數,這個數通常最具備參考價值。

median: 中位數,把全部值從小到大排列,位置位於中間那個數。

Exec time:語句執行時間

Lock time:鎖佔有時間

Rows sent:發送到客戶端的行數

Row examine:掃描的行數(SELECT語句)

Row affecte:發送改變的行數(UPDATE, DELETE, INSERT語句)

Bytes sent:發送多少bytes的查詢結果集

Query size:查詢語句的字符數

 

 

2.       查詢分組統計結果,以下圖

 

由上圖可見,這部分對查詢進行參數化並分組,而後對各種查詢的執行狀況進行分析,結果按總執行時長,從大到小排序。

Response: 總的響應時間。

time: 該查詢在本次分析中總的時間佔比。

calls: 執行次數,即本次分析總共有多少條這種類型的查詢語句。

R/Call: 平均每次執行的響應時間。

Item : 查詢對象

 

3.       第三部分:每一種查詢的詳細統計結果,以下圖:

 

查詢的詳細統計結果,最上面的表格列出了執行次數、最大、最小、平均、95%等各項目的統計。

QPS:每秒查詢數

concurrency:該查詢的近似併發值

ID:16進制,查詢語句的指紋,去掉了多餘空格、和文本字符、轉換成小寫,使用--filter能夠用來進行過濾

at byte 289141:查詢語句在日誌文件中的偏移量(byte offset),不必定精確,根據偏移量在日誌文件中查找語句(如tail -c +289141 mysql-slow.201407250000 |head)

pct在整個日誌文件中,執行語句佔用百分比(91%),總計執行了3055次【本文中的數據】

Databases: 庫名

Users: 各個用戶執行的次數(佔比)

Query_time distribution : 查詢時間分佈, 長短體現區間佔比,本例中1s-10s之間查詢數量是10s以上的兩倍。

Tables: 查詢中涉及到的表

 

Explain: 示例

因此能夠經過這裏的耗時來定位究竟是哪一個sql語句耗時較長,從而進一步進行定位,看是否因爲缺乏索引等問題形成的耗時較長。

相關文章
相關標籤/搜索