網站開啟慢之學習mysql慢查詢和linux top命令
今天在公司,休息的時候開啟自家網站看了看,逛到一個商品列表頁的時候,感覺很慢,遂覺得哪裡出了問題。
這時,我不知道什麼情況,不過有種感覺,覺得應該是sql問題,這可能就是經驗問題,於是ssh 到伺服器。
top 命令
一看嚇一跳 mysql CPU% 高達 300% 這尼瑪坑定就是sql語句問題。
於是,想找sql語句問題 , 不過又不想去程式碼裡找,腫麼辦呢?
想起了曾經看的mysql慢查詢的文章,覺得這是個好方法。
在mysql配置檔案my.cnf中增加
log-slow-queries=/var/lib/mysql/slowquery.log (指定日誌檔案存放位置,可以為空,系統會給一個預設的檔案host_name-slow.log)
long_query_time=2 (記錄超過的時間,預設為10s)
log-queries-not-using-indexes (log下來沒有使用索引的query,可以根據情況決定是否開啟)
log-long-format (如果設定了,所有沒有使用索引的查詢也將被記錄)
當然上面是要重啟mysql才能生效,這尼瑪 , 線上正在跑 腫麼能隨便重啟mysql呢,再一想 , 這問題 我都能想到,肯定有人早就想到,於是又找資料去臨時檢視慢查詢
首先通過客戶端連線到Mysql伺服器,然後輸入下面的語句:
set global log_slow_queries = om;
set global long_query_time = 3;
這樣MySQL就會把耗時>=3秒的SQL語句給記錄下來,並輸出到一個慢查詢日誌檔案中。問題來了,這個慢查詢日誌檔案在什麼地方呢?如下,在MYSQL客戶端中執行下面的語句:
show variables like 'slow_query_log_file';
就會看到MySQL慢查詢日誌檔案位置。
哇咔咔,順利找出調皮的sql語句,或說寫子查詢的時候要加條數限制的啊 尼瑪 桑不起啊