MySQL慢查詢php
在web開發中,咱們常常會寫出一些SQL語句,一條糟糕的SQL語句可能讓你的整個程序都很是慢,超過10秒通常用戶就會選擇關閉網頁,如何優化SQL語句將那些運行時間 比較長的SQL語句找出呢?MySQL給咱們提供了一個很好的功能,那就是慢查詢!所謂的慢查詢就是經過設置來記錄超過必定時間的SQL語句!mysql
PHP-FPM慢日誌nginx
php-fpm慢日誌slowlog設置可讓開發者很好的查找哪些php進程速度過慢而致使的網站問題,讓開發者方便的找到問題的所在。該方法一樣適用於排查nginx的500、502問題根源,當nginx收到如上錯誤碼時,能夠肯定後端php-fpm解析php出了某種問題,好比,執行錯誤,執行超時。web
MySQL慢查詢的不足sql
1.MySQL5.0版本, long_query_time時間粒度不夠細,最小值爲1秒。對於高併發性能的網頁腳本而言,1秒出現的意義不大。即出現1秒的查詢比較少。直到mysql5.1.21才提供更細粒度的long_query_time設定.後端
2.不能將服務器執行的全部查詢記錄到慢速日誌中。雖然MySQL普通日誌記錄了全部查詢,可是它們是解析查詢以前就記錄下來了。這意味着普通日誌沒辦法包含諸如執行時間,鎖表時間,檢查行數等信息。服務器
3.若是開啓了log_queries_not_using_indexes選項,slow query日誌會充滿過多的垃圾日誌記錄,這些快且高效的全表掃描查詢(表小)會沖掉真正有用的slow queries記錄。好比select * from category這樣的查詢也會被記錄下來。併發
一、如何開啓慢查詢? 函數
首先咱們先查看MYSQL服務器的慢查詢狀態是否開啓.高併發
mysql>show variables like '%quer%';
開啓慢查詢很是簡單, 操做以下:
方法一
vi /etc/my.cnf 注:my.cnf是mysql的配置文件
在mysqld下方加入慢查詢的配置語句(必定要在[mysqld]的下方加入)
[mysqld]
log-slow-queries = /var/lib/mysql/mysql-slow.log
long_query_time = 1
保存退出 重啓mysql
log-slow-queries : 表明MYSQL慢查詢的日誌存儲目錄, 此目錄文件必定要有寫權限。
long_query_time: sql最長執行時間。
方法二
在mysql命令行下執行以下操做:
set global slow_query_log=ON;
set global long_query_time=1;
測試
一、查看生成的慢日誌記錄 此時是空的沒有記錄
cat mysql-slow.log
二、執行一條超過設置時間的sql語句 在查看是否被記錄
如:select sleep(1); 再去查看慢日子記錄
到此mysql慢查詢就OK了。
二、 如何開啓php-fpm慢日誌?
php-fpm.conf的配置文件中有一個參數request_slowlog_timeout是這樣描述的:
當request_slowlog_timeout 設爲一個具體秒時request_slowlog_timeout =5,表示若是哪一個腳本執行時間大於5秒,會記錄這個腳本到慢日誌文件中
request_slowlog_timeout =0表示關閉慢日誌輸出。
慢日誌文件位置默認在php的安裝目錄下的log文件夾中,能夠經過修改slowlog = log/$pool.log.slow參數來指定。
php-fpm慢日誌的例子,慢日誌會記錄下進程號,腳本名稱,具體哪一個文件哪行代碼的哪一個函數執行時間過長。
request_slowlog_timeout 和 slowlog須要同時設置,開啓request_slowlog_timeout的同時須要開啓 slowlog
慢日誌路徑須要手動建立 (slowlog)
具體開啓步驟以下:
結束。