我們來看一下如何去讀懂這些慢查詢日誌。
在跟蹤慢查詢日誌之前,首先你得保證最少發生過一次慢查詢。如果你沒有可以自己製造乙個:
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的執行帳號的可寫許可權,一般...