自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL慢查詢?nèi)罩?,看完你就會?/h1>

數(shù)據(jù)庫 MySQL
我們通過慢查詢?nèi)罩?,可以定位到是哪一條語句查詢比較慢,找到這條語句之后,如何去分析它慢的原因呢?最簡單的方法,可以通過explain解析。

如何開啟慢查詢?nèi)罩?/h3>

1、查看慢查詢?nèi)罩臼欠耖_啟

執(zhí)行命令:show variables like 'slow%'。

得到以下結(jié)果:

可以看到slow_query_log屬性是OFF,處于關(guān)閉狀態(tài),那么我們需要先開啟慢查詢。

slow_query_log_file表示慢查詢?nèi)罩疚募拇娣怕窂?,我們可以自定義文件路徑:

set global slow_query_log_file = '路徑'。

2、開啟慢查詢?nèi)罩?/h4>

執(zhí)行命令:set global slow_query_log = on。

然后再查詢一下,發(fā)現(xiàn)slow_query_log處于開啟狀態(tài):

開啟了之后,是不是所有的查詢都會記錄在文件里呢?

當(dāng)然不是,慢查詢?nèi)罩?,顧名思義是只記錄查詢比較慢的語句,那問題又來了,怎么才算查詢比較慢的語句呢?

實(shí)際上,這里會有一個(gè)標(biāo)準(zhǔn)值,而且這個(gè)標(biāo)準(zhǔn)值是可以由我們自己設(shè)定的。

3、慢查詢的臨界值設(shè)定

首先查看一下默認(rèn)的臨界值。

執(zhí)行命令:show variables like '%long%'。

其中有一個(gè)long_query_time屬性,它的值為10.000000。它表示的意思是,只記錄查詢時(shí)間在10s以上的語句。

顯然10s我們是不可接受的,所以我們需要自己設(shè)定一下這個(gè)值。因?yàn)槲易约旱臏y試表中只有10w條數(shù)據(jù),查詢很快,所以這里我們設(shè)置的小一點(diǎn)。如果有條件的話,最好設(shè)置一個(gè)百萬級的表進(jìn)行測試。

我們把慢查詢的臨界值設(shè)置為0.02:set long_query_time=0.02。

可以看到現(xiàn)在臨界值是0.02秒了。

現(xiàn)在來模擬查詢時(shí)間小于0.01和大于0.01的兩個(gè)查詢,看是否都記錄在了慢查詢?nèi)罩局小?/p>

然后看一下日志文件中的數(shù)據(jù):

可以看到只有第二條查詢的日志。

需要注意的是,我們上面的操作是在交互界面進(jìn)行的,如果數(shù)據(jù)庫進(jìn)行重啟,這些設(shè)置都會失效。如果要永久生效,需要修改配置文件:

vi /etc/my.cnf
[mysqld]
slow_query_log = 1
long_query_time = 0.1
slow_query_log_file =/usr/local/mysql/mysql_slow.log

在配置文件中加上這三行就可以了。主要要重啟mysql才能生效!

慢查詢語句解析

我們通過慢查詢?nèi)罩?,可以定位到是哪一條語句查詢比較慢,找到這條語句之后,如何去分析它慢的原因呢?最簡單的方法,可以通過explain解析。

執(zhí)行命令:explain (sql語句)。

我們把上面執(zhí)行的兩條語句放一起對比解析一下:

需要重點(diǎn)關(guān)注possible_keys、key、rows這幾個(gè)屬性值。

possible_keys表示該語句可能會用到的索引。

key表示該語句實(shí)際用到的索引。

rows表示該語句掃描的行數(shù)。

通過這些屬性,我們可以大致的分析一下,第一條語句沒有走索引,它掃描了9萬多行數(shù)據(jù),所以查詢速度比較慢,而第二條語句走了主鍵索引,僅僅掃描了一條語句,所以它的執(zhí)行速度比較快。這樣我們就可以快速定位到問題,然后針對性的去解決。

開啟性能詳情

如果通過上面的語句解析沒有定位到問題,我該加的索引也加了,但是還是比較慢,那就可以通過性能詳情來進(jìn)一步的探究一下原因。

性能詳情可以追蹤查詢語句的整個(gè)生命周期的狀態(tài),有了這些狀態(tài)值,就可以從更深層次找出具體是哪個(gè)環(huán)節(jié)慢了,從而能針對性的進(jìn)行改善。

1、查看性能詳情是否開啟

執(zhí)行命令:show variables like '%profiling%'。

可以看到profiling屬性值為OFF,表示關(guān)閉,那么我們先開啟它。

執(zhí)行命令:set profiling = on 。

這樣就開啟了。開啟之后,我們就可以執(zhí)行查詢語句,mysql會自動的保存性能記錄。

2、查看性能記錄

我們執(zhí)行一條sql語句:

然后查看性能記錄:

執(zhí)行命令:show profiles。

可以看到開啟后的所有查詢語句的記錄。我們想查看一下第二條執(zhí)行語句的整個(gè)執(zhí)行周期的狀態(tài)詳情:

執(zhí)行命令:show profile for query 2。

可以看到整個(gè)執(zhí)行過程每個(gè)狀態(tài)的耗時(shí)情況。然后定位到具體是哪個(gè)狀態(tài)最耗時(shí),然后針對性的排查原因。

官方也給出了每個(gè)狀態(tài)的解釋,具體可查看:

https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2025-01-14 00:00:00

Blocking隊(duì)列元素

2021-08-13 07:56:13

Python虛擬環(huán)境

2017-04-01 19:00:25

MySQL慢查詢

2017-02-09 19:45:07

Linux系統(tǒng)Linux 發(fā)行版

2017-12-12 13:27:20

主板跳線USB

2018-04-27 15:33:59

Python裝飾器

2018-10-12 16:45:10

MySQL查詢?nèi)罩?/a>數(shù)據(jù)庫

2023-11-01 07:28:31

MySQL日志維護(hù)

2010-11-25 16:29:26

MySQL慢日志查詢

2017-09-18 15:20:02

MySQL慢查詢?nèi)罩?/a>配置

2024-11-12 09:13:01

SLS日志服務(wù)

2013-09-22 17:11:48

路由器選購路由器

2022-12-26 00:48:38

2021-05-14 11:05:38

MySQL慢日志數(shù)據(jù)庫

2022-09-29 08:32:14

查詢語句OR

2018-08-02 16:10:50

MySQL數(shù)據(jù)庫清理

2021-04-07 10:38:43

MySQL數(shù)據(jù)庫命令

2022-12-06 07:53:33

MySQL索引B+樹

2023-03-26 22:31:29

2023-05-05 06:54:07

MySQL數(shù)據(jù)查詢
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號