欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql慢查詢mysqldumpslow的使用詳解

 更新時(shí)間:2025年06月10日 09:39:23   作者:YZF_Kevin  
這篇文章主要介紹了mysql慢查詢mysqldumpslow的使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

簡(jiǎn)言

1. mysql中的慢查詢是我們分析問題,定位問題的利器,巧妙使用可以快速解決問題

2. 原理:運(yùn)行時(shí)間超過 long_query_time 的sql語(yǔ)句會(huì)被寫入到慢查詢?nèi)罩疚募谢蛘適ysql.slow_log表中,long_query_time的默認(rèn)值是10s

3. 還可以使用慢日志分析工具 mysqldumpslow 來進(jìn)行分析慢查詢

相關(guān)參數(shù)

slow_query_log    :是否開啟慢查詢?nèi)罩荆?表示開啟,0表示關(guān)閉。

log-slow-queries  :舊版(5.6以下版本)MySQL數(shù)據(jù)庫(kù)慢查詢?nèi)罩敬鎯?chǔ)路徑??梢圆辉O(shè)置該參數(shù),系統(tǒng)則會(huì)默認(rèn)給一個(gè)缺省的文件host_name-slow.log

slow-query-log-file:新版(5.6及以上版本)MySQL數(shù)據(jù)庫(kù)慢查詢?nèi)罩敬鎯?chǔ)路徑??梢圆辉O(shè)置該參數(shù),系統(tǒng)則會(huì)默認(rèn)給一個(gè)缺省的文件host_name-slow.log

long_query_time :慢查詢閾值,當(dāng)查詢時(shí)間多于設(shè)定的該值時(shí),則寫入日志。注意該值修改后再次查詢顯示的還是舊值,要使用 show global variables like 'long_query_time'; 這樣的語(yǔ)句查詢才更新

log_queries_not_using_indexes:未使用索引的查詢也被記錄到慢查詢?nèi)罩局校蛇x項(xiàng))。

log_output:日志存儲(chǔ)方式。log_output='FILE'表示將日志存入文件,默認(rèn)值是'FILE'。log_output='TABLE'表示將日志存入數(shù)據(jù)庫(kù),這樣日志信息就會(huì)被寫入到mysql.slow_log表中。MySQL數(shù)據(jù)庫(kù)支持同時(shí)兩種日志存儲(chǔ)方式,配置的時(shí)候以逗號(hào)隔開即可,如:log_output='FILE,TABLE'。日志記錄到系統(tǒng)的專用日志表中,要比記錄到文件耗費(fèi)更多的系統(tǒng)資源,因此對(duì)于需要啟用慢查詢?nèi)罩荆中枰軌颢@得更高的系統(tǒng)性能,那么建議優(yōu)先記錄到文件

演示步驟

1. 查詢慢查詢是否開啟,慢查詢的閾值,慢查詢?nèi)罩疚募穆窂?/p>

mysql> show global variables like '%query%';
+------------------------------+----------------------------------+
| Variable_name                | Value                            |
+------------------------------+----------------------------------+
| binlog_rows_query_log_events | OFF                              |
| ft_query_expansion_limit     | 20                               |
| have_query_cache             | NO                               |
| long_query_time              | 10.000000                        |
| query_alloc_block_size       | 8192                             |
| query_prealloc_size          | 8192                             |
| slow_query_log               | OFF                              |
| slow_query_log_file          | /var/lib/mysql/kickseed-slow.log |
+------------------------------+----------------------------------+
8 rows in set (0.00 sec)

long_query_time: 10.000000 表慢查詢的閾值是10s,可以精確到0.000001秒,也就是1微秒。關(guān)于運(yùn)行時(shí)間正好等于long_query_time的情況,并不會(huì)被記錄下來。也就是說,在mysql源碼里是判斷大于long_query_time,而非大于等于

slow_query_log:OFF 表慢查詢未開啟

slow_query_log_file:slow_query_log_file 表慢查詢?nèi)罩疚募奈恢?/p>

2. 打開慢查詢開關(guān),修改慢查詢的閾值

mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set global long_query_time=1.0;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like '%query%';
+------------------------------+----------------------------------+
| Variable_name                | Value                            |
+------------------------------+----------------------------------+
| binlog_rows_query_log_events | OFF                              |
| ft_query_expansion_limit     | 20                               |
| have_query_cache             | NO                               |
| long_query_time              | 1.000000                         |
| query_alloc_block_size       | 8192                             |
| query_prealloc_size          | 8192                             |
| slow_query_log               | ON                               |
| slow_query_log_file          | /var/lib/mysql/kickseed-slow.log |
+------------------------------+----------------------------------+
8 rows in set (0.00 sec)

long_query_time: 1.000000 表慢查詢的閾值是1.0秒,運(yùn)行時(shí)間超過1秒的sql語(yǔ)句會(huì)被寫入到慢日志文件

slow_query_log:ON 表慢查詢已開啟

謹(jǐn)記:

1) : 修改long_query_time后再查詢不能使用 “show variables like '%query%';”來進(jìn)行查詢,這樣查詢還是舊的,必須要在前面添加global才能查到最新的 long_query_time 值。當(dāng)然也可以斷開這個(gè)連接,重新連接進(jìn)來再查詢不使用global也行

2) : 而且修改long_query_time后,執(zhí)行sql語(yǔ)句的連接必須斷開后再次連接mysql,設(shè)置的閾值才能起效

3) : 設(shè)置slow_query_log=1開啟了慢查詢后只對(duì)當(dāng)前數(shù)據(jù)庫(kù)生效,如果MySQL重啟后則會(huì)失效。如果要永久生效,就必須修改配置文件my.cnf(其它系統(tǒng)變量也是如此)

3. 測(cè)試慢sql語(yǔ)句,查看慢日志

mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.01 sec)

select sleep(2);表執(zhí)行暫停2秒的sql語(yǔ)句

然后我們打開慢日志文件,也就是slow_query_log_file的值,即/var/lib/mysql/kickseed-slow.log文件,跳轉(zhuǎn)到最后可以看到如下內(nèi)容

# Time: 2021-02-23T11:38:25.222093Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id:    19
# Query_time: 2.000681  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1
SET timestamp=1614080303;
select sleep(2);

Time:Time: 2021-02-23T11:38:25.222093Z 表該條慢sql執(zhí)行的時(shí)間點(diǎn)

User@Host: root[root] @ localhost [127.0.0.1]  Id: 19 表該條慢sql的連接賬號(hào)為root,IP地址為127.0.0.1,Id表連接ID,每次連接該ID加1

Query_time: 2.000681  表執(zhí)行該sql的總時(shí)間為2.000681秒

Lock_time: 0.000000  表鎖表時(shí)間

Rows_sent: 1 表發(fā)送sql結(jié)果的行數(shù),只有1行

Rows_examined: 1 表執(zhí)行該sql語(yǔ)句檢查數(shù)據(jù)庫(kù)的行數(shù)

4. 系統(tǒng)變量 log_output, log-queries-not-using-indexes, log_slow_admin_statements的作用

log_output='FILE'表示將日志存入文件,默認(rèn)值是'FILE'。log_output='TABLE'表示將日志存入數(shù)據(jù)庫(kù),這樣日志信息就會(huì)被寫入到mysql.slow_log表中。MySQL數(shù)據(jù)庫(kù)支持同時(shí)兩種日志存儲(chǔ)方式,配置的時(shí)候以逗號(hào)隔開即可,如:log_output='FILE,TABLE'。日志記錄到系統(tǒng)的專用日志表中,要比記錄到文件耗費(fèi)更多的系統(tǒng)資源,因此對(duì)于需要啟用慢查詢?nèi)罩荆中枰軌颢@得更高的系統(tǒng)性能,那么建議優(yōu)先記錄到文件

mysql> show variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.01 sec)

log-queries-not-using-indexes:未使用索引的查詢也被記錄到慢查詢?nèi)罩局校蛇x項(xiàng))。如果調(diào)優(yōu)的話,建議開啟這個(gè)選項(xiàng)。另外,開啟了這個(gè)參數(shù),其實(shí)使用full index scan的sql也會(huì)被記錄到慢查詢?nèi)罩?/p>

mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+
1 row in set (0.01 sec)

log_slow_admin_statements表示是否將慢管理語(yǔ)句例如ANALYZE TABLE和ALTER TABLE等記入慢查詢?nèi)罩?/p>

mysql> show variables like 'log_slow_admin_statements';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| log_slow_admin_statements | OFF   |
+---------------------------+-------+
1 row in set (0.01 sec)

5. 日志分析工具mysqldumpslow,mysql官方自帶的,只要安裝了mysql就可以使用它,可以用來幫助我們分析慢日志文件

在生產(chǎn)環(huán)境中,如果要手工分析日志文件,查找、分析SQL,顯然是個(gè)體力活,MySQL提供了日志分析工具mysqldumpslow,如下

root@kickseed:/home# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are
  --verbose    verbose
  --debug      debug
  --help       write this text to standard output
  -v           verbose
  -d           debug
  -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default
                al: average lock time
                ar: average rows sent
                at: average query time
                 c: count
                 l: lock time
                 r: rows sent
                 t: query time  
  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries
  -a           don't abstract all numbers to N and strings to 'S'
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don't subtract lock time from total time

-s  是表示按照何種方式排序,后面可以帶如下排序方式

c: 訪問次數(shù)

l: 鎖定時(shí)間

r: 返回記錄的行數(shù)

t: 查詢時(shí)間

al:平均鎖定時(shí)間

ar:平均返回記錄的行數(shù)

at:平均查詢時(shí)間

-t  是top n的意思,即為返回前面多少條的數(shù)據(jù)

-g  后邊可以寫一個(gè)正則匹配模式,大小寫不敏感的

例子

得到返回記錄行數(shù)最多的10條SQL語(yǔ)句(行數(shù)最多排序需要 -s r ;限制10條需要 -t 10)

mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log

得到訪問次數(shù)最多的10個(gè)SQL(訪問次數(shù)最多排序需要 -s c ;限制10條需要 -t 10)

mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log

得到按照?qǐng)?zhí)行時(shí)間排序的前10條,且sql語(yǔ)句里面含有左連接的查詢語(yǔ)句(執(zhí)行時(shí)間排序需要 -s t;限制10條需要 -t 10)

mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log

另外建議在使用這些命令時(shí)結(jié)合 | 和more 使用 ,否則有可能出現(xiàn)刷屏的情況。

mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more

筆者以自己的慢日志為例,做一次查詢

mysqldumpslow -s t -t 5 kickseed-slow.log 表我要分析kickseed-slow.log文件,該文件是mysql的慢日志文件,得到按照?qǐng)?zhí)行時(shí)間,從大到小排序,最多5條sql語(yǔ)句

root@kickseed:/var/lib/mysql# mysqldumpslow -s t -t 5 kickseed-slow.log 
Reading mysql slow query log from kickseed-slow.log
Count: 2  Time=2.00s (4s)  Lock=0.00s (0s)  Rows=1.0 (2), root[root]@localhost
  select sleep(N)
Count: 3  Time=0.21s (0s)  Lock=0.00s (0s)  Rows=25.0 (75), root[root]@[192.168.54.28]
  SHOW TABLE STATUS FROM `hyj_player`
Count: 1  Time=0.21s (0s)  Lock=0.00s (0s)  Rows=23211.0 (23211), root[root]@[192.168.54.28]
  SELECT * FROM `hyj_player`.`t_player_basic_data` LIMIT N, N
Count: 1  Time=0.20s (0s)  Lock=0.00s (0s)  Rows=24211.0 (24211), root[root]@[192.168.54.28]
  SELECT * FROM t_player_basic_data
Count: 4  Time=0.02s (0s)  Lock=0.00s (0s)  Rows=1.0 (4), root[root]@[192.168.54.28]
  SELECT COUNT(*) FROM t_player_basic_data WHERE playerID < N

從返回的結(jié)果中可以看到,從最大耗時(shí)的2秒,到最小耗時(shí)的0.02秒,一共5條記錄

到此這篇關(guān)于mysql慢查詢mysqldumpslow的使用詳解的文章就介紹到這了,更多相關(guān)mysql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL安裝提示配置信息已損壞請(qǐng)聯(lián)系技術(shù)人員

    MySQL安裝提示配置信息已損壞請(qǐng)聯(lián)系技術(shù)人員

    為了重新安裝MySql,看別人的博客說在注冊(cè)表中搜索mysql,全部刪除。再安裝時(shí)提示配置信息已損壞,遇到這個(gè)問題怎么處理呢,下面小編給大家?guī)砹嗽敿?xì)解決方法,感興趣的朋友一起看看吧
    2023-01-01
  • 線上MYSQL同步報(bào)錯(cuò)故障處理方法總結(jié)(必看篇)

    線上MYSQL同步報(bào)錯(cuò)故障處理方法總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄€上MYSQL同步報(bào)錯(cuò)故障處理方法總結(jié)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 詳解MySQL導(dǎo)出指定表中的數(shù)據(jù)的實(shí)例

    詳解MySQL導(dǎo)出指定表中的數(shù)據(jù)的實(shí)例

    這篇文章主要介紹了詳解MySQL導(dǎo)出指定表中的數(shù)據(jù)的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • mysql Community Server 5.7.19安裝指南(詳細(xì))

    mysql Community Server 5.7.19安裝指南(詳細(xì))

    這篇文章主要介紹了mysql Community Server 5.7.19安裝指南(詳細(xì)),需要的朋友可以參考下
    2017-10-10
  • mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法實(shí)例詳解

    mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法實(shí)例詳解

    這篇文章主要介紹了mysql連接查詢、聯(lián)合查詢、子查詢?cè)砼c用法,結(jié)合實(shí)例形式詳細(xì)分析了mysql連接查詢、聯(lián)合查詢、子查詢的基本概念、功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • mysql having用法解析

    mysql having用法解析

    having字句可以讓我們篩選成組后的各種數(shù)據(jù),where字句在聚合前先篩選記錄,也就是說作用在group by和having字句前,下面通過實(shí)例給大家介紹mysql having用法,一起看看吧
    2017-10-10
  • centos7.4系統(tǒng)中yum源安裝mysql 5.6

    centos7.4系統(tǒng)中yum源安裝mysql 5.6

    本文給大家介紹的是如何在centos7.4系統(tǒng)中通過yum源安裝MySQL 5.6數(shù)據(jù)庫(kù),CentOS7默認(rèn)數(shù)據(jù)庫(kù)是mariadb, 但是 好多用的都是mysql ,但是CentOS7的yum源中默認(rèn)好像是沒有mysql的,今天我們就來看看具體如何操作
    2018-09-09
  • 使用bin-log日志還原數(shù)據(jù)庫(kù)的例子

    使用bin-log日志還原數(shù)據(jù)庫(kù)的例子

    使用bin-log日志還原數(shù)據(jù)庫(kù)的例子,供大家學(xué)習(xí)參考
    2013-02-02
  • 解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題

    解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題

    線上經(jīng)常偶發(fā)死鎖問題,當(dāng)時(shí)處理一張表,也沒有聯(lián)表處理,但是有兩個(gè)mq入口,并且消息體存在一樣的情況,但是是偶發(fā)的,又模擬不出來什么場(chǎng)景會(huì)導(dǎo)致死鎖,只能進(jìn)行代碼分析,問題還原的方式去排查問題,本文給大家介紹了如何解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題
    2023-10-10
  • Mysql數(shù)據(jù)庫(kù)之索引優(yōu)化

    Mysql數(shù)據(jù)庫(kù)之索引優(yōu)化

    MySQL憑借著出色的性能、低廉的成本、豐富的資源,已經(jīng)成為絕大多數(shù)互聯(lián)網(wǎng)公司的首選關(guān)系型數(shù)據(jù)庫(kù)。本文給大家介紹mysql數(shù)據(jù)庫(kù)之索引優(yōu)化,感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03

最新評(píng)論