如何在mysql查找效率慢的SQL語句呢?這可能是困然很多人的一個問題,MySQL通過慢查詢日志定位那些執行效率較低的SQL 語句,用--log-slow-queries[=file_name]選項啟動時,mysqld 會寫一個包含所有執行時間超過long_query_time 秒的SQL語句的日志文件,通過查看這個日志文件定位效率較低的SQL 。下面介紹MySQL中如何查詢慢的SQL語句
一、MySQL數據庫有幾個配置選項可以幫助我們及時捕獲低效SQL語句
1,slow_query_log
這個參數設置為ON,可以捕獲執行時間超過一定數值的SQL語句。
2,long_query_time
當SQL語句執行時間超過此數值時,就會被記錄到日志中,建議設置為1或者更短。
3,slow_query_log_file
記錄日志的文件名。
4,log_queries_not_using_indexes
這個參數設置為ON,可以捕獲到所有未使用索引的SQL語句,盡管這個SQL語句有可能執行得挺快。
二、檢測mysql中sql語句的效率的方法
1、通過查詢日志
(1)、Windows下開啟MySQL慢查詢
MySQL在Windows系統中的配置文件一般是是my.ini找到[mysqld]下面加上
代碼如下
log-slow-queries = F:/MySQL/log/mysqlslowquery。log
long_query_time = 2
(2)、Linux下啟用MySQL慢查詢
MySQL在Windows系統中的配置文件一般是是my.cnf找到[mysqld]下面加上
代碼如下
log-slow-queries=/data/mysqldata/slowquery。log
long_query_time=2
說明
log-slow-queries = F:/MySQL/log/mysqlslowquery。
為慢查詢日志存放的位置,一般這個目錄要有MySQL的運行帳號的可寫權限,一般都將這個目錄設置為MySQL的數據存放目錄;
long_query_time=2中的2表示查詢超過兩秒才記錄;
2.show processlist 命令
WSHOW PROCESSLIST顯示哪些線程正在運行。您也可以使用mysqladmin processlist語句得到此信息。
各列的含義和用途:
ID列
一個標識,你要kill一個語句的時候很有用,用命令殺掉此查詢 /*/mysqladmin kill 進程號。
user列
顯示單前用戶,如果不是root,這個命令就只顯示你權限范圍內的sql語句。
host列
顯示這個語句是從哪個ip的哪個端口上發出的。用于追蹤出問題語句的用戶。
db列
顯示這個進程目前連接的是哪個數據庫。
command列
顯示當前連接的執行的命令,一般就是休眠(sleep),查詢(query),連接(connect)。
time列
此這個狀態持續的時間,單位是秒。
state列
顯示使用當前連接的sql語句的狀態,很重要的列,后續會有所有的狀態的描述,請注意,state只是語句執行中的某一個狀態,一個 sql語句,以查詢為例,可能需要經過copying to tmp table,Sorting result,Sending data等狀態才可以完成
info列
新聞熱點
疑難解答