最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶大家深入了解下MySQL中的慢查詢?nèi)罩?/h1>
 更新時(shí)間:2026年01月03日 09:24:59   作者:程序員小假  
慢查詢?nèi)罩荆⊿low Query Log) 是 MySQL 內(nèi)置的一種日志功能,用于記錄執(zhí)行時(shí)間超過指定閾值的 SQL 語(yǔ)句,下面小編就和大家簡(jiǎn)單聊聊慢查詢?nèi)罩镜南嚓P(guān)配置和應(yīng)用吧

一、什么是慢查詢?nèi)罩?/h2>

慢查詢?nèi)罩荆⊿low Query Log) 是 MySQL 內(nèi)置的一種日志功能,用于記錄執(zhí)行時(shí)間超過指定閾值的 SQL 語(yǔ)句。這是優(yōu)化數(shù)據(jù)庫(kù)性能的重要工具。

二、核心作用

  • 性能診斷:找出執(zhí)行效率低的 SQL 語(yǔ)句
  • 瓶頸定位:分析查詢?yōu)槭裁绰ㄈ頀呙?、索引缺失等?/li>
  • 優(yōu)化依據(jù):為 SQL 優(yōu)化和索引調(diào)整提供數(shù)據(jù)支持

三、配置參數(shù)詳解

-- 查看所有慢查詢相關(guān)參數(shù)
SHOW VARIABLES LIKE '%slow%';
SHOW VARIABLES LIKE '%long_query_time%';

-- 主要配置參數(shù):
-- slow_query_log = OFF/ON          # 是否開啟慢查詢?nèi)罩?
-- slow_query_log_file = /path/name # 日志文件路徑
-- long_query_time = 10             # 閾值(秒),默認(rèn)10秒
-- min_examined_row_limit = 0       # 最少檢查行數(shù)閾值
-- log_queries_not_using_indexes = OFF # 是否記錄未使用索引的查詢
-- log_slow_admin_statements = OFF  # 是否記錄管理語(yǔ)句
-- log_output = FILE/TABLE/NONE     # 輸出方式

四、開啟和配置

1. 臨時(shí)開啟(重啟失效)

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;      -- 設(shè)為2秒
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL log_queries_not_using_indexes = 'ON';

2. 永久開啟(修改配置文件)

# my.cnf 或 my.ini
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
log_output = FILE

五、慢查詢?nèi)罩靖袷椒治?/h2>

典型日志條目

# Time: 2024-01-01T10:00:00.123456Z
# User@Host: root[root] @ localhost []  Id:     5
# Query_time: 5.123456  Lock_time: 0.001000  Rows_sent: 10  Rows_examined: 1000000
SET timestamp=1672560000;
SELECT * FROM users WHERE last_name LIKE '%smith%' ORDER BY create_time DESC;

關(guān)鍵字段解釋

  • Query_time:查詢執(zhí)行總時(shí)間
  • Lock_time:鎖定時(shí)間
  • Rows_sent:返回給客戶端的行數(shù)
  • Rows_examined:掃描的行數(shù)
  • Rows_affected:影響的行數(shù)(UPDATE/DELETE/INSERT)

六、慢查詢分析工具

1.mysqldumpslow(MySQL 自帶)

# 按查詢時(shí)間排序
mysqldumpslow -s t /var/log/mysql/slow.log

# 按鎖時(shí)間排序
mysqldumpslow -s l /var/log/mysql/slow.log

# 按執(zhí)行次數(shù)排序
mysqldumpslow -s c /var/log/mysql/slow.log

# 顯示前10條最慢的查詢
mysqldumpslow -t 10 /var/log/mysql/slow.log

# 分析特定用戶的慢查詢
mysqldumpslow -a -g "root" /var/log/mysql/slow.log

2.pt-query-digest(Percona Toolkit)

# 分析慢查詢?nèi)罩?
pt-query-digest /var/log/mysql/slow.log

# 分析最近12小時(shí)的慢查詢
pt-query-digest --since=12h /var/log/mysql/slow.log

# 輸出到文件
pt-query-digest /var/log/mysql/slow.log > slow_report.txt

3.mysqlslow(第三方工具)

mysqlslow /var/log/mysql/slow.log

七、慢查詢?nèi)罩颈砟J?/h2>

啟用表模式存儲(chǔ)

SET GLOBAL log_output = 'TABLE';
SET GLOBAL slow_query_log = 'ON';

-- 查詢慢查詢?nèi)罩?
SELECT * FROM mysql.slow_log;

表結(jié)構(gòu)

SHOW CREATE TABLE mysql.slow_log;

-- 主要字段:
-- start_time: 查詢開始時(shí)間
-- query_time: 查詢耗時(shí)
-- lock_time: 鎖定時(shí)間
-- rows_sent: 返回行數(shù)
-- rows_examined: 檢查行數(shù)
-- sql_text: SQL語(yǔ)句
-- user_host: 用戶和主機(jī)信息

八、最佳實(shí)踐和優(yōu)化建議

1.閾值設(shè)置建議

-- 生產(chǎn)環(huán)境建議
SET GLOBAL long_query_time = 2;    -- 2秒閾值

-- 開發(fā)/測(cè)試環(huán)境可以更嚴(yán)格
SET GLOBAL long_query_time = 0.5;  -- 500毫秒

-- 微秒級(jí)精度(MySQL 5.7+)
SET GLOBAL long_query_time = 0.1;  -- 100毫秒

2.日志輪轉(zhuǎn)配置

# 使用 logrotate
/var/log/mysql/slow.log {
    daily
    rotate 30
    missingok
    compress
    delaycompress
    notifempty
    create 640 mysql mysql
    postrotate
        mysqladmin flush-logs
    endscript
}

3.定期分析計(jì)劃

# 每日分析腳本示例
#!/bin/bash
DATE=$(date +%Y%m%d)
pt-query-digest /var/log/mysql/slow.log > /var/log/mysql/slow_report_${DATE}.txt
# 清空日志文件(先備份)
cp /var/log/mysql/slow.log /var/log/mysql/slow.log.${DATE}
echo "" > /var/log/mysql/slow.log

九、性能監(jiān)控和告警

1. 監(jiān)控慢查詢數(shù)量

-- 監(jiān)控每分鐘的慢查詢數(shù)量
SHOW GLOBAL STATUS LIKE 'Slow_queries';

-- 查看當(dāng)前慢查詢
SHOW PROCESSLIST;

2. 慢查詢告警腳本

#!/bin/bash
SLOW_COUNT=$(mysql -e "SHOW GLOBAL STATUS LIKE 'Slow_queries'" | grep Slow_queries | awk '{print $2}')
THRESHOLD=100

if [ $SLOW_COUNT -gt $THRESHOLD ]; then
    echo "警告:慢查詢數(shù)量異常!當(dāng)前數(shù)量: $SLOW_COUNT" | mail -s "MySQL慢查詢告警" admin@example.com
fi

十、注意事項(xiàng)

性能影響:開啟慢查詢?nèi)罩緯?huì)有約1-3%的性能開銷

磁盤空間:定期清理,避免日志文件過大

敏感信息:日志可能包含敏感數(shù)據(jù),需妥善保管

生產(chǎn)環(huán)境:建議設(shè)置合理的閾值,避免記錄過多無(wú)關(guān)查詢

版本差異:MySQL 5.7+ 支持微秒級(jí)精度,之前版本只到秒

面試回答

簡(jiǎn)單來說,慢查詢?nèi)罩揪拖袷?MySQL 的一個(gè)‘病歷本’。它會(huì)自動(dòng)記錄下來所有執(zhí)行時(shí)間超過某個(gè)閾值的 SQL 語(yǔ)句。這樣我們開發(fā)或者 DBA 就能知道,哪些查詢是‘慢’的、有問題的,然后去針對(duì)性地優(yōu)化。

在實(shí)際工作中,我主要會(huì)關(guān)注和操作這么幾個(gè)方面:

第一,怎么開啟和設(shè)置。

慢查詢?nèi)罩灸J(rèn)是關(guān)閉的,因?yàn)樗鼤?huì)有一點(diǎn)磁盤 I/O 的開銷。我們需要在 MySQL 配置文件(比如 my.cnf)里設(shè)置幾個(gè)核心參數(shù):

  • slow_query_log = ON:打開開關(guān)。
  • slow_query_log_file:指定這個(gè)‘病歷本’文件存哪里。
  • long_query_time:這是最重要的一個(gè)閾值,單位是秒。比如設(shè)為 1,就意味著執(zhí)行超過 1 秒的 SQL 才會(huì)被記錄。這個(gè)值可以根據(jù)系統(tǒng)性能要求來調(diào)整。
  • log_queries_not_using_indexes:這個(gè)我也經(jīng)常會(huì)打開。它會(huì)記錄那些沒有使用索引的查詢,即使它執(zhí)行得很快。這能幫我們發(fā)現(xiàn)潛在的設(shè)計(jì)問題。

第二,怎么看這個(gè)日志。

日志是文本格式,可以直接看,但不太直觀。我常用的方法是:

  • 用 MySQL 自帶的 mysqldumpslow 工具。這個(gè)命令行工具可以對(duì)日志進(jìn)行匯總、排序,比如我們可以用 mysqldumpslow -t 10 -s t 來找出耗時(shí)最長(zhǎng)的前 10 條 SQL,一目了然。
  • 對(duì)于更復(fù)雜的分析,我會(huì)用 Percona 公司開的 ****pt-query-digest 工具。它功能更強(qiáng)大,能給出非常詳細(xì)的報(bào)告,比如每個(gè) SQL 的響應(yīng)時(shí)間占比、執(zhí)行次數(shù)、鎖時(shí)間等,能幫我快速定位最需要優(yōu)化的‘瓶頸’ SQL。

第三,也是最重要的,找到慢 SQL 后怎么辦。

光找到?jīng)]用,關(guān)鍵是要優(yōu)化。我一般的排查思路是:

1、拿到這條慢 SQL,先 explain 命令去看它的執(zhí)行計(jì)劃。這是標(biāo)準(zhǔn)動(dòng)作。我會(huì)重點(diǎn)看:

  • 有沒有用到索引(key 字段)。
  • 掃描了多少行(rows 字段)。
  • 查詢類型是不是全表掃描(type 字段,如果是 ALL 就不好了)。

2、根據(jù) ****explain ****的結(jié)果,常見的優(yōu)化手段就是:

  • 加索引:這是最有效的辦法之一,檢查 WHEREORDER BY、JOIN 的字段。
  • 優(yōu)化 SQL 本身:比如避免 SELECT *,檢查是否有復(fù)雜的子查詢能不能改寫為 JOIN,或者分頁(yè)查詢?cè)诖笃屏繒r(shí)有沒有優(yōu)化空間。
  • 看看是不是數(shù)據(jù)庫(kù)參數(shù)問題,比如緩沖池大小是不是不合理。

最后,我的一點(diǎn)實(shí)踐經(jīng)驗(yàn)是:慢查詢?nèi)罩驹跍y(cè)試環(huán)境和生產(chǎn)環(huán)境都很有用。在項(xiàng)目上線前,我們會(huì)開啟它來提前發(fā)現(xiàn)一些性能問題。在生產(chǎn)環(huán)境,我們會(huì)長(zhǎng)期開啟,但會(huì)設(shè)置一個(gè)合理的 long_query_time(比如從 2 秒開始),并定期歸檔和分析日志,把它作為性能監(jiān)控和容量規(guī)劃的一個(gè)重要依據(jù)。

以上就是一文帶大家深入了解下MySQL中的慢查詢?nèi)罩镜脑敿?xì)內(nèi)容,更多關(guān)于MySQL慢查詢?nèi)罩镜馁Y料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Centos5.5中安裝Mysql5.5過程分享

    Centos5.5中安裝Mysql5.5過程分享

    這篇文章主要介紹了Centos5.5中安裝Mysql5.5過程分享,本文使用編譯方法安裝MySQL,并給出了一些可能遇到的錯(cuò)誤和解決方法,需要的朋友可以參考下
    2015-01-01
  • MySQL創(chuàng)建和刪除數(shù)據(jù)庫(kù)的命令及相關(guān)PHP腳本的操作方法

    MySQL創(chuàng)建和刪除數(shù)據(jù)庫(kù)的命令及相關(guān)PHP腳本的操作方法

    這篇文章主要介紹了MySQL創(chuàng)建和刪除數(shù)據(jù)庫(kù)的命令及相關(guān)PHP腳本的操作方法,這里主要講述Linux中在mysqladmin下的命令操作,需要的朋友可以參考下
    2015-11-11
  • MySQL 使用索引掃描進(jìn)行排序

    MySQL 使用索引掃描進(jìn)行排序

    mysql可以使用同一個(gè)索引既滿足排序,又用于查找行,因此,如果可能,設(shè)計(jì)索引時(shí)應(yīng)該盡可能地同時(shí)滿足這兩種任務(wù),這樣是最好的。本文將介紹如何利用索引來進(jìn)行排序
    2021-06-06
  • 盡量避免使用索引合并的場(chǎng)景問題解析

    盡量避免使用索引合并的場(chǎng)景問題解析

    這篇文章主要為大家介紹了盡量避免使用索引合并的場(chǎng)景問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Mysql中的常用調(diào)優(yōu)參數(shù)用法及解讀

    Mysql中的常用調(diào)優(yōu)參數(shù)用法及解讀

    文章介紹了MySQL數(shù)據(jù)庫(kù)的一些關(guān)鍵配置參數(shù),包括InnoDB緩沖池、redolog緩沖區(qū)、日志緩沖區(qū)等,并解釋了這些參數(shù)在數(shù)據(jù)庫(kù)性能和事務(wù)一致性中的作用,文章通過比喻和實(shí)際建議幫助讀者理解這些配置參數(shù)的合理設(shè)置
    2025-12-12
  • 從基礎(chǔ)到高級(jí)應(yīng)用詳解MySQL中的連表更新

    從基礎(chǔ)到高級(jí)應(yīng)用詳解MySQL中的連表更新

    在數(shù)據(jù)庫(kù)操作中,連表更新是一種強(qiáng)大但常被低估的功能,本文將系統(tǒng)講解MySQL連表更新的語(yǔ)法、使用場(chǎng)景、性能優(yōu)化及實(shí)戰(zhàn)案例,幫助讀大家掌握這一高效的數(shù)據(jù)操作技巧
    2026-01-01
  • MySQL索引失效的幾種情況匯總

    MySQL索引失效的幾種情況匯總

    這篇文章主要介紹了MySQL索引失效的幾種情況,幫助大家更好的理解和使用MySQL索引,感興趣的朋友可以了解下
    2020-09-09
  • MySql查詢某個(gè)時(shí)間段內(nèi)的數(shù)據(jù)實(shí)例(前一周、前三個(gè)月、前一年等)

    MySql查詢某個(gè)時(shí)間段內(nèi)的數(shù)據(jù)實(shí)例(前一周、前三個(gè)月、前一年等)

    在實(shí)際工作中需要整理一份時(shí)間在規(guī)定時(shí)間前后的統(tǒng)計(jì)表,下面這篇文章主要給大家介紹了關(guān)于MySql查詢某個(gè)時(shí)間段內(nèi)的數(shù)據(jù)的相關(guān)資料,包括前一周、前三個(gè)月、前一年等,需要的朋友可以參考下
    2022-10-10
  • MySQL中讀寫分離方案對(duì)比分析與選型建議

    MySQL中讀寫分離方案對(duì)比分析與選型建議

    MySQL讀寫分離是提升數(shù)據(jù)庫(kù)可用性和性能的常見手段,本文將圍繞現(xiàn)實(shí)生產(chǎn)環(huán)境中常見的幾種讀寫分離模式進(jìn)行系統(tǒng)對(duì)比,希望對(duì)大家有所幫助
    2025-08-08
  • MySQL系列之十三 MySQL的復(fù)制

    MySQL系列之十三 MySQL的復(fù)制

    這篇文章主要介紹了MySQL系列之十三 MySQL的復(fù)制,詳細(xì)的講述了多種復(fù)制架構(gòu)的案例和MySQL復(fù)制相關(guān)概念等,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

宁远县| 深水埗区| 临西县| 高唐县| 延长县| 天门市| 韩城市| 凉山| 龙江县| 石渠县| 永寿县| 密云县| 黄梅县| 郴州市| 宁乡县| 华容县| 长沙市| 肥西县| 南雄市| 巩义市| 怀远县| 永吉县| 唐山市| 临漳县| 宁安市| 绍兴县| 西乌珠穆沁旗| 大余县| 攀枝花市| 纳雍县| 沁阳市| 广平县| 榕江县| 海宁市| 乌拉特前旗| 宿州市| 康保县| 安岳县| 通化市| 涪陵区| 交城县|