前言html
本篇主要總結一下MySQL數據庫的幾種日誌,用於平常維護過程當中問題解決和性能優化等,稍顯基礎,平常積累之用。mysql
文章的部份內容會將MySQL數據庫和SQL Server數據庫部份內容作一個對比,非抨擊孰優孰劣,只敘述技術,權作學習之用。linux
閒言少敘,直接進入本篇的正題。sql
技術準備數據庫
宿主於Ubuntu14.04.2平臺下,基於MYSQL5.5.46版本。性能優化
日誌文件記錄了MySQL數據庫的各類類型的活動,做爲平常定位問題的最經常使用的一種分析手段,Mysql數據庫中經常使用的日誌文件分爲如下幾類:錯誤日誌、二進制日誌、慢查詢日誌,查詢日誌。性能
1、錯誤日誌學習
我記得在寫SQL Server的時候,我寫過一篇關於SQL Server啓動過程當中的一些錯誤日誌記錄,能夠點擊此進行查看。一樣,在MySQL數據庫運行過程當中,也有本身的數據庫錯誤日誌。優化
該日誌記錄了MySQL運行過程當中啓動、運行、關閉過程當中的一些詳細記錄,在一旦出現問題的時候,能夠先查看該日誌,該日誌不但記錄了出錯信息,一樣也記錄了一些警告,固然也有一些運行信息。spa
能夠經過以下命令,來查看錯誤日誌的文件路徑:
show variables like 'log_error';
經過上面的命令定位到錯誤日誌的文件,若是出問題,能夠在相應的Server上來查看該日誌明細,查看方式以下:
more /var/log/mysql/error.log
固然,上述命令在linux平臺下,通常用於修改文件,可是也能夠做爲查看文件來用。
而且,在合適的條件下,MySQL會自動歸檔這些錯誤日誌,用於後期問題的查找。
在上面的日誌文件中能夠看到,有一條提示是IP地址的域名解析問題,因此能夠經過該文件來記錄登陸信息等。
2、慢查詢日誌
所謂的慢查詢日誌就是用來記錄在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性能調優的內容涉及面很廣,後續文章中依次展開分析。
若是您看了本篇博客,以爲對您有所收穫,請不要吝嗇您的「推薦」。