讀懂mysql慢查詢日誌

2022-04-29 13:45:06 字數 1593 閱讀 8845

我們來看一下如何去讀懂這些慢查詢日誌。

在跟蹤慢查詢日誌之前,首先你得保證最少發生過一次慢查詢。如果你沒有可以自己製造乙個:

root@server#mysql -e 'select sleep(8);

上述操作所做的事情只有乙個:"睡"(啥也不做)八秒。這個長度應該足以被記錄在你的慢查詢日誌裡了(我通常推薦針對長於 2 或 3 秒的查詢進行慢查詢記錄)。

首先,我們看看乙個慢速查詢日誌條目是什麼樣子的:

root@server#tail /var/log/slowqueries

# time: 130320  7:30:26

# user@host: db_user[db_database] @ localhost

# query_time: 4.545309  lock_time: 0.000069 rows_sent: 219  rows_examined: 254

set timestamp=1363779026;

select option_name, option_value from wp_options where autoload = 'yes';

我們來過一下每一行所代表的意思:

要將 unix 時間轉成乙個人類可讀的時間,可以使用 date -d 命令。輸入 date -d @(記得要包括 @ 符號),然後在 @(之間沒有空格)後貼上日誌中的時間戳:

root@server#date -d @1363779026

wed mar 20 07:30:26 edt 2013

上面例子中我們可以看到查詢進行的同時記錄了該日誌 - 但是對於一台超負載的伺服器常常並非如此。因此記住:set timestamp= value 才是實際的查詢的執行時間。

現在我來演示一下我是如何使用 mysql 慢查詢日誌來解決我的某個**上的乙個真實問題的。你的查詢可能與此不太一樣,但是解決問題的原理是相通的。

我在乙個部落格**上使用了乙個名為

tweet blender 的外掛程式來自動顯示相關微博到我的關鍵字中。不幸的是,一些人發現了這個並使用我的微博中的關鍵字來發一些垃圾微博 -

不管怎樣,最終結果就是我的部落格**上顯示的是一些垃圾微博。因為相關微博在我的**存在的時間並不長,所以我在**上並沒有發現什麼問題,直到我檢視慢查詢日誌。

我的**對帶有垃圾資訊(垃圾資訊常常都是一樣的)的微博進行了幾個類似的查詢,經過一段時間後這些查詢的數量太大以致其中的一些執行遲緩。當這種情況發生的時候,由於請求的數量非常大,有些朋友的**很可能會因此假死或者直接報錯,但是我的伺服器經過很好的效能調優,因此並沒有很明顯的影響。幸運的是當時我正在進行慢查詢日誌檢視,及時發現了這一情況並迅速解決了這個問題。

這個問題的解決很簡單

- tweet blender 具備乙個漂亮的過濾功能,我只需將該微博使用者名稱以及一些垃圾關鍵字新增到 "exclude"

列表,之後就再也沒有這種問題了。這樣看來,對我們自己**以及日誌的監控是多麼重要,即使是一星期對每個站點/伺服器只進行一次快速檢查。

mysql開啟慢查詢日誌 MySQL慢日誌體系建設

慢查詢日誌是mysql提供的一種日誌記錄,用來記錄在mysql中響應時間超過閾值的sql語句,在很大程度上會影響資料庫整體的效能,是mysql優化的乙個重要方向。在58的雲db平台建設中,慢sql系統作為乙個非常重要功能模組,不僅是dba日常運維使用,我們也希望通過該功能可以協助開發人員更快速定位業...

mysql慢日誌時間 MySQL慢查詢日誌優化

一 慢查詢日誌概念 mysql的慢查詢日誌是mysql提供的一種日誌記錄,它用來記錄在mysql中響應時間超過閥值的語句,具體指執行時間超過long query time值的sql,則會被記錄到慢查詢日誌中。long query time的預設值為10,意思是執行10s以上的語句。預設情況下,mys...

mysql 慢日誌 MYSQL慢查詢和日誌

一 簡介 開啟慢查詢日誌,可以讓mysql記錄下查詢超過指定時間的語句,通過定位分析效能的瓶頸,才能更好的優化資料庫系統的效能。二 引數說明 slow query log 慢查詢開啟狀態 slow query log file 慢查詢日誌存放的位置 這個目錄需要mysql的執行帳號的可寫許可權,一般...