MySQL(187)如何使用pt-query-digest進行查詢分析?

使用 pt-query-digest 工具可以幫助分析 MySQL 查詢的性能,找出慢查詢、頻繁查詢以及消耗資源較多的查詢,從而為優化提供依據。以下是詳細深入的使用 pt-query-digest 進行查詢分析的步驟和相關示例。

一、安裝 pt-query-digest

pt-query-digest 是 Percona Toolkit 中的一個工具。可以通過以下方式安裝:

1.1 使用包管理器安裝

在 Debian/Ubuntu 系統上:

sudo apt-get update
sudo apt-get install percona-toolkit

在 CentOS/RHEL 系統上:

sudo yum install percona-toolkit
1.2 使用源代碼安裝

從 Percona Toolkit 官網下載并安裝:

wget https://www.percona.com/downloads/percona-toolkit/3.0.13/source/tarball/percona-toolkit-3.0.13.tar.gz
tar -zxvf percona-toolkit-3.0.13.tar.gz
cd percona-toolkit-3.0.13
perl Makefile.PL
make
sudo make install

二、收集查詢日志

pt-query-digest 可以分析多種格式的日志文件,常見的是 MySQL 的慢查詢日志和通用查詢日志。

2.1 啟用慢查詢日志

編輯 MySQL 配置文件 (my.cnfmy.ini):

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1  # 設置記錄慢查詢的閾值,單位為秒

重啟 MySQL 服務以應用配置:

sudo systemctl restart mysql
2.2 啟用通用查詢日志(可選)

啟用通用查詢日志會記錄所有查詢,通常用于調試,不建議在生產環境長期啟用:

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql-general.log

重啟 MySQL 服務以應用配置:

sudo systemctl restart mysql

三、使用 pt-query-digest 分析查詢日志

3.1 分析慢查詢日志

使用 pt-query-digest 分析慢查詢日志:

pt-query-digest /var/log/mysql/mysql-slow.log > slow_query_report.txt

輸出示例(部分):

# 220ms user time, 10ms system time, 26.56M rss, 115.73M vsz
# Current date: Tue May 18 10:12:34 2021
# Hostname: myserver
# Files: /var/log/mysql/mysql-slow.log
# Overall: 100 total, 20 unique, 0 QPS, 0x concurrency _______________
# Time range: 2021-05-17 10:00:00 to 2021-05-17 10:05:00
# Attribute    total   min     max     avg     95%  stddev  median
# ============ ======= ======= ======= ======= ======= ======= =======
# Count          100
# Exec time     22s     50ms    1s      220ms   900ms  300ms   180ms
# Lock time      1s      0ms     20ms    10ms    15ms   5ms     8ms
# Rows sent      1000    1       100     10      50     20      5
# Rows examine   10000   10      500     100     400    150     75
3.2 分析通用查詢日志

使用 pt-query-digest 分析通用查詢日志:

pt-query-digest /var/log/mysql/mysql-general.log > general_query_report.txt

四、分析結果

pt-query-digest 輸出的報告通常分為幾個部分:

  1. Overall Summary:總結了日志文件中的總體情況,包括總查詢數、獨特查詢數、平均執行時間等。
  2. Top 10 Queries:列出了資源消耗最大的前10個查詢,按總執行時間排序。
  3. Detailed Query Information:詳細列出了每個查詢的執行情況,包括執行次數、總時間、平均時間、最大時間、鎖時間等。
4.1 Overall Summary 示例
# Overall: 100 total, 20 unique, 0 QPS, 0x concurrency _______________
# Time range: 2021-05-17 10:00:00 to 2021-05-17 10:05:00
# Attribute    total   min     max     avg     95%  stddev  median
# ============ ======= ======= ======= ======= ======= ======= =======
# Count          100
# Exec time     22s     50ms    1s      220ms   900ms  300ms   180ms
# Lock time      1s      0ms     20ms    10ms    15ms   5ms     8ms
# Rows sent      1000    1       100     10      50     20      5
# Rows examine   10000   10      500     100     400    150     75
4.2 Top 10 Queries 示例
# Query 1: 0.25 QPS, 0.05x concurrency, ID 0x123456789ABCDEF
# Query_time: min=0.100s max=0.500s avg=0.300s 95%_interval=0.200s
# Lock_time: min=0.001s max=0.005s avg=0.003s 95%_interval=0.004s
# Rows_sent: min=10 max=100 avg=50 95%_interval=80
# Rows_examined: min=100 max=500 avg=300 95%_interval=400
SELECT * FROM orders WHERE customer_id = ?;

五、優化建議

根據 pt-query-digest 的分析結果,可以采取以下優化措施:

  1. 創建或優化索引:根據分析結果中顯示的頻繁查詢和慢查詢,創建或優化索引。
  2. 優化查詢語句:重寫具有高執行時間和高鎖等待時間的查詢,優化查詢邏輯。
  3. 調整配置參數:根據查詢的執行情況,調整MySQL的配置參數,如緩沖池大小、查詢緩存、連接數等。
  4. 分區和分表:對于大表,考慮使用分區或分表策略,以提高查詢效率。
  5. 使用EXPLAIN分析執行計劃:使用 EXPLAIN 命令進一步分析查詢的執行計劃,找出優化的具體措施。
5.1 創建索引示例
CREATE INDEX idx_customer_id ON orders(customer_id);
5.2 優化查詢語句示例

優化前:

SELECT * FROM orders WHERE customer_id = ?;

優化后(假設創建了索引):

SELECT * FROM orders USE INDEX (idx_customer_id) WHERE customer_id = ?;
5.3 使用EXPLAIN分析執行計劃
EXPLAIN SELECT * FROM orders WHERE customer_id = ?;

六、總結

通過使用 pt-query-digest 工具,可以深入分析 MySQL 查詢的性能瓶頸,找出慢查詢、頻繁查詢和資源消耗大的查詢。通過分析報告,可以采取針對性的優化措施,包括創建索引、優化查詢語句、調整配置參數等,從而顯著提升 MySQL 數據庫的性能和穩定性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918371.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分享一個基于Python和Hadoop的的電信客戶特征可視化分析平臺 基于Spark平臺的電信客服數據存儲與處理系統源碼

💕💕作者:計算機源碼社 💕💕個人簡介:本人八年開發經驗,擅長Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬蟲、大數據、機器學習等,大家有這一塊的問題…

初識STL

一 、STL的誕生在C發展早期,程序員在不同的項目中需要反復編寫相似的數據結構和算法。重復開發帶來以下問題:代碼冗余:每個項目都要重新實現基本數據結構和算法維護困難:不同人編寫的代碼風格不一致,難以維護效率低下&…

DDoS 防護的未來趨勢:AI 如何重塑安全行業?

隨著網絡攻擊規模和復雜性的不斷升級,分布式拒絕服務(DDoS)攻擊已成為企業數字化轉型中的一大威脅。傳統防御手段在應對智能化、動態化的攻擊時逐漸顯露出局限性。而人工智能(AI)技術的崛起,正為 DDoS 防護…

【每天一個知識點】深度領域對抗神經網絡

Deep Domain Adversarial Neural Network(深度領域對抗神經網絡,DDANN) 是一類結合 深度學習 與 領域自適應(domain adaptation) 思想的神經網絡結構,主要用于不同數據域之間的知識遷移,尤其是在…

【C語言】深入理解預處理

文章目錄一、預定義符號二、#define定義常量:便捷的符號替換常見用法示例:注意事項:三、#define定義宏:帶參數的文本替換關鍵注意點:四、帶有副作用的宏參數五、宏替換的規則:預處理的執行步驟重要注意&…

展銳平臺(Android15)WLAN熱點名稱修改不生效問題分析

前言 在展銳Android V項目開發中,需要修改softAp/P2P熱點名稱時,發現集成GMS后直接修改framework層代碼無效。具體表現為: 修改packages/modules/Wifi/WifiApConfigStore中的getDefaultApConfiguration方法編譯燒錄后修改不生效 問題根源在…

wsl ubuntu訪問(掛載)vmware vmdk磁盤教程

之前使用VMware Workstation 虛擬機跑了個ubuntu,現在改用wsl了, 想把vmware的磁盤掛載到wsl ubuntu。一、磁盤合并我原先的vmware跑的ubuntu存在多個vmdk文件(磁盤文件),需要先將磁盤合并成一個才方便掛載。首先你電腦…

UGUI源碼剖析(3):布局的“原子”——RectTransform的核心數據模型與幾何學

UGUI源碼剖析(第三章):布局的“原子”——RectTransform的核心數據模型與幾何學 在前幾章中,我們了解了UGUI的組件規范和更新調度機制。現在,我們將深入到這個系統的“幾何學”核心,去剖析那個我們每天都在…

c++注意點(15)----設計模式(橋接模式與適配器模式)

一、結構型設計模式兩者有點相似,都是為了做到解耦的功能。適配器模式是一種結構型設計模式, 它能使接口不兼容的對象能夠相互合作。橋接模式是一種結構型設計模式, 可將一個大類或一系列緊密相關的類拆分為抽象和實現兩個獨立的層次結構&…

DuoPlus支持導入文件批量配置云手機參數,還優化了批量操作和搜索功能!

作為我常用的一款還不錯的跨境工具,DuoPlus云手機幫我高效完成了很多跨境工作,它的功能也在逐步完善和優化,今天來聊聊它最近新更新的一些功能。功能更新一覽新增導入文件配置參數:批量初始化代理、批量修改參數支持導入文件一鍵配…

PLC如何實現通過MQTT協議物聯網網關接入管理云平臺

在工業4.0與智能制造浪潮下,企業亟需實現設備數據的高效采集與云端協同,以支撐遠程監控、預測性維護等場景。工業智能網關憑借其強大的協議解析能力、邊緣計算功能及安全傳輸機制,成為PLC接入云平臺的核心解決方案。本文將從技術架構、功能模…

通過sealos工具在ubuntu 24.02上安裝k8s集群

一、系統準備(1)安裝openssh服務 sudo apt install openssh-server sudo systemctl start ssh sudo systemctl enable ssh(2)放通防火墻 sudo ufw allow ssh(3)開通root直接登錄 vim /etc/ssh/sshd_config#…

nginx+Lua環境集成、nginx+Lua應用

nginxluaredis實踐 概述 nginx、lua訪問redis的三種方式: 1。 HttpRedis模塊。 指令少,功能單一 ,適合簡單的緩存。只支持get 、select命令。 2。 HttpRedis2Module模塊。 功能強大,比較靈活。 3。 lua-resty-redis庫 OpenResty。…

機器學習 K-Means聚類 無監督學習

目錄 K-Means 聚類:從原理到實踐的完整指南 什么是 K-Means 聚類? 應用場景舉例 K-Means 算法的核心原理 K-Means 算法的步驟詳解 可視化理解 K-Means 的優缺點分析 優點 缺點 如何選擇合適的 K 值? 1. 肘部法(Elbow Me…

RabbitMQ面試精講 Day 16:生產者優化策略與實踐

【RabbitMQ面試精講 Day 16】生產者優化策略與實踐 開篇 歡迎來到"RabbitMQ面試精講"系列第16天,今天我們聚焦RabbitMQ生產者優化策略與實踐。在消息隊列系統中,生產者的性能表現直接影響整個系統的吞吐量和可靠性。掌握生產者優化技巧不僅能…

Android 系統的安全 和 三星安全的區別

維度Android(AOSP 通用)Samsung(Knox 強化)本質差異一句話信任根標準 Verified Boot(公鑰由谷歌或 OEM 托管)額外在 自家 SoC 里燒錄 Knox 密鑰 熔絲位,一旦解鎖即觸發 Knox 0x1 熔斷&#xff…

開源大模型實戰:GPT-OSS本地部署與全面測評

文章目錄一、引言二、安裝Ollama三、Linux部署GPT-OSS-20B模型四、模型測試4.1 AI幻覺檢測題題目1:虛假歷史事件題目2:不存在的科學概念題目3:虛構的地理信息題目4:錯誤的數學常識題目5:虛假的生物學事實4.2 算法題測試…

【無標題】命名管道(Named Pipe)是一種在操作系統中用于**進程間通信(IPC)** 的機制

命名管道(Named Pipe)是一種在操作系統中用于進程間通信(IPC) 的機制,它允許不相關的進程(甚至不同用戶的進程)通過一個可見的文件系統路徑進行數據交換。與匿名管道(僅存在于內存&a…

Baumer相機如何通過YoloV8深度學習模型實現危險區域人員的實時檢測識別(C#代碼UI界面版)

《------往期經典推薦------》 AI應用軟件開發實戰專欄【鏈接】 序號 項目名稱 項目名稱 1 1.工業相機 + YOLOv8 實現人物檢測識別:(C#代碼,UI界面版) 2.工業相機 + YOLOv8 實現PCB的缺陷檢測:(C#代碼,UI界面版) 2 3.工業相機 + YOLOv8 實現動物分類識別:(C#代碼,U…

本文章分享一個本地錄音和實時傳輸錄音給app的功能(杰理)

我用的是杰理手表sdk,該功能學會就可自行在任何杰里sdk上做,庫函數大致一樣,學會運用這個方向就好。1.我們要驗證這個喇叭和麥是否正常最簡單的的辦法,就是直接萬用表測試,直接接正負極,看看是否通路&#…