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

mysql慢查詢mysqldumpslow的使用詳解

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

簡(jiǎn)言

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

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

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

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

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

log-slow-queries  :舊版(5.6以下版本)MySQL數(shù)據(jù)庫(kù)慢查詢?nèi)罩敬鎯?chǔ)路徑。可以不設(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í),則寫(xiě)入日志。注意該值修改后再次查詢顯示的還是舊值,要使用 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ì)被寫(xiě)入到mysql.slow_log表中。MySQL數(shù)據(jù)庫(kù)支持同時(shí)兩種日志存儲(chǔ)方式,配置的時(shí)候以逗號(hào)隔開(kāi)即可,如:log_output='FILE,TABLE'。日志記錄到系統(tǒng)的專(zhuān)用日志表中,要比記錄到文件耗費(fèi)更多的系統(tǒng)資源,因此對(duì)于需要啟用慢查詢?nèi)罩?,又需要能夠獲得更高的系統(tǒng)性能,那么建議優(yōu)先記錄到文件

演示步驟

1. 查詢慢查詢是否開(kāi)啟,慢查詢的閾值,慢查詢?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ì)被記錄下來(lái)。也就是說(shuō),在mysql源碼里是判斷大于long_query_time,而非大于等于

slow_query_log:OFF 表慢查詢未開(kāi)啟

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

2. 打開(kāi)慢查詢開(kāi)關(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í)間超過(guò)1秒的sql語(yǔ)句會(huì)被寫(xiě)入到慢日志文件

slow_query_log:ON 表慢查詢已開(kāi)啟

謹(jǐn)記:

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

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

3) : 設(shè)置slow_query_log=1開(kāi)啟了慢查詢后只對(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ǔ)句

然后我們打開(kāi)慢日志文件,也就是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ì)被寫(xiě)入到mysql.slow_log表中。MySQL數(shù)據(jù)庫(kù)支持同時(shí)兩種日志存儲(chǔ)方式,配置的時(shí)候以逗號(hào)隔開(kāi)即可,如:log_output='FILE,TABLE'。日志記錄到系統(tǒng)的專(zhuān)用日志表中,要比記錄到文件耗費(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)的話,建議開(kāi)啟這個(gè)選項(xiàng)。另外,開(kāi)啟了這個(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就可以使用它,可以用來(lái)幫助我們分析慢日志文件

在生產(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: 訪問(wèn)次數(shù)

l: 鎖定時(shí)間

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

t: 查詢時(shí)間

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

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

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

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

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

例子

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

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

得到訪問(wèn)次數(shù)最多的10個(gè)SQL(訪問(wèn)次數(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)文章

  • MySQL8.0.26安裝與卸載的完整步驟記錄

    MySQL8.0.26安裝與卸載的完整步驟記錄

    這篇文章主要給大家介紹了MySQL8.0.26安裝與卸載的完整步驟,文中通過(guò)圖文以及示例代碼介紹非常詳細(xì),對(duì)于在windows下安裝msql非常有幫助,需要的朋友可以參考下
    2021-07-07
  • MySQL安裝總是No such file or directory問(wèn)題及解決

    MySQL安裝總是No such file or directory問(wèn)題及解決

    本文介紹了MySQL可執(zhí)行文件路徑未正確設(shè)置導(dǎo)致的錯(cuò)誤,并提供了一個(gè)具體的解決方法,幫助用戶解決“總是Nosuchfileordirectory”錯(cuò)誤
    2025-12-12
  • mysql免安裝版配置教程

    mysql免安裝版配置教程

    這篇文章主要為大家詳細(xì)介紹了mysql免安裝版配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • mysql Innodb表空間卸載、遷移、裝載的使用方法

    mysql Innodb表空間卸載、遷移、裝載的使用方法

    從MySQL的Innodb特性中我們知道,Inndob的表空間有共享和獨(dú)享的特點(diǎn),如果是共享的。則默認(rèn)會(huì)把表空間存放在一個(gè)文件中(ibdata1),當(dāng)開(kāi)啟獨(dú)享表空間參數(shù)Innodb_file_per_table時(shí),會(huì)為每個(gè)Innodb表創(chuàng)建一個(gè).ibd的文件。文章討論在獨(dú)享表空間卸載、裝載、遷移Innodb表的情況
    2013-11-11
  • MySQL中UNION 和 JOIN 多表聯(lián)合查詢方式

    MySQL中UNION 和 JOIN 多表聯(lián)合查詢方式

    本文介紹了在MySQL中UNION和JOIN兩種多表查詢的方式,包括它們的適用場(chǎng)景、語(yǔ)法和特性,JOIN用于關(guān)聯(lián)數(shù)據(jù),而UNION用于合并具有相同結(jié)構(gòu)但無(wú)直接關(guān)系的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • MySQL如何生成唯一的server-id

    MySQL如何生成唯一的server-id

    這篇文章主要給大家介紹了關(guān)于MySQL如何生成唯一的server-id的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • mysql 循環(huán)insert方式

    mysql 循環(huán)insert方式

    這篇文章主要介紹了mysql 循環(huán)insert方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Hibernate4在MySQL5.1以上版本創(chuàng)建表出錯(cuò) type=InnDB

    Hibernate4在MySQL5.1以上版本創(chuàng)建表出錯(cuò) type=InnDB

    本文主要介紹解決Hibernate4在MySQL5.1自動(dòng)創(chuàng)建表出錯(cuò)的方法,簡(jiǎn)單實(shí)用,需要的朋友可以參考下。
    2016-05-05
  • MySQL模糊查找like通配符使用(小白入門(mén)篇)

    MySQL模糊查找like通配符使用(小白入門(mén)篇)

    這篇文章主要為大家介紹了MySQL模糊查找like通配符使用的小白入門(mén)篇學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL報(bào)錯(cuò)sql_mode=only_full_group_by的問(wèn)題解決

    MySQL報(bào)錯(cuò)sql_mode=only_full_group_by的問(wèn)題解決

    本文主要介紹了MySQL報(bào)錯(cuò)sql_mode=only_full_group_by的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02

最新評(píng)論

东方市| 吴桥县| 尖扎县| 尼木县| 三门峡市| 治县。| 城步| 上林县| 黑龙江省| 丹凤县| 垣曲县| 阳江市| 廉江市| 阜宁县| 南皮县| 和田市| 安庆市| 雷波县| 元江| 松溪县| 石阡县| 诸城市| 文安县| 盈江县| 青冈县| 外汇| 琼中| 泌阳县| 阿坝| 光山县| 米林县| 通化市| 海城市| 牡丹江市| 天水市| 彰化县| 娄烦县| 黄山市| 宜州市| 花莲市| 青浦区|