2016-04-26 129 views
1

分析日誌是一個主要問題。如果你有一個遺留的代碼,並且有數以百計的查詢在運行,你一定會被改進的東西和改進的地方以及需要改進的地方所困惑,因爲在你要付出多少努力之間總會有一個平衡點。在一定的優化問題上。如何分析MySQL慢速查詢日誌或MySQL常規查詢日誌?

那麼第一步就是分析我們要出錯的地方。這隻能通過正確分析日誌來實現。沒有這個,你可能不知道你的應用程序到底出了什麼問題。

那你如何分析MySQL日誌呢?

回答

0

使用關鍵字搜索,即表名稱或列名稱。

在使用您的移動應用程序或Web應用程序或桌面應用程序時,您會知道哪些頁面的加載時間超過預期時間。多次,加載時間受到在後臺運行的查詢的影響。但是,只有當我們進行同步調用而不是異步調用才能獲取數據時。因此,當您知道正在緩慢加載的頁面/區域時,您將獲得加載時在該頁面上運行的查詢列表以及由於您在該頁面上執行操作而觸發的查詢列表。一旦你知道這些查詢,你就會知道正在使用的表和正在提取的列。

現在,如果您正在搜索緩慢的查詢日誌,並且已經爲自己設置了非常高的標準,並將緩慢的查詢時間設置爲400毫秒,則有可能會加載緩慢的查詢日誌,除非您是天才。所以,我們做這樣簡單的事:

grep 'table_name' /var/lib/mysql/mysql-slow.log 

這會造成更多的問題比它解決的,因爲所有的重要問題仍然懸而未決,因爲這不會給查詢時間,查詢日期等,所以,這樣做:

grep -B 3 'table_name' /var/lib/mysql/mysql-slow.log 

-B x給你x查詢前的行數。

我們需要這樣做,因爲實際查詢之前的3行包含有關查詢執行的所有信息 - 執行查詢的時間以及需要多少時間!

另一種:

grep -A 3 'query_user' /var/lib/mysql/mysql-slow.log 

白天慢查詢數,小時明智

grep Time mysql-slow.log | cut -d: -f1,2 | sort -r | uniq -c 

這裏的提示:您可以使用排序-u也可以使用排序| uniq -c,但要確保uniq不會獨立工作,只有在你用管道排序時才能工作。排序應該在uniq之前完成。

使用mysqldumpslow分析日誌

獲得前10名錶現不佳的查詢。

mysqldumpslow -u root -p -s c -t 10 

如果您需要進入詳細的日誌分析,你應該建立麋鹿堆棧你的機器上和你的mysql連接到日誌分析的設置。或者,您可以使用NewRelic分析MySQL日誌。

+1

對於'mysqldumpslow',我更喜歡'-s t',以便通過「影響系統」來排序。如果索引很少,索引很差的查詢可能不重要。 –

+0

@RickJames - ELK是分析MySQL日誌的可行選項嗎? – MontyPython

+1

對不起,我不知道ELK。我已經處理了數百臺服務器上的緩慢日誌,並發現在mysqldumpslow -s -t或pt-query-digest顯示的前幾個查詢中,_usually_有用的信息。讓我看看第一對查詢(加上'CREATE TABLE'和'EXPLAIN'),我可以提供重要的建議。 –

2

一個選項:Percona的工具包

變慢日誌的一些巨大的分析,幾個月前..

而且我發現Percona Toolkit是非常有用的。使用此工具包,您可以輕鬆地對您的慢日誌進行徹底分析,並以較少的麻煩進行數據庫優化。

舉幾個有用的功能分析SLOW日誌:

pt-query-digest

可從MySQL慢,一般情況下,和二進制日誌分析查詢。 (二進制日誌必須首先轉換爲文本,請參閱--type)。它也可以使用來自tcpdump的SHOW PROCESSLIST和MySQL協議數據。默認情況下,該工具報告哪些查詢是最慢的,因此是最重要的優化。通過使用諸如--group-by,--filter和--embedded-attributes之類的選項可以創建更復雜和定製的報告。

用法舉例pt-query-digest slow.log

pt-index-usage

閱讀從日誌查詢和分析他們是如何使用索引。

For more information...

Installation

好了,不是每個人都可以利用這個工具,但如果你能,這應該是非常有幫助的。

+1

ELK是MySQL的選項嗎? – MontyPython

+1

我這麼認爲,實際上還沒有用ELK來分析sql日誌。但根據我對這個工具的初步看法,尤其是, LogStash,最近有不少博客正在討論如何使用該工具進行分析。看看它,有幾篇文章可以幫助你。 –

+0

是的,其實我正在努力。當我收集到足夠的工作知識時,我會詳細的發佈。 – MontyPython

0

MySQL日誌的大小可能很大,特別是對於生產MySQL服務器。在這種情況下,分析慢速/一般查詢日誌可能是一項單調乏味的任務(我之前一直處於相同的情況)。在這種情況下,Monyog的查詢分析器功能非常方便,因爲它提供了一個窗口,您可以從中獲取緩慢/常規查詢日誌的全部內容。另外,你可以放置不同的過濾器,像逗號分隔的mysql用戶,你想要查看執行的查詢,主機名。您還可以限制日誌文件的大小或應從MySQL日誌文件中讀取的行數。 Monyog在分析MySQL日誌的過程中幫了我很多時間,並且我認爲它是目前市場上定價最好的市場。

它還有另一個稱爲實時的功能,它將顯示在實時會話中執行的查詢,您還可以保存會話以便在將來需要時進行查看。您可以選擇不同的嗅探模式,如性能架構,Processlist或MySQL代理來嗅探MySQL查詢。您可以啓用警報來隨時瞭解MySQL服務器的狀態。