mysql慢查詢和php-fpm慢日誌

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)

    具體開啓步驟以下:

      

結束。

相關文章
相關標籤/搜索