1. 程式人生 > >MySQL優化:使用慢查詢日誌定位效率較低的SQL語句

MySQL優化:使用慢查詢日誌定位效率較低的SQL語句

轉載地址:http://database.51cto.com/art/201106/271808_all.htm

MySQL通過慢查詢日誌定位執行效率較低的SQL語句,當慢查詢日誌的內容過多時,通過mysqldumpslow工具(MySQL客戶端安裝自帶)來對慢查詢日誌進行分類彙總。

MySQL通過慢查詢日誌定位那些執行效率較低的SQL 語句,用--log-slow-queries[=file_name]選項啟動時,mysqld 會寫一個包含所有執行時間超過long_query_time 秒的SQL語句的日誌檔案,通過檢視這個日誌檔案定位效率較低的SQL 。

慢查詢日誌在查詢結束以後才記錄,所以在應用反映執行效率出現問題的時候查詢慢查詢日誌並不能定位問題,可以使用show processlist命令檢視當前MySQL在進行的執行緒,包括

執行緒的狀態、是否鎖表等,可以實時地檢視SQL 的執行情況,同時對一些鎖表操作進行優化。

下面我們舉例說明一下,如何通過慢查詢日誌定位執行效率低的SQL 語句:

開啟慢查詢日誌,配置樣例:

  1. [mysqld]  
  2. log-slow-queries 

在my.cnf 配置檔案中增加上述配置項並重啟mysql服務,這時mysql慢查詢功能生效。慢查詢日誌將寫入引數DATADIR(資料目錄)指定的路徑下,預設檔名是host_name-slow.log 。

和錯誤日誌、查詢日誌一樣,慢查詢日誌記錄的格式也是純文字,可以被直接讀取。下例中演示了慢查詢日誌的設定和讀取過程。

首先查詢一下 long_query_time 的值 。

  1. mysql> show variables like 'long%';  
  2. +-----------------+-------+  
  3. | Variable_name | Value |  
  4. +-----------------+-------+  
  5. | long_query_time | 10 |  
  6. +-----------------+-------+  
  7. 1 row in set (0.00 sec) 

為了方便測試,將修改慢查詢時間為5秒。

  1. mysql> set long_query_time=5;  
  2. Query OK, 0 rows affected (0.02 sec) 

依次執行下面兩個查詢語句。

第一個查詢因為查詢時間低於5 秒而不會出現在慢查詢日誌中:

  1. mysql> select count(*) from order2008;  
  2. +----------+  
  3. | count(*) |  
  4. +----------+  
  5. | 208 |  
  6. +----------+  
  7. 1 row in set (0.00 sec) 

第二個查詢因為查詢時間大於5 秒而應該出現在慢查詢日誌中:

  1. mysql> select count(*) from t_user;  
  2. +----------+  
  3. | count(*) |  
  4. +----------+  
  5. | 6552961 | 

檢視慢查詢日誌。

  1. [[email protected] mysql]# more localhost-slow.log  
  2. # Time: 081026 19:46:34  
  3. [email protected]: root[root] @ localhost []  
  4. # Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961  
  5. select count(*) from t_user; 

從上面日誌中,可以發現查詢時間超過5 秒的SQL,而小於5秒的則沒有出現在此日誌中。

如果慢查詢日誌中記錄內容很多,可以使用mysqldumpslow工具(MySQL客戶端安裝自帶)來對慢查詢日誌進行分類彙總。下例中對日誌檔案mysql_master-slow.log進行了分類彙總,只顯示彙總後摘要結果:

  1. [[email protected]_master mysql_data]#mysqldumpslow mysql_master-slow.log  
  2. Reading mysql slow query log from mysql_master-slow.log  
  3. Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master  
  4. select count(N) from t_user; 

對於 SQL 文字完全一致,只是變數不同的語句,mysqldumpslow 將會自動視為同一個語句進行統計,變數值用N來代替。這個統計結果將大大增加使用者閱讀慢查詢日誌的效率,並迅速定位系統的SQL 瓶頸

注意:慢查詢日誌對於我們發現應用中有效能問題的SQL很有幫助,建議正常情況下,開啟此日誌並經常檢視分析。


相關推薦

MySQL優化使用查詢日誌定位效率SQL語句

轉載地址:http://database.51cto.com/art/201106/271808_all.htm MySQL通過慢查詢日誌定位執行效率較低的SQL語句,當慢查詢日誌的內容過多時,通過mysqldumpslow工具(MySQL客戶端安裝自帶)來對慢查詢日誌

MySQL (一) —— MySQL效能優化查詢日誌

                        &nbs

使用Mysql查詢日誌對有效率問題的SQL進行監控

問題 使用 寫入 glob 成了 show 單位 命令 lob 輸入命令:show variables like ‘slow%‘ 可以發現 slow_query_log 為 OFF(默認),表示未開啟慢查詢日誌 slow_query_lo

開啟MYSQL查詢日誌,監控有效率問題的SQL

操作步驟 首先使用使用者登入linux客戶端,執行命令 mysql -u mjb -p, mjb是資料庫使用者名稱,系統會提示輸入密碼,輸入密碼回車,登入成功 輸入命令show variables like 'slow_query_log', 頁面會顯示是

EF6學習筆記十原始查詢,在EF中使用SQL語句

麻將 list() eat write 我們 ace fir esp etime 要專業系統地學習EF前往《你必須掌握的Entity Framework 6.x與Core 2.0》這本書的作者(汪鵬,Jeffcky)的博客:https://www.cnblogs.com/C

mysql數據庫優化之開啟查詢日誌

查詢日誌 long 沒有 sin 進入 src mage image 查詢 進入mysql數據庫,使用 show variables like ‘slow_query_log‘; 查看是否開啟了慢查詢日誌 value值為OFF,則慢查詢日誌沒有開啟,在

mysql優化專題」什麽是查詢?如何通過查詢日誌優化?(10)

logs stat bst 二進制日誌 help use dumps 根據 客戶 日誌就跟人們寫的日記一樣,記錄著過往的事情。但是人的日記是主觀的(記自己想記的內容),而數據庫的日誌是客觀的,根據記錄內容分為以下好幾種日誌(技術文): a、錯誤日誌:記錄啟動、運行或停止my

mysql 優化之開啟查詢日誌並分析原因

轉載:https://blog.csdn.net/haiqiao_2010/article/details/25138099 第一步.開啟mysql慢查詢 方式一:修改配置檔案 Windows:Windows 的配置檔案

MySQL優化(四) 查詢定位優化

啟動 strong ptime pan bsp 回話 query plain ont 一、SQL語句優化的一般步驟: (1)通過 show status 命令了解各種 SQL 的執行效率; (2)定位執行效率較低的 SQL 語句(重點是 Select); (3)通過 exp

mysql效能優化-查詢分析、優化索引和配置 (查詢日誌,explain,profile)

一、優化概述 二、查詢與索引優化分析 1效能瓶頸定位 Show命令 慢查詢日誌 explain分析查詢 profiling分析查詢 2索引及查詢優化 三、配置優化 1)      max_connections 2)      back_log 3)      interactive_timeout 4)

mysql優化(1)show命令 查詢日誌 explain profiling

目錄 一、優化概述 二、查詢與索引優化分析 1效能瓶頸定位 Show命令 慢查詢日誌 explain分析查詢 profiling分析查詢 2索引及查詢優化 三、配置優化 1)      max_connections 2)      back_lo

學會讀懂 MySql查詢日誌

操作 get time user net 假死 幸運 存在 報錯 在前邊的博客《何時、怎樣開啟 MySql 日誌?》中,我們了解到了怎樣啟用 MySql 的慢查詢日誌。今天我們來看一下怎樣去讀懂這些慢查詢日誌。在跟蹤慢查詢日誌之前。首先你得保證最少發生過一次慢查詢。假設

mysql開啟binlog日誌查詢日誌

logs launch style spa 簡單 bsp mys 自動 文件的 1)首先,為什麽要開啟binlog日誌和慢查詢日誌呢? binlog日誌會記錄下數據庫的所以增刪改操作,當不小心刪除、清空數據,或數據庫系統出錯,這時候就可以使用binlog日誌來還原數據庫,

MySQL查詢日誌相關的配置和使用。

其他 進制 數據 mps 執行 不存在 時間 tex http MySQL慢查詢日誌提供了超過指定時間閾值的查詢信息,為性能優化提供了主要的參考依據,是一個非常實用的功能,MySQL慢查詢日誌的開啟和配置非常簡單,可以指定記錄的文件(或者表),超過的時間閾值等就可以記

mysql查詢日誌

微秒 min rip uos pre shel file 缺省 -o mysql慢查詢日誌是mysql提供的一種日誌記錄,它用來記錄sql執行超過long_query_time秒的SQL語句。long_query_time的最小值和默認值分別為0和10。 意思是運行超過10

MySQL查詢(二) - pt-query-digest詳解查詢日誌 pt-query-digest 日誌分析

進行 www summary exec 存儲 response 狀態 rep ota 隨筆 - 66 文章 - 0 評論 - 19 MySQL慢查詢(二) - pt-query-digest詳解慢查詢日誌 一、簡介 pt-que

mysql開啟查詢日誌

nbsp time div 慢查詢日誌 global glob 技術 .com http 1.查看是否開啟了慢查詢日誌 2.查看log_queries_not_using_indexes是否開啟 如果沒有開啟,開啟 set global log_queries_not_

Mysql中錯誤日誌、binlog日誌查詢日誌查詢日誌簡單介紹

安全 view 記錄 bin 嚴重 like mod ng- ror 前言 數據庫的日誌是幫助數據庫管理員,追蹤分析數據庫以前發生的各種事件的有力根據。mysq

MySql5.5 SQL優化 查詢日誌存儲

dumps log_file 路徑 home mysql 索引 格式 ont 設置 一、MySql的慢查詢日誌的開啟和存儲 1、查看是否把沒有使用索引的SQL記錄到慢查詢日誌中,查看 log_queries_not_using_indexes 變量; show VARIA

Mysql 查詢日誌

nbsp 分析 鎖定 永久 工具 多少 set 通過 時間 查看狀態 SHOW VARIABLES LIKE ‘%slow_query_log%‘ 開啟 set global show_query_log=1 (重啟後失效) 永久生效 修改my.cnf 加