mysql慢查詢和php-fpm慢日志


MySQL慢查詢

    在web開發中,我們經常會寫出一些SQL語句,一條糟糕的SQL語句可能讓你的整個程序都非常慢,超過10秒一般用戶就會選擇關閉網頁,如何優化SQL語句將那些運行時間 比較長的SQL語句找出呢?MySQL給我們提供了一個很好的功能,那就是慢查詢!所謂的慢查詢就是通過設置來記錄超過一定時間的SQL語句!

 

PHP-FPM慢日志

    php-fpm慢日志slowlog設置可以讓開發者很好的查找哪些php進程速度過慢而導致的網站問題,讓開發者方便的找到問題的所在。該方法同樣適用於排查nginx的500、502問題根源,當nginx收到如上錯誤碼時,可以確定后端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。

 

MySQL慢查詢的不足

    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這樣的查詢也會被記錄下來。

 

1、如何開啟慢查詢?  

    首先我們先查看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;

          

  測試

    1、查看生成的慢日志記錄   此時是空的沒有記錄

      cat mysql-slow.log 

        

    2、執行一條超過設置時間的sql語句 在查看是否被記錄

      如:select sleep(1);     再去查看慢日子記錄

         

    到此mysql慢查詢就OK了。

2、 如何開啟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)

    具體開啟步驟如下:

      

結束。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM