MySQL性能優化之慢查詢

    1. 性能優化的思路
  1. 首先需要使用慢查詢功能,去獲取所有查詢時間比較長的SQL語句
  2. 其次使用explain命令去查看有問題的SQL的執行計劃
  3. 最後可以使用show profile[s] 查看有問題的SQL的性能使用情況
    1. 介紹
  1. 數據庫查詢快慢是影響項目性能的一大因素,對於數據庫,我們除了要優化 SQL,更重要的是得先找到需要優化的 SQL
  2. MySQL 數據庫有一個“慢查詢日誌”功能,用來記錄查詢時間超過某個設定值的SQL,這將極大程度幫助我們快速定位到癥結所在,以便對症下藥。

* 至於查詢時間的多少纔算慢,每個項目、業務都有不同的要求。

* 傳統企業的軟件允許查詢時間高於某個值,但是把這個標準放在互聯網項目或者訪問量大的網站上,估計就是一個bug,甚至可能升級爲一個功能性缺陷。

  1. MySQL的慢查詢日誌功能,默認是關閉的,需要手動開啓
    1. 開啓慢查詢功能
  2. 查看是否開啓慢查詢功能

 

參數說明:

* slow_query_log    :是否開啓慢查詢日誌,ON 爲開啓,OFF 爲關閉,如果爲關閉可以開啓。

* log-slow-queries  :舊版(5.6以下版本)MySQL數據庫慢查詢日誌存儲路徑。可以不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log

* slow-query-log-file:新版(5.6及以上版本)MySQL數據庫慢查詢日誌存儲路徑。可以不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log

* long_query_time :慢查詢閾值,當查詢時間多於設定的閾值時,記錄日誌,單位爲秒。

  1. 臨時開啓慢查詢功能

在 MySQL 執行 SQL 語句設置,但是如果重啓 MySQL 的話將失效

set global slow_query_log = ON;

set global long_query_time = 1;

  1. 永久開啓慢查詢功能

修改/etc/my.cnf配置文件,重啓 MySQL, 這種永久生效.

[mysqld]

slow_query_log = ON

slow_query_log_file = /var/log/mysql/slow.log

long_query_time = 1

 

  1. 慢日誌格式

格式說明:

* 第一行,SQL查詢執行的時間

* 第二行,執行SQL查詢的連接信息,用戶和連接IP

* 第三行,記錄了一些我們比較有用的信息,如下解析

    Query_time,這條SQL執行的時間,越長則越慢

    Lock_time,在MySQL服務器階段(不是在存儲引擎階段)等待表鎖時間

    Rows_sent,查詢返回的行數

    Rows_examined,查詢檢查的行數,越長就當然越費時間

* 第四行,設置時間戳,沒有實際意義,只是和第一行對應執行時間。

* 第五行及後面所有行(第二個# Time:之前),執行的sql語句記錄信息,因爲sql可能會很長。

    1. 分析慢查詢日誌
      1. MySQL自帶的mysqldumpslow

[root@localhost mysql]# mysqldumpslow /var/lib/mysql/localhost-slow.log

常用參數說明:

  1. -s:是表示按照何種方式排序

      

  1. -t:是top n的意思,即爲返回前面多少條的數據
  2. -g:後邊可以寫一個正則匹配模式,大小寫不敏感的

 

示例:

得到按照時間排序的前10條裏面含有左連接的查詢語句。

mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/localhost_slow.log

 

      1. 使用mysqlsla 工具
  1. mysqlsla工具,功能非常強大。數據報表,非常有利於分析慢查詢的原因,包括執行頻率,數據量,查詢消耗等。
  2. 不過此工具已停止維護,項目 github 介紹頁面推薦使用 percona-toolkit,下面有介紹。

mysqlsla -lt /var/log/mysql/slow.log

      1. 使用percona-toolkit工具

percona-toolkit是一組高級命令行工具的集合,可以查看當前服務的摘要信息,磁盤檢測,分析慢查詢日誌,查找重複索引,實現表同步等等。

  1. 下載

https://www.percona.com/downloads/percona-toolkit/3.0.11/binary/tarball/percona-toolkit-3.0.11_x86_64.tar.gz

 

  1. 安裝

       * tar -xf percona-toolkit-3.0.11_x86_64.tar.gz

       * cd percona-toolkit-3.0.11

       * perl Makefile.PL

       * make

       * make install

  1. 調錯

Can't locate ExtUtils/MakeMaker.pm in @INC 錯誤的解決方式:

* yum install -y perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

Can't locate Time/HiRes.pm in @INC

* yum install -y perl-Time-HiRes

  1. 使用pt-query-digest查看慢查詢日誌

pt-query-digest /var/lib/mysql/localhost-slow.log

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章