MySQL調優系列_日志分析


 前言

本篇主要總結一下MySQL數據庫的幾種日志,用於日常維護過程中問題解決和性能優化等,稍顯基礎,日常積累之用。

文章的部分內容會將MySQL數據庫和SQL Server數據庫部分內容做一個對比,非抨擊孰優孰劣,只敘述技術,權做學習之用。

閑言少敘,直接進入本篇的正題。

技術准備

宿主於Ubuntu14.04.2平台下,基於MYSQL5.5.46版本。

日志文件記錄了MySQL數據庫的各種類型的活動,作為日常定位問題的最常用的一種分析手段,Mysql數據庫中常用的日志文件分為以下幾類:錯誤日志、二進制日志、慢查詢日志,查詢日志。

一、錯誤日志

我記得在寫SQL Server的時候,我寫過一篇關於SQL Server啟動過程中的一些錯誤日志記錄,可以點擊此進行查看。同樣,在MySQL數據庫運行過程中,也有自己的數據庫錯誤日志。

該日志記錄了MySQL運行過程中啟動、運行、關閉過程中的一些詳細記錄,在一旦出現問題的時候,可以先查看該日志,該日志不但記錄了出錯信息,同樣也記錄了一些警告,當然也有一些運行信息。

可以通過如下命令,來查看錯誤日志的文件路徑:

show variables like 'log_error';

通過上面的命令定位到錯誤日志的文件,如果出問題,可以在相應的Server上來查看該日志明細,查看方式如下:

more /var/log/mysql/error.log

當然,上述命令在linux平台下,一般用於修改文件,但是也可以作為查看文件來用。

並且,在合適的條件下,MySQL會自動歸檔這些錯誤日志,用於后期問題的查找。

在上面的日志文件中可以看到,有一條提示是IP地址的域名解析問題,所以可以通過該文件來記錄登錄信息等。

 

二、慢查詢日志

所謂的慢查詢日志就是用來記錄在MySQL中運行速度緩慢的執行語句,所以說這個文件很方便整體的性能調優,我們知道在SQL Server中只能通過相應的DMV來查找。

當然,什么樣的語句才能稱為慢的語句呢,所以這里就需要有一個閥值來定義,一旦運行時間超過了這個值就會被記錄到這個慢查詢日志中。

我們來看一下該閥值的設置方式,可以通過long_query_time來設置,默認值為10,意思是運行10S以上的語句。

默認情況下,Mysql數據庫並不啟動慢查詢日志,需要我們手動來設置這個參數,當然,如果不是調優需要的話,一般不建議啟動該參數,因為存在一定的性能影響。

來看,設置方式

show variables like '%long%';

show variables like 'log_slow_queries'

我們來開啟這個慢查詢語句。

SET global slow_query_log=1
SHOW variables like  '%query_log%';

當然,我們可以將默認的時間閥值調小,方法如下

SET global long_query_time=0.1;

驗證的時候,這里有點小技巧的,需要新開一個窗口進行查詢,當前窗口的查找是沒有生效的,不知道算不算Mysql的一個小Bug.我們新開一個窗口驗證下:

是不是很爽?我們來來個語句驗證下,看看效果咋樣。

為了方便演示,我將這個閥值設置成0.001S,挺小的一個值,我們來找個語句試驗一下:

我們來執行如下腳本:

select * from tables;

我們來看一下慢查詢日志是否已經記錄下來:

 sudo more  /var/lib/mysql/wu-virtual-Ubuntu01-slow.log

這里的日志查看,需要提權操作。

大家可以看到,當前已經將我們查詢的語句輸出到日志當中去,當然,其它的一些語句也被記錄下來。

並且,詳細的記錄執行時間,執行用戶,運行時間,lock時間,返回行等基礎信息。

當然,這里有很多同學看到這里就來需求了,一般我們運行的時候,對Server進行監控的時候,難道讓我一台台機器上去看文件,我想搞一個監控系統,需要監控每台的Slow 日志文件,並且解析起來很不爽。

為了解決這個問題,MySQL貼心的為我們提供了一張系統的表進行查看,這就方便我們操作了,比如我想看看最慢的前10條語句......

這里需要提示一下,這個方法只建立在MySQL 5..1之上,過程如下:

首先,我們來看一下默認的輸出方式,腳本如下:

 show variables like 'log_output';

可以看到,這里默認的輸出方式是FILE,文件,我們將這里改成Table。

set global log_output='TABLE';

select sleep(10);
 select * from mysql.slow_log;

是不是很貼心....你可以通過T-SQL語句進行各種查了。

在我們進行數據庫優化的時候,很多的時候是通過創建合適的索引,進行優化,所以說,如果我們知道一個數據庫中那些語句沒有應用到索引,或者說是全表掃描的話,是很方便易於我們進行優化的。

所以,在Mysql的慢日志當中,為我們有貼心的添加了一個參數,用來記錄沒有使用索引的語句;

 show variables like 'log_queries_not_using_indexes';

默認是關閉的,我們可以將該參數打開,進行詳細的記錄;

SET global log_queries_not_using_indexes=1

 

通過此參數的設置,就可以跟蹤MySQL中沒有使用索引並且運行時間比較長的語句了,下面的優化大家就懂了。

篇幅稍長了,這里就不跟大家演示了。

結語

此篇文章先到此吧,關於MYSQL性能調優的內容涉及面很廣,后續文章中依次展開分析。

 

如果您看了本篇博客,覺得對您有所收獲,請不要吝嗇您的“推薦”。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM