使用pt-query-digest,找到不是很合適的sql

来源:http://www.cnblogs.com/hfclytze/archive/2016/08/04/pt-query-digest.html
-Advertisement-
Play Games

pt-query-digest查找不太適合的sql語句,判斷是否是最有的索引策略 ...


 

pt-query-digest

1.  概述

索引可以我們更快速的執行查詢,但是肯定存在不合理的索引,如果想找到那些索引不是很合適的查詢,併在它們成為問題前進行優化,則可以使用pt-query-digest的查詢審查“review”功能,分析其EXPLAIN出來的執行計劃。

pt-query-digest是用於分析mysql慢查詢的一個工具,它可以分析binlog、General log、slowlog,也可以通過SHOWPROCESSLIST或者通過tcpdump抓取的MySQL協議數據來進行分析。可以把分析結果輸出到文件中,分析過程是先對查詢語句的條件進行參數化,然後對參數化以後的查詢進行分組統計,統計出各查詢的執行時間、次數、占比等,可以藉助分析結果找出問題進行優化。

2.  工具安裝

pt-query-digest是一個perl腳本,只需下載並賦權即可執行。

[root@test1 ]# wget percona.com/get/pt-query-digest

[root@test1 ]# chmod u+x pt-query-digest

3.  工具執行

3.1  直接分析慢查詢文件

pt-query-digest  slow.log > slow_report.log

3.2  分析最近12小時內的查詢

pt-query-digest  --since=12h  slow.log > slow_report2.log

3.3  分析指定時間範圍內的查詢

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

3.4  分析指含有select語句的慢查詢

pt-query-digest--filter '$event->{fingerprint} =~ m/^select/i' slow.log> slow_report4.log

3.5  針對某個用戶的慢查詢

pt-query-digest--filter '($event->{user} || "") =~ m/^root/i' slow.log> slow_report5.log

3.6  查詢所有所有的全表掃描或full join的慢查詢

pt-query-digest--filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' slow.log> slow_report6.log

3.7  把查詢保存到query_review表

pt-query-digest  --user=root –password=abc123 --review  h=localhost,D=test,t=query_review--create-review-table  slow.log

3.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

3.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

3.10  分析binlog

mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql

pt-query-digest  --type=binlog  mysql-bin000093.sql > slow_report10.log

3.11  分析general log

pt-query-digest  --type=genlog  localhost.log > slow_report11.log

4.  報告分析

4.1  總體統計結果

 

Overall: 總共有多少條查詢,上例為總共109個查詢。

unique: 唯一查詢數量,即對查詢條件進行參數化以後,總共有多少個不同的查詢,該例為8。(去重後的語句)

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

total: 總計 ;min:最小;max: 最大;avg:平均;95%: 把所有值從小到大排列,位置位於95%的那個數,這個數一般最具有參考價值;median: 中位數,把所有值從小到大排列,位置位於中間那個數。

4.2  查詢分組統計結果

 

這部分對查詢進行參數化並分組,然後對各類查詢的執行情況進行分析,結果按總執行時長,從大到小排序。

Response: 總的響應時間。

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

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

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

Item : 查詢對象

4.3  每一種查詢的詳細統計結果

 

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

Databases: 庫名

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

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

Tables: 查詢中涉及到的表

Explain: 示例

5.  語法及重要選項

pt-query-digest [OPTIONS] [FILES] [DSN]

--create-review-table  當使用--review參數把分析結果輸出到表中時,如果沒有表就自動創建。

--create-history-table  當使用--history參數把分析結果輸出到表中時,如果沒有表就自動創建。

--filter  對輸入的慢查詢按指定的字元串進行匹配過濾後再進行分析

--limit  限制輸出結果百分比或數量,預設值是20,即將最慢的20條語句輸出,如果是50%則按總響應時間占比從大到小排序,輸出到總和達到50%位置截止。

--host  mysql伺服器地址

--user  mysql用戶名

--password  mysql用戶密碼

--history  將分析結果保存到表中,分析結果比較詳細,下次再使用--history時,如果存在相同的語句,且查詢所在的時間區間和歷史表中的不同,則會記錄到數據表中,可以通過查詢同一CHECKSUM來比較某類型查詢的歷史變化。

--review  將分析結果保存到表中,這個分析只是對查詢條件進行參數化,一個類型的查詢一條記錄,比較簡單。當下次使用--review時,如果存在相同的語句分析,就不會記錄到數據表中。

--output  分析結果輸出類型,值可以是report(標準分析報告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便於閱讀。

--since  從什麼時間開始分析,值為字元串,可以是指定的某個”yyyy-mm-dd [hh:mm:ss]”格式的時間點,也可以是簡單的一個時間值:s(秒)、h(小時)、m(分鐘)、d(天),如12h就表示從12小時前開始統計。

--until  截止時間,配合--since可以分析一段時間內的慢查詢。

6.  備註

開啟mysql慢查詢,打開配置文件(一般在該路徑下vim /etc/my.cnf),增加以下配置,修改完成後重啟mysql服務

//慢查詢

log-output=FILE

slow_query_log=1

slow_query_log_file=/data/dbdata/slow_query.log

long-query-time=1

log-queries-not-using-indexes

7.  參考文檔

http://blog.csdn.net/seteor/article/details/24017913


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹 主要為了測試percona的線程池的性能,這裡就簡單介紹一下percona5.7的安裝,在percona官方手冊上面介紹的很簡單按照上面的方法安裝不會成功。 db:percona5.7.13 os:centos6.7 安裝準備 1.創建用戶 groupadd mysql useradd -r ...
  • 1、部署基本信息說明: 1.1、主機信息 操作系統:選擇CentOS6.7 x86-64版本 MEM:64GB,CPU: E5-2630 v3 @ 2.40GHz, DISK:2TB*4(數據節點存儲,操作系統除外) 主機信息: 主機名 IP dcnn1 10.20.20.1 dcnn2 10.20 ...
  • 當你第一眼看到explain和hint的時候,第一個反應就是mysql中所謂的這兩個關鍵詞,確實可以看出,這個就是在mysql中借鑒過來的,既然是借鑒 過來的,我想大家都知道這兩個關鍵字的用處,話不多說,速速觀看~~~ 一:explain演示 1. 構建數據 為了方便演示,我需要create ten ...
  • db.getCollection('WorkflowInstance').find({'CurrentApproverList':{$ne:null}}) ...
  • 原因:由於clob類型欄位不能使用group by函數,而union中需要使用group by過濾掉重覆紀錄; 解決方法:union可以改為union all。 ...
  • 無法解決 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之間 2011-03-11 15:26:57 分類: 資料庫開發技術 2011年03月10日 CCE3.03的伺服器採用英文的2003R2 資料庫排序規則為拉... ...
  • 一.數據控制語句 (DML) 部分 1.INSERT (往數據表裡插入記錄的語句) INSERT INTO 表名(欄位名1, 欄位名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(欄位名1, 欄位名2, ……) SELECT (欄位名1, 欄位名2, ……) ...
  • 簡介: Percona Server 由領先的 MySQL 咨詢公司 Percona 發佈。Percona Server 是一款獨立的資料庫產品,其完全與 MySQL 相容,可以在不更改代碼的情況下將存儲引擎更換為 XtraDB 。 Percona 資料庫中使用的存儲引擎為 XtraDB,它是 My ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...