萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL慢查詢 mysqldumpslow分析方法

MySQL慢查詢 mysqldumpslow分析方法

mysql教程優化的第一步應該做的就是排查問題,找出瓶頸,而通常情況下的瓶頸和問題都需要通過觀察mysql的運行情況來進行分析,《查看mysql運行狀況》這篇文章羅列了一些常用的查看mysql運行信息的方式。

而對於大多數的程序員來說,最容易發現並解決的問題就是mysql的慢查詢或者沒有利用索引的查詢,所以這裡主要給大家介紹如何利用官方的mysqldumps教程low工具方便的查看這些信息。如何打開mysql的慢查詢,請點擊


最簡單的方式,在php教程myadmin直接點擊狀態查看,詳細如下圖。

phpmyadmin查看mysql運行狀況

這查看的是mysql的一些運行狀況數值,這種方式被大多數系統管理員所不齒,因為專業的mysql服務器很少有能通過phpmyadmin訪問的,後面會介紹其他查看方式,但是phpmyadmin提供優化建議還是很具有指導性和參考性的。

show status
直接在命令行下登陸mysql運行show status;查詢語句,詳細如下圖

同樣的語句還有show variables;,show status是查看mysql運行情況,和上面那種通過pma查看到的信息基本類似。

show variables
show variables是查看mysql的配置參數,還可以使用類似show variables like ‘key%’

show processlist
show processlist是查看當前正在進行的進程,對於有鎖表等情況的排查很有用處。一般情況下,打開mysql的慢查詢記錄同樣有利於排查。

show open tables
show open tables是顯示當前已經被打開的表列表。

mysqladmin status
使用mysql自帶的mysqladmin 工具查看status,使用以下命令
mysqladmin -uroot –password=’password’ status
顯示的結果如下:
uptime: 87117 threads: 1 questions: 5481626 slow queries: 16 opens: 2211 flush tables: 1 open tables: 512 queries per second avg: 62.923
另外可以添加 -i 5 參數,讓其每五秒自動刷新之。
mysqladmin -uroot –password=’password’ status -i 5

mysqladmin extended-status
同樣的可以使用mysqladmin -uroot –password=’password’ extended-status來查看更多的mysql運行信息,這種方式和第一種查看的信息基本一樣。


關於mysql運行慢查看方法

打開mysql慢查詢
mysql慢查詢記錄日志對於跟蹤php+mysql體系下的mysql負載調優問題很有用處,比如安裝了很多discuz!插件的用戶,這樣可以大概排查出那些插件有代碼問題。其實啟用mysql的慢查詢日志很簡單,只需要在mysql的配置文件裡添加log-slow-queries和long_query_time兩個參數即可。

今天有個朋友問我,就順帶記錄上來。更多的mysql優化信息可以查看這裡:http://www.ccvita.com/category/mysql

windows下開啟mysql慢查詢
mysql在windows系統中的配置文件一般是是my.ini找到[mysqld]下面加上
log-slow-queries = f:mysqllogmysqlslowquery.log
long_query_time = 2


linux下啟用mysql慢查詢
mysql在windows系統中的配置文件一般是是my.cnf找到[mysqld]下面加上
log-slow-queries=/data/mysqldata/slowquery.log
long_query_time=2

注意
log-slow-queries = f:mysqllogmysqlslowquery.log為慢查詢日志存放的位置,一般這個目錄要有mysql的運行帳號的可寫權限,一般都將這個目錄設置為mysql的數據存放目錄;
long_query_time=2中的2表示查詢超過兩秒才記錄;

2009年09月24日更新
在my.cnf或者my.ini中添加log-queries-not-using-indexes參數,表示記錄下沒有使用索引的查詢。比如:
log-slow-queries=/data/mysqldata/slowquery.log
long_query_time=2
log-queries-not-using-indexes

 

 

mysqldumpslow命令
/path/mysqldumpslow -s c -t 10 /database/mysql/slow-log
這會輸出記錄次數最多的10條sql語句,其中:

-s, 是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar,表示相應的倒敘;
-t, 是top n的意思,即為返回前面多少條的數據;
-g, 後邊可以寫一個正則匹配模式,大小寫不敏感的;
比如
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回記錄集最多的10個查詢。
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
得到按照時間排序的前10條裡面含有左連接的查詢語句。

小結
使用mysqldumpslow命令可以非常明確的得到各種我們需要的查詢語句,對mysql查詢語句的監控、分析、優化是mysql優化的第一步,也是非常重要的一步

copyright © 萬盛學電腦網 all rights reserved