當前位置:編程學習大全網 - 編程語言 - 美團面試題:慢SQL有遇到過嗎?是怎麽解決的?

美團面試題:慢SQL有遇到過嗎?是怎麽解決的?

大家好,我是田維常,可以叫我老田,也可以叫我田哥

。2017年的時候,我剛去上海,朋友內推我去美團面試,之前我也寫過壹個壹篇文章,也是在美團面試中遇到的:

美團面試題:String s = new String("111")會創建幾個對象?

關於慢SQL,我和面試官扯了很久,面試官也是很謙虛的,總是點頭,自己以為回答的還可以。最後的最後,還是說了“ 妳先回去等通知吧! ”。

所以,我決定把這個慢SQL技術點,好好和妳分享分享。希望妳下次在遇到類似的面試,能順順利利輕輕松松的斬獲自己想要的offer。

MySQL的慢查詢日誌是MySQL提供的壹種日誌記錄,它用來記錄MySQL中查詢時間超過(大於)設置閾值(long_query_time)的語句,記錄到慢查詢日誌中。

其中,long_query_time的默認值是10,單位是秒,也就是說默認情況下,妳的SQL查詢時間超過10秒就算慢SQL了。

在MySQL中,慢SQL日誌默認是未開啟的,也就說就算出現了慢SQL,也不會告訴妳的,如果需要知道哪些SQL是慢SQL,需要我們手動開啟慢SQL日誌的。

關於慢SQL是否開啟,我們可以通過下面這個命令來查看:

在這裏插入圖片描述

通過命令,我們就可以看到slow_query_log項為OFF,說明我們的慢SQL日誌並未開啟。另外我們也可以看到我們慢SQL日誌存放於哪個目錄下和日誌文件名。

下面我們來開啟慢SQL日誌,執行下面的命令:

這裏需要註意,這裏開啟的是我們當前的數據庫,並且,我們重啟數據庫後會失效的。

開啟慢SQL日誌後,再次查看:

slow_query_log項已經變成ON,說明開啟成功。

上面說過慢SQL默認時間是10秒,我們通過下面的命令就可以看到我們慢SQL的默認時間:

在這裏插入圖片描述

我們總不能壹直使用這個默認值,可能很多業務需要時間更短或更長,所以此時,我們就需要對默認時間進行修改,修改命令如下:

修改完了,我們再來看看是否已經改成了3秒。

這裏需要註意:想要永久的生效,還需要修改MySQL下面的配置文件my.cnf 文件。

註意:不同操作系統,配置有些區別。

Linux操作系統中

Windows操作系統中

執行壹條慢SQL,因為我們前面已經設置好了慢SQL時間為3秒,所以,我們只要執行壹條SQL時間超過3秒即可。

該SQL耗時4.024秒,下面我們就來查看慢SQL出現了多少條。

使用命令:

找到慢SQL日誌文件,打開後就會出現類似下面這樣的語句;

簡單說明:

切記

通常我們定位慢SQL有兩種方式:

第壹種:定位慢查詢 SQL 可以通過兩個表象進行判斷

第二種:根據不同的數據庫使用不同的方式獲取問題 SQL

如果開啟了慢SQL日誌後,可能會有大量的慢SQL日誌產生,此時再用肉眼看,那是不太現實的,所以大佬們就給我搞了個工具: mysqldumpslow 。

mysqldumpslow 能將相同的慢SQL歸類,並統計出相同的SQL執行的次數,每次執行耗時多久、總耗時,每次返回的行數、總行數,以及客戶端連接信息等。

通過命令

可以看到相關參數的說明:

比較常用的參數有這麽幾個:

mysqldumpslow 常用的使用方式如下:

如上壹條命令,應該是mysqldumpslow最簡單的壹種形式,其中-s參數是以什麽方式排序的意思,c指代的是以總數從大到小的方式排序。-s的常用子參數有:c: 相同查詢以查詢條數和從大到小排序。t: 以查詢總時間的方式從大到小排序。l: 以查詢鎖的總時間的方式從大到小排序。at: 以查詢平均時間的方式從大到小排序。al: 以查詢鎖平均時間的方式從大到小排序。

同樣的,還可以增加其他參數,實際使用的時候,按照自己的情況來。

其他常用方式:

接下,我們來個實際操作。

這其中的 SQL 語句因為涉及某些信息,所以我都用*號將主體替換了,如果希望得到具體的值,使用-a參數。

使用 mysqldumpslow 查詢出來的摘要信息,包含了這些內容:

Count : 464 :表示慢查詢日誌總***記錄到這條sql語句執行的次數;

Time=18.35s (8515s) :18.35s表示平均執行時間(-s at),8515s表示總的執行時間(-s t);

Lock=0.01s (3s) :與上面的Time相同,第壹個表示平均鎖定時間(-s al),括號內的表示總的鎖定時間(-s l)(也有另壹種說法,說是表示的等待鎖釋放的時間);

Rows=90884.0 (42170176) : 第壹個值表示掃描的平均行數(-s ar),括號內的值表示掃描的總行數(-s r)。

是不是

so easy!!!!

  • 上一篇:適合孩子學習的編程軟件有哪些?
  • 下一篇:捷達VS5、寶沃BX7、BAIC新能源EC5惠州到貨情況匯總
  • copyright 2024編程學習大全網