程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL 慢查詢,MySQL

MySQL 慢查詢,MySQL

編輯:MySQL綜合教程

MySQL 慢查詢,MySQL


簡述:

分析MySQL語句查詢性能的方法除了使用 EXPLAIN 輸出執行計劃,還可以讓MySQL記錄下查詢 超過指定時間的語句,我們將超過指定時間的SQL語句查詢稱為“慢查詢”。

它能記錄下所有執行超過 long_query_time時間的SQL語句, 幫你找到執行慢的SQL,  方便我們對這些SQL進行優化。

在優化MySQL時,通常需要對數據庫進行分析,常見的分析手段有 慢查詢日志,EXPLAIN 分析查詢, profiling分析 以及 show命令查詢系統狀態及系統變量,通過定位分析性能的瓶頸,才能更好的優化數據庫系統的性能。

思路:

--> 分析慢查詢日志 --> 查看表結構、表狀態 --> 查看表索引 --> 分析sql語句 --> explain --> 修改sql語句 --> 驗證修改結果

慢查詢日志配置:

1、在my.ini配置文件中添加以下選項:

log-slow-queries=master-0-slow.log 慢查詢日志位置

log-queries-not-using-indexes=on  沒有使用索引的Query也計入慢查詢日志

long_query_time=1  當Query語句大於1秒時記入慢查詢日志

--> linux下mysql開啟慢查詢方法:

mysql在linux系統中的配置文件一般是my.cnf,我的路徑是/etc/my.cnf,你根據自己編譯安裝的路徑去查找 vi /etc/my.cnf

一樣是在[mysqld]下面加上:

log-slow-queries=/var/lib/mysql/slowquery.log

long_query_time=2

log-queries-not-using-indexes

這裡就不再解釋了,加上後重啟mysql,就可以到/var/lib/mysql下看是否有slowquery.log生成了. cd /var/lib/mysql/

2、在命令窗口通過命令查詢慢查詢配置信息

① 查看Query語句執行時間大於多少秒計入慢查詢日志

 

通過命令行動態配置:MySQL> set long_query_time=1;

② 查看慢查詢日志是否打開與存放路徑

 

通過命令行動態配置:MySQL> set global slow_query_log='ON'

慢查詢日志格式

# Time: 120331 10:05:48

# User@Host: root[root] @ 91SK-B49337164E [10.10.10.99]

# Query_time: 14.031250  Lock_time: 0.218750 Rows_sent: 0  Rows_examined: 90785 SET timestamp=1333159548; delete from orderinfo;

這是慢查詢日志中的一條,用了14.031250秒,鎖了0.218750秒,返回0行,一共查了90785行

通過mysqldumpslow命令查看慢查詢日志:

1、 由於mysql自帶命令mysqldumpslow.pl使用的是perl腳本,所以需要安裝perl環境。下載ActivePerl.exe安裝包並進行安裝。

2、在DOS命令行下執行mysqldumpslow命令

 

使用mysqldumpslow命令在f:\master-0-slow.log慢查詢日志中查找日志中記錄次數最多的前10條SQL語句。並存放到f:\master-slow-0.txt文件中。

mysqldumpslow命令解析:

-s, 表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar,表示相應的倒敘;

-t, 是top n的意思,即為返回前面多少條的數據;

-g, 後邊可以寫一個正則匹配模式,大小寫不敏感的;

例如:返回記錄集最多的10個查詢。

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved