首頁  >  文章  >  資料庫  >  實例分析MySQL中pt-query-digest工具的使用記錄

實例分析MySQL中pt-query-digest工具的使用記錄

藏色散人
藏色散人轉載
2022-11-30 17:07:011597瀏覽

這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了一個用於分析mysql慢查詢日誌的工具pt-query-digest,下面一起來看一下,希望對大家有幫助。

一、簡介

pt-query-digest是用來分析mysql慢查詢日誌的工具,它也可以分析來自「SHOW PROCESSLIST」和MySQL的查詢tcpdump中的協定資料。我們可以把分析日誌輸出到指定的檔案中,透過分析日誌檔案做對應的最佳化等操作。

二、下載並且安裝

  • 根據不同的系統安裝,我的系統是centos,所以直接選擇centos安裝,點擊下載
  • 直接使用yum安裝
> wget https://downloads.percona.com/downloads/percona-toolkit/3.4.0/binary/redhat/7/x86_64/percona-toolkit-3.4.0-3.el7.x86_64.rpm
> yum install percona-toolkit-3.4.0-3.el7.x86_64.rpm
  • 或使用原始碼包編譯安裝
> wget https://downloads.percona.com/downloads/percona-toolkit/3.4.0/source/debian/percona-toolkit-3.4.0.tar.gz
> tar -zxvf percona-toolkit-3.4.0.tar.gz
> cd percona-toolkit-3.4.0
> perl Makefile.PL PREFIX=/usr/local/percona-toolkit
> make && make install

三、安裝完成

  • 實例分析MySQL中pt-query-digest工具的使用記錄

四、分析msql的慢查詢日誌

  • pt-query-digest參數可以使用perldoc指令查看
    perldoc /usr/bin/pt-query-digest
  • 分析整個慢日誌檔
    pt-query-digest mysql-slow.log > slow_report.log
  • #分析指定時間的日誌since~until
    pt-query-digest mysql-slow.log --since '2022-10-01 00:00:00' --until '2022-11-05 00:00:00'  > slow_report_date_20221021-202221105.log
    • –since: 表示開始時間
    • –until: 表示結束時間
  • 分析慢日誌,並且儲存分析結果到mysql資料表
    pt-query-digest --user=root --password=123456 --history 
    h=192.168.33.10,D=local_test_db,t=query_review --create-history-table  mysql-slow.log  --since 
    '2022-11-01 00:00:00' --until '2022-11-05 00:00:00'
    • –user: 資料庫使用者名稱
    • –password: 資料庫密碼
    • h: 資料庫host
    • D:資料庫名稱
    • t: 產生的表名

五、結果分析

第一部分: 總的一個分析概況

  • Overall:總共有多少條查詢

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

  • unique:唯一查詢數量,即對查詢條件進行參數化以後,總共有多少個不同的查詢

  • total:所有查詢總計長度

  • #min:所有查詢最小時長

  • ##max:所有查詢最大時長

  • avg:所有查詢平均時長

  • #95%:將所有時長值從小到大排列,位置位於95% 的那個時長數,這個數一般最具有參考價值

  • median:中位數,把所有時長值從小到大排列,位置位於中間那個時長數

  • # A software update is available:
    
    # 23.7s user time, 15.8s system time, 35.67M rss, 249.01M vsz
    说明:
    执行过程中,在用户中所花费的所有时间
    执行过程中,在内核空间中所花费的所有时间
    pt-query-digest 进程所分配的内存大小
    pt-query-digest 进程所分配的虚拟内存大小
    
    # Current date: Mon Nov  7 09:01:23 2022
    说明:当前时间
    # Hostname: localhost.localdomain
    说明:执行pt-query-digest的主机名
    # Files: mysql-slow.log
    说明:被分析的文件名称
    # Overall: 44.78k total, 54 unique, 0.01 QPS, 0.07x concurrency __________
    说明:
    total: 语句总数量
    unique: 唯一语句数量
    QPS: 每秒查询量
    concurrency: 查询的并发
    
    # Time range: 2022-10-01 00:00:03 to 2022-11-04 16:05:24
    说明:执行过程中日志记录的时间范围
    # Attribute          total     min     max     avg     95%  stddev  median
    说明:属性            总计      最小值   最大值  平均值   95%  标准差   中位数
    95%: 把所有时长值从小到大排列,位置位于 95% 的那个时长数,这个数一般最具有参考价值
    median: 中位数,把所有时长值从小到大排列,位置位于中间那个时长数
    
    # ============     ======= ======= ======= ======= ======= ======= =======
    # Exec time        204553s      3s   1540s      5s     10s      8s      3s
    说明:执行时间
    # Lock time             8s       0   107ms   186us    80us     2ms    36us
    说明:锁占用时间
    # Rows sent        238.87M       0   2.88M   5.46k   11.95  68.22k    0.99
    说明:发送到客户端的行数
    # Rows examine      73.56G       0   5.01M   1.68M   3.86M 724.49k   1.32M
    说明:扫描的语句行数
    # Query size         8.18M      30   4.36k  191.46  511.45  224.63   72.65
    说明:查询的字符数
第二部分:分析

  • #Rank:所有語句的排名,預設按查詢時間降序排列,透過–order-by 指定

      –order-by Query_time:sum :按總查詢時間的倒序
    • 排序參數介紹:
      sum       Sum/total attribute value(預設值)
      min       Minimum attribute value (最小值)
      max       Maximum attribute value(最小值)
      cnt       Frequency/count of the query(按出現sql次數)
  • 的ID(去掉多餘空格和文字字符,計算hash 值)

  • Response:總的回應時間

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

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

  • R/Call:平均每次執行的回應時間

  • V/M:回應時間Variance-to-mean 的比率

  • Item :查詢物件

  • # Profile
    说明:分析
    # Rank Query ID                            Response time    Calls R/Call  
    # ==== =================================== ================ ===== ======= 
    #    1 0xC000AA97F210B2AEAE4933AF9B00296A  104236.2061 5... 30988  3.3638  0.03 SELECT xxx
    #    2 0x974C6E6D54DB8B0DF505CA7BDC508686  32167.9607 15.7%  3418  9.4113  1.34 SELECT xxx 
    #    3 0x6BE180C5804B585F25BB16550447DC6C  18453.0185  9.0%  2499  7.3842  0.92 SELECT xxx
    #    4 0xADF16E3E9EB5D6B08245E39FF1428C9F  17873.4338  8.7%  3114  5.7397  0.84 SELECT xxx 
    #    5 0x2964CD629A24595719659BDAEBCF0E6F  10648.5404  5.2%  1437  7.4103  0.93 SELECT xxx
    #    6 0x50566E6DCF8FA562B88AE41AB1E32DC6   7424.3855  3.6%   303 24.5029 15.41 SELECT xxx
    #    7 0xDB0A3D60F85C2212C476B144E1678AB8   5327.8370  2.6%  1627  3.2746  0.05 SELECT xxx
    #    8 0x04BB0B332CEED517298AB06DE2A30AD6   3190.6822  1.6%   657  4.8564  1.36 SELECT xxx    
    #   10 0xDAB0AF524151C621DC0E9B92AC002C38    526.6288  0.3%   140  3.7616  0.01 SELECT xxx 
    # MISC 0xMISC                               1807.1067  0.9%    57 31.7036   0.0 <27 ITEMS>
第三部分:具體的sql統計與分析

  • pct:該sql 語句某執行屬性佔所有慢查詢語句某執行屬性的百分比

  • total:該sql 語句某執行屬性的所有屬性時間。

  • Count:sql 語句執行的次數。對應的 pct 表示此 sql 語句執行次數佔所有慢查詢語句執行次數的 % 比(下圖為 69%),對應的 total 表示總共執行了 30988 次。

  • Exec time:sql 執行時間

  • #Lock time:sql 執行期間被鎖定的時間

  • Rows sent:傳輸的有效數據,在select 查詢語句中才有值

  • #Rows examine:總共查詢的數據,非目標數據。

  • Query_time distribution:查詢時間分佈

  • #SQL 語句:下圖中為select sleep(7)\G

  • #
    # Query 1: 0.01 QPS, 0.03x concurrency, ID 0xC000AA97F210B2AEAE4933AF9B00296A at byte 221452362
    说明:查询队列1:每秒查询量,查询的并发,队列1的ID值,对应第二部分的Query ID, 221452362表示偏移量(查看方法看下面的“查看偏移”)
    # This item is included in the report because it matches --limit.
    # Scores: V/M = 0.03
    # Time range: 2022-10-01 00:00:05 to 2022-11-04 16:05:24
    说明:sql语句在慢日志文件mysql_slow.log出现的时间范围
    # Attribute    pct   total     min     max     avg     95%  stddev  median
    说明:属性      占整个 总数      最小值  最大值   平均值  95%   标准差  中间值
               分析中
               的百分
               比                
    # ============ === ======= ======= ======= ======= ======= ======= =======
    # Count         69   30988
    说明:执行语句总数量
    # Exec time     50 104236s      3s      7s      3s      4s   303ms      3s
    说明:执行时间
    # Lock time     24      2s    22us    93ms    65us    66us   775us    38us
    说明:锁占用时间
    # Rows sent      0  70.53k       0     799    2.33    3.89   16.60    0.99
    说明:发送到客户端的行数
    # Rows examine  54  40.28G   1.32M   1.35M   1.33M   1.32M  15.65k   1.32M
    说明:扫描语句的行数
    # Query size    26   2.16M      73      73      73      73       0      73
    说明:查询的字符数
    # String:
    # Hosts        localhost
    说明:使用的数据主机IP
    # Users        xxx
    说明:使用的用户
    # Query_time distribution
    #   1us
    #  10us
    # 100us
    #   1ms
    #  10ms
    # 100ms
    #    1s  ################################################################
    #  10s+
    说明:查询时间分布
    # Tables
    #    SHOW TABLE STATUS LIKE &#39;xxx&#39;\G
    #    SHOW CREATE TABLE `xxx`\G
    # EXPLAIN /*!50100 PARTITIONS*/
    select * from `table_name` where `updated_at` >= &#39;2022-10-15 00:00:40&#39;\G
    说明:查询的mysql语句
    第三部分是每一种查询比较慢的 sql 的详细统计结果
    pct:该 sql 语句某执行属性占所有慢查询语句某执行属性的百分比
    total:该 sql 语句某执行属性的所有属性时间。
    Count:sql 语句执行的次数。
    Exec time:sql 执行时间
    Lock time:sql 执行期间被

六查看偏移

    可以利用偏移量在慢查詢日誌檔中到查找到具體的SQL 語句,查找方法如下:
  • [localhost]# tail -c +221452362 ./mysql-slow.log | head
    t: root[root] @ localhost []  Id: 13704150
    # Query_time: 7.058835  Lock_time: 0.000040 Rows_sent: 2  Rows_examined: 1392521
    SET timestamp=1665763267;
    select * from `xxxxxx` where `updated_at` >= &#39;2022-10-15 00:00:40&#39;;
    # User@Host: root[localhost] @ localhost []  Id: 13704174
    # Query_time: 7.445741  Lock_time: 0.000015 Rows_sent: 3  Rows_examined: 2214002
    SET timestamp=1665763267;
    select xxx from table where xxx
    # Time: 221015 008
    # User@Host: root[localhost] @ localhost []  Id: 13704414

以上是實例分析MySQL中pt-query-digest工具的使用記錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除