MySQL調優系列 日誌分析

2022-02-18 09:09:00 字數 3922 閱讀 2863

前言

本篇主要總結一下mysql資料庫的幾種日誌,用於日常維護過程中問題解決和效能優化等,稍顯基礎,日常積累之用。

文章的部分內容會將mysql資料庫和sql server資料庫部分內容做乙個對比,非抨擊孰優孰劣,只敘述技術,權做學習之用。

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

技術準備

宿主於ubuntu14.04.2平台下,基於mysql5.5.46版本。

日誌檔案記錄了mysql資料庫的各種型別的活動,作為日常定位問題的最常用的一種分析手段,mysql資料庫中常用的日誌檔案分為以下幾類:錯誤日誌、二進位制日誌、慢查詢日誌,查詢日誌。

一、錯誤日誌

我記得在寫sql server的時候,我寫過一篇關於sql server啟動過程中的一些錯誤日誌記錄,可以點選此進行檢視。同樣,在mysql資料庫執行過程中,也有自己的資料庫錯誤日誌。

該日誌記錄了mysql執行過程中啟動、執行、關閉過程中的一些詳細記錄,在一旦出現問題的時候,可以先檢視該日誌,該日誌不但記錄了出錯資訊,同樣也記錄了一些警告,當然也有一些執行資訊。

可以通過如下命令,來檢視錯誤日誌的檔案路徑:

通過上面的命令定位到錯誤日誌的檔案,如果出問題,可以在相應的server上來檢視該日誌明細,檢視方式如下:

more /var/log/mysql/error.log

當然,上述命令在linux平台下,一般用於修改檔案,但是也可以作為檢視檔案來用。

並且,在合適的條件下,mysql會自動歸檔這些錯誤日誌,用於後期問題的查詢。

在上面的日誌檔案中可以看到,有一條提示是ip位址的網域名稱解析問題,所以可以通過該檔案來記錄登入資訊等。

二、慢查詢日誌

所謂的慢查詢日誌就是用來記錄在mysql中執行速度緩慢的執行語句,所以說這個檔案很方便整體的效能調優,我們知道在sql server中只能通過相應的dmv來查詢。

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

我們來看一下該閥值的設定方式,可以通過long_query_time來設定,預設值為10,意思是執行10s以上的語句。

預設情況下,mysql資料庫並不啟動慢查詢日誌,需要我們手動來設定這個引數,當然,如果不是調優需要的話,一般不建議啟動該引數,因為存在一定的效能影響。

來看,設定方式

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

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

set global long_query_time=

0.1;

驗證的時候,這裡有點小技巧的,需要新開乙個視窗進行查詢,當前視窗的查詢是沒有生效的,不知道算不算mysql的乙個小bug.我們新開乙個視窗驗證下:

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

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

我們來執行如下指令碼:

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

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效能調優的內容涉及面很廣,後續文章中依次展開分析。

如果您看了本篇部落格,覺得對您有所收穫,請不要吝嗇您的「推薦」。

RAM調優之日誌分析

d dalvikvm 每隔一段時間,系統 器都會列印記憶體 的情況。日誌的內容格式就是上面那條格式。下面是詳細說明 原因 記憶體總數 可用記憶體百分比 外部記憶體狀態 占用時間 d dalvikvm 9050 gc concurrent freed 2049k,65 free 3571k 9991k...

mysql 調優 Mysql調優

表設計 1 禁止使用外來鍵 2 多表中的相同列,必須保證列定義一致 3 國內表預設使用innodb,表字符集預設使用gbk,國際預設使用utf8的表 4 表必須包含gmt create和gmt modified欄位,即表必須包含記錄建立時間和修改時間的字段 5 單錶一到兩年內資料量超過500w或資料...

Spring Boot系列 日誌配置

原文 日誌,通常不會在需求階段作為乙個功能單獨提出來,也不會在產品方案中看到它的細節。但是,這絲毫不影響它在任何乙個系統中的重要的地位。為了保證服務的高可用,發現問題一定要即使,解決問題一定要迅速,所以生產環境一旦出現問題,預警系統就會通過郵件 簡訊甚至 的方式實施多維轟炸模式,確保相關負責人不錯過...