MySQL(188)如何使用MySQL的慢查詢工具?

使用MySQL的慢查詢工具可以幫助開發者識別和優化性能不佳的SQL查詢。以下是詳細深入的步驟和代碼示例,幫助你使用MySQL的慢查詢工具來進行查詢分析和優化。

一、啟用慢查詢日志

首先,你需要確保MySQL的慢查詢日志功能是啟用的。慢查詢日志記錄了所有執行時間超過指定閾值的SQL查詢。

1.1 編輯MySQL配置文件

編輯my.cnf(Linux)或my.ini(Windows)配置文件,添加或修改以下配置:

[mysqld]
slow_query_log = 1  # 啟用慢查詢日志
slow_query_log_file = /var/log/mysql/mysql-slow.log  # 指定慢查詢日志文件的位置
long_query_time = 1  # 設置慢查詢的閾值,單位是秒
log_queries_not_using_indexes = 1  # 記錄未使用索引的查詢(可選)
1.2 重啟MySQL服務

應用配置更改后,重啟MySQL服務:

sudo systemctl restart mysql  # 對于systemd系統
# 或者
sudo service mysql restart  # 對于init.d系統

二、配置動態參數(可選)

如果無法修改配置文件或者不想重啟MySQL服務,也可以動態設置這些參數:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = 1;

三、分析慢查詢日志

啟用慢查詢日志后,MySQL會記錄執行時間超過long_query_time閾值的查詢。你可以使用mysqldumpslow工具或pt-query-digest工具來分析這些日志。

3.1 使用mysqldumpslow工具

mysqldumpslow是MySQL自帶的工具,用于分析慢查詢日志。

mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log

命令說明:

  • -s:排序方式(t:按照查詢時間排序,c:按照次數排序,l:按照鎖時間排序,r:按照返回記錄數排序)。
  • -t:顯示前N條記錄。
  • /var/log/mysql/mysql-slow.log:慢查詢日志文件的位置。

示例輸出:

Reading mysql slow query log from /var/log/mysql/mysql-slow.log
Count: 3  Time=5.00s (15s)  Lock=0.00s (0s)  Rows=10.0 (30), root[root]@localhostSELECT * FROM orders WHERE customer_id = '12345'Count: 2  Time=2.50s (5s)  Lock=0.00s (0s)  Rows=100 (200), root[root]@localhostSELECT * FROM products WHERE price > 1000
3.2 使用pt-query-digest工具

pt-query-digest是Percona Toolkit中提供的強大工具,用于分析慢查詢日志。

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

示例輸出(部分):

# Overall: 80 total, 10 unique, 0.01 QPS, 0.01x concurrency _______________
# Time range: 2021-10-01 10:00:00 to 2021-10-01 11:00:00
# Attribute    total   min     max     avg     95%  stddev  median
# ============ ======= ======= ======= ======= ======= ======= =======
# Count          80
# Exec time     30s     50ms    2s      375ms   1s    450ms   300ms
# Lock time     1s      0ms     50ms    12ms    25ms  10ms    15ms
# Rows sent     800     1       100     10      50    20      5
# Rows examine  8000    10      500     100     400   150     75

四、優化建議

根據慢查詢日志的分析結果,可以采取以下優化措施:

4.1 創建或優化索引

根據分析結果中顯示的頻繁查詢和慢查詢,創建或優化索引。

-- 創建索引
CREATE INDEX idx_customer_id ON orders(customer_id);-- 優化查詢語句
SELECT * FROM orders WHERE customer_id = '12345';
4.2 優化查詢語句

重寫具有高執行時間和高鎖等待時間的查詢,優化查詢邏輯。

優化前:

SELECT * FROM products WHERE price > 1000;

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

ALTER TABLE products ADD INDEX (price);
SELECT * FROM products WHERE price > 1000;
4.3 使用EXPLAIN分析執行計劃

使用EXPLAIN命令進一步分析查詢的執行計劃,找出優化的具體措施。

EXPLAIN SELECT * FROM orders WHERE customer_id = '12345';

示例輸出:

+----+-------------+--------+------------+------+---------------+---------------+---------+-------+------+----------+-------------+
| id | select_type | table  | partitions | type | possible_keys | key           | key_len | ref   | rows | filtered | Extra       |
+----+-------------+--------+------------+------+---------------+---------------+---------+-------+------+----------+-------------+
|  1 | SIMPLE      | orders | NULL       | ref  | idx_customer_id | idx_customer_id | 4       | const |    1 |   100.00 | Using index |
+----+-------------+--------+------------+------+---------------+---------------+---------+-------+------+----------+-------------+
4.4 分區和分表

對于大表,考慮使用分區或分表策略,以提高查詢效率。

-- 創建分區表
CREATE TABLE orders (order_id INT NOT NULL,order_date DATE NOT NULL,customer_id INT NOT NULL,amount DECIMAL(10, 2) NOT NULL
)
PARTITION BY RANGE (YEAR(order_date)) (PARTITION p0 VALUES LESS THAN (2020),PARTITION p1 VALUES LESS THAN (2021),PARTITION p2 VALUES LESS THAN (2022),PARTITION p3 VALUES LESS THAN MAXVALUE
);

五、監控和調整

  1. 監控工具:使用監控工具,如Prometheus、Grafana、Percona Monitoring and Management (PMM)等,實時監控MySQL性能。
  2. 定期檢查:定期檢查慢查詢日志、錯誤日志和性能指標,及時發現問題并優化。
  3. 自動化調優:使用自動化調優工具,如MySQL Tuner、Percona Toolkit等,定期進行自動化調優。
5.1 使用MySQL Tuner

下載并運行MySQL Tuner:

wget http://mysqltuner.pl/ -O mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl

根據MySQL Tuner的建議調整配置:

[mysqld]
innodb_buffer_pool_size = 8G  # 根據建議調整緩沖池大小
query_cache_size = 512M  # 根據建議調整查詢緩存大小

六、總結

通過啟用和分析慢查詢日志,可以深入了解MySQL查詢性能的瓶頸。結合mysqldumpslowpt-query-digest工具的分析結果,可以采取針對性的優化措施,包括創建索引、優化查詢語句、調整配置參數等,從而顯著提升MySQL數據庫的性能和穩定性。通過定期監控和調整,可以確保數據庫在高負載和大數據量情況下持續高效運行。

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

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

相關文章

如何培養自己工程化的能力(python項目)

培養 Python 項目的工程化能力需要系統性訓練,以下從基礎到高階的實踐路徑,結合具體案例和工具鏈,幫助你逐步進階:一、夯實工程化基礎能力?1. 規范代碼與項目結構??項目模板化?使用 cookiecutter生成標準項目結構,…

AI編程插件對比分析:CodeRider、GitHub Copilot及其他

AI編程插件對比分析:CodeRider、GitHub Copilot及其他 隨著人工智能技術的快速發展,AI編程插件已成為提升開發者生產力的重要工具。CodeRider和GitHub Copilot作為市場上的領先者,分別以其獨特的特性和生態系統吸引了大量開發者。本文將從功能特性、性能表現、集成性、用戶…

uniapp/uniappx實現圖片或視頻文件選擇時同步告知權限申請目的解決華為等應用市場上架審核問題

在UNIAPP支持vue和nvue,在UNIAPPX支持uvue,安卓支持在選擇圖片或視頻文件權限申請的時候自動同步告知權限申請目的。輕松解決在華為應用市場審核,要求告知權限申請目的或說明的問題。 UNIAPP相冊圖片視頻選擇器(安卓可以自定義界面樣式)功能介紹&#x…

jupyter notebook如何打開其他盤目錄

問題描述Jupyter Notebook 相信是我們學習 Python 避不開的一個工具。當我們使用 pip install notebook 安裝 Notebook 之后,使用命令 jupyter notebook 啟動服務,啟動之后默認會在瀏覽器打開界面。我們會發現,這個界面默認在 C 盤下&#xf…

C語言深度剖析

一、關鍵字 1.1 最快的關鍵字-register register 這個關鍵字請求編譯器盡可能將變量存在CPU內部寄存器中,而不是通過內存尋址以提高效率。 注意是:盡可能、而不是絕對 1.1.1 皇帝身邊的小太監-寄存器 不知道什么是寄存器,那見過太監沒有其實寄存器就是相當于。一個cpu的…

電腦使用“碎片整理”程序的作用

1.解決文件碎片化問題碎片整理的作用:將這些分散的文件片段重新整理、拼接,使其連續存儲在硬盤的某個區域,減少文件的 “碎片化” 程度。2. 提升硬盤讀寫速度機械硬盤的特殊性:機械硬盤依賴磁頭的物理移動來讀取數據,若…

AI 軟件工程開發 AI 算法 架構與業務

AI 軟件工程開發 & AI 算法 & 架構與業務前言1.AI 軟件工程開發1.1. AI Developer Studio (playground級)1.2. Agent & RAG1.3. LangChain & LangGraph1.4. MCP, Model Context Protocol1.5. Ollama1.6. Coze & Dify2.AI 算法2.1. G…

uniapp實現的圓形滾盤組件模板

采用 uniapp 實現的一款圓形滾盤示例組件模板, 支持 vue2、vue3,適配H5、微信小程序(其他小程序未試過,可自行嘗試) 代碼實現簡約易懂,用戶可根據自身需求下載模板,并進行擴展開發可到插件市場下載嘗試&…

無須炮解,打開即是Pro版

聊一聊 文檔或文件轉圖片,這個我有段時間沒有推薦了。 今天發現了一款非常好用的圖像格式轉換編輯軟件。 有需要的小伙伴請及時收藏,防止下次找不到。 軟件介紹 全能圖像格式轉換工具 這是一款全能的圖像轉換軟件,支持幾乎所有的圖像格式…

企業高性能web服務器——Nginx

Nginx介紹 Nginx是一個高性能的HTTP和反向代理服務器,也是一個郵件代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發,官方測試nginx能夠支撐5萬并發鏈接,并且cpu、內存等資源消耗卻非常低,運行非常穩定。所以其特點是占有內存…

MCU控制ADAU1701,用System Workbench for STM32導入工程

作者的話 MCU控制ADAU1701,我有寫一個文檔詳細講步驟,里頭用到了System Workbench for STM32這個軟件,他是基于eclips內核的開發軟件,一般來講,設置好workspce工程就會出來,但是架不住就有設置好工程不出來…

SQL176 每個題目和每份試卷被作答的人數和次數

描述現有試卷作答記錄表exam_record(uid用戶ID, exam_id試卷ID, start_time開始作答時間, submit_time交卷時間, score得分):iduidexam_idstart_timesubmit_timescore1100190012021-09-01 09:01:012021-09-01 09:41:01812100290022021-09-01 …

構建第三方軟件倉庫

1 下載第三方軟件到指定目錄[rootServer_b ~]# mkdir software [rootServer_b software]# wget https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.18_250724_x86_64_01.rpm2 安裝軟件信息采集工具[rootServer_b software]# yum install createrepo -y [rootServer_b softw…

Linux 管道命令及相關命令練習與 Shell 編程、Tomcat 安裝

2.實驗目的掌握 Linux 管道命令及相關命令(cut、sort、wc、uniq、tee、tr、split)的使用方法。學會使用 Shell 編程實現基本的計算器功能。掌握在 CentOS 7 系統中安裝 Tomcat 的方法。實驗內容1. Linux 管道命令及相關命令練習1.1 管道命令定義&#xf…

藍牙基礎:FIFO(First-In-First-Out)緩存區

在藍牙通信中,FIFO(First-In-First-Out,先進先出)緩存區是解決數據傳輸中“速度不匹配”和“時序異步”問題的核心機制,廣泛應用于藍牙芯片內部、協議棧各層級及主從設備交互中。其核心作用是臨時存儲數據,…

國內外主流源代碼平臺與高效開發指南

摘要 本文旨在為您提供一份實用的源代碼獲取與開發指南。我們將首先梳理國內外最主流的源代碼托管平臺,并重點介紹如何利用這些平臺上的開源項目。接著,本文將為您規劃一條針對初學者的“最快最性價比”的開發路徑,從環境配置、項目管理到實…

任務進度狀態同步 萬能版 參考 工廠+策略+觀察者設計模式 +鎖設計 springboot+redission

文章目錄概要效果解釋狀態流轉說明設計AI任務實體類AI任務狀態枚舉AI模型枚舉基礎實體類簡單字典接口工廠策略模式 接口設計AiJobProcessorAiJobProcessorFactory觀察者模式AI任務相關的EventMyEventListenerMyEventPubLisherRedissonConfig定時任務實現ReplicateJobProcessorR…

printf函數格式化輸出攻略

目錄 一、基本用法 二、占位符 基本用法 常用占位符 字符串占位符示例 多占位符示例 注意事項 三、占位符列表 基本數據類型占位符 浮點數占位符 特殊類型占位符 長度修飾符 使用示例 注意事項 四、輸出格式 1、限定寬度 基本用法 左對齊輸出 浮點數寬度限制…

AI小智單片機esps32-s3燒錄教程

1. 下載代碼到本地 代碼地址:https://github.com/78/xiaozhi-esp32 2. vscode安裝環境 安裝一下這個插件 3. esp32-s3通過數據線連接電腦 【圖片】 4. vscode選擇對應配置 如果是用自己的服務還得改下地址 5. 點擊構建 6. 點擊燒錄

socket編程中系統調用send()詳細講解

在 socket 編程中,send() 是用于在已連接的套接字上發送數據的系統調用,主要用于 TCP 協議(也可用于 UDP,但需配合連接操作)。它負責將用戶態的數據傳遞到內核緩沖區,再由內核協議棧(如 TCP/IP&…