<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Mysql開啟慢SQL并分析原因

        來源:懂視網 責編:小采 時間:2020-11-09 21:16:01
        文檔

        Mysql開啟慢SQL并分析原因

        Mysql開啟慢SQL并分析原因:第一步.開啟mysql慢查詢 方式一:修改配置文件 Windows:Windows 的配置文件為 my.ini,一般在 MySQL 的安裝目錄下或者 c:\Windows 下。 Linux:Linux 的配置文件為 my.cnf ,一般在 /etc 下 在 my.ini 增加幾行: [mysqlld] l
        推薦度:
        導讀Mysql開啟慢SQL并分析原因:第一步.開啟mysql慢查詢 方式一:修改配置文件 Windows:Windows 的配置文件為 my.ini,一般在 MySQL 的安裝目錄下或者 c:\Windows 下。 Linux:Linux 的配置文件為 my.cnf ,一般在 /etc 下 在 my.ini 增加幾行: [mysqlld] l

        第一步.開啟mysql慢查詢

        方式一:修改配置文件

        Windows:Windows 的配置文件為 my.ini,一般在 MySQL 的安裝目錄下或者 c:\Windows 下。

        Linux:Linux 的配置文件為 my.cnf ,一般在 /etc 下

        在 my.ini 增加幾行:

        [mysqlld] 
        long_query_time=2 
        #5.0、5.1等版本配置如下選項 
        log-slow-queries="mysql_slow_query.log" 
        #5.5及以上版本配置如下選項 
        slow-query-log=On 
        slow_query_log_file="mysql_slow_query.log" 
        log-query-not-using-indexes 

        第一句使用來定義查過多少秒的查詢算是慢查詢,我這里定義的是2秒

        第二句使用來定義慢查詢日志的路徑(因為是windows,所以不牽涉權限問題)

        第三句就是記錄下沒有使用索引的query

        第二步:查看關于慢查詢的狀態

        方式二:通過MySQL數據庫開啟慢查詢

        上文的配置需要重啟mysql server進程mysqld才會生效。但是很多時候,尤其是產品運營環境,不希望每次修改都需要重新啟動mysql服務器,也希望能在某些特定時間記 錄。MySQL5.1給我們提供了更為靈活的運行時控制,使得你不必重新啟動mysql服務器,也能選擇性地記錄或者不記錄某些slow queries。

        MySQL5.1中,提供了全局變量slow_query_logslow_query_log_file可以靈活地控制enable/disable慢查詢。同時可以通過long_query_time設置時間

        #//啟用slow query記錄
        #注意:設置了slow_query_log全局變量, log_slow_queries也會隱性地跟著改變
        mysql>set global slow_query_log=ON

        不幸運的是,在MySQL5.0并沒有提供類似的全局變量來靈活控制,但是我們可以通過將long_query_time設置得足夠大來避免記錄某些查詢語句。比如

        mysql>set global long_query_time = 3600;
        
        mysql>set global log_querise_not_using_indexes = ON;

        MySQL5.0, 不關服務的情況下,希望不記錄日志的辦法是將日志文件成為/dev/null的符號鏈接(symbolic link)。注意:你只需要在改變后運行FLUSH LOGS以確定MYSQL釋放當前的日志文件描述符,重新把日志記錄到/dev/null

        和MySQL5.0不同,MySQL5.1可以在運行時改變日記行為,將日志記錄到數據庫表中。只要將mysql全局變量log_output設置為 TABLE即可。MySQL會將日志分別記錄到表mysql.gengera_log和mysql.slow_log二張表中。但是,我們推薦將日志記錄 在日記文件中。

        mysql> show variables like ‘log_output'\G
        Variable_name: log_output
        Value: FILE
        mysql>set global log_output='table';

        缺陷與審記

        雖然記錄了slow query能夠幫助你優化產品。但是MySQL目前版本,還有幾大蹩足的地方。

      1. 1.MySQL5.0版本, long_query_time時間粒度不夠細,最小值為1秒。對于高并發性能的網頁腳本而言,1秒出現的意義不大。即出現1秒的查詢比較少。直到mysql5.1.21才提供更細粒度的long_query_time設定.
      2. 2.不能將服務器執行的所有查詢記錄到慢速日志中。雖然MySQL普通日志記錄了所有查詢,但是它們是解析查詢之前就記錄下來了。這意味著普通日志沒辦法包含諸如執行時間,鎖表時間,檢查行數等信息。
      3. 3.如果開啟了log_queries_not_using_indexes選項,slow query日志會充滿過多的垃圾日志記錄,這些快且高效的全表掃描查詢(表小)會沖掉真正有用的slow queries記錄。比如select * from category這樣的查詢也會被記錄下來。
      4. 通過microslow-patch補丁可使用更細的時間粒度,和記錄所有執行過的sql語句。不過,使用這個補訂不得不自己編譯MySQL,出于穩定性考濾,我們推薦在開發測試環境,可以打上這個補丁,享受這個補丁帶來的便利。在運營環境盡量不要這么做…

        第二步.驗證慢查詢是否開啟

        執行如下SQL語句來查看mysql慢查詢的狀態

        執行結果會把是否開啟慢查詢、慢查詢的秒數、慢查詢日志等信息打印在屏幕上。

        /*查看慢查詢時間 */ 
        show variables like "long_query_time";默認10s 
        /*查看慢查詢配置情況 */ 
        show status like "%slow_queries%"; 
        /*查看慢查詢日志路徑 */ 
         show variables like "%slow%"; 

        第三步:執行一次慢查詢操作

        其實想要執行一次有實際意義的慢查詢比較困難,因為在自己測試的時候,就算查詢有20萬條數據的海量表,也只需要0.幾秒。我們可以通過如下語句代替:

        SELECT SLEEP(10);

        第四步:查看慢查詢的數量

        通過如下sql語句,來查看一共執行過幾次慢查詢:

        show global status like '%slow%';

        mysql日志的配置:

        注意:這些日文件在mysql重啟的時候才會生成 
        #記錄所有sql語句 
        log=E:/mysqllog/mysql.log 
        #記錄數據庫啟動關閉信息,以及運行過程中產生的錯誤信息 
        log-error=E:/mysqllog/myerror.log 
        # 記錄除select語句之外的所有sql語句到日志中,可以用來恢復數據文件 
        log-bin=E:/mysqllog/bin 
        #記錄查詢慢的sql語句 
        log-slow-queries=E:/mysqllog/slow.log 
        #慢查詢時間 
        long_query_time=2 

        第四步:分析慢查詢日志

        方式一:通過工具分析

        MySQL自帶了mysqldumpslow工具用來分析slow query日志,除此之外,還有一些好用的開源工具。比如MyProfi(下載地址:http://sourceforge.net/projects/myprofi/)、mysql-log-filter,當然還有mysqlsla

        以下是mysqldumpslow常用參數說明,詳細的可應用mysqldumpslow -help查詢。

      5. -s,是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序(從大到小),ac、at、al、ar表示相應的倒敘。
      6. -t,是top n的意思,即為返回前面多少條數據。
      7. -g,后邊可以寫一個正則匹配模式,大小寫不敏感。
      8. 接下來就是用mysql自帶的慢查詢工具mysqldumpslow分析了(mysql的bin目錄下),我這里的日志文件名字是host-slow.log。

        列出記錄次數最多的10個sql語句

        mysqldumpslow -s c -t 10 host-slow.log

        列出返回記錄集最多的10個sql語句

        mysqldumpslow -s r -t 10 host-slow.log

        按照時間返回前10條里面含有左連接的sql語句

        mysqldumpslow -s t -t 10 -g "left join" host-slow.log

        使用mysqldumpslow命令可以非常明確的得到各種我們需要的查詢語句,對MySQL查詢語句的監控、分析、優化起到非常大的幫助。

        方式二:直接分析mysql慢查詢日志

        日志部分內容如下:

        # Time: 121017 17:38: 
        # User@Host: root[root] @ localhost [127.0.0.1] 
        # Query_time: 3.794217 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 4194304 
        SET timestamp=1350466734; 
        select * from wei where text='orange'; 
        # Time: 121017 17:46:22 
        # User@Host: root[root] @ localhost [127.0.0.1] 
        # Query_time: 3.819219 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 4194304 
        SET timestamp=1350467182; 
        select * from wei where text='xishizhaohua'; 

        其實定位到了慢查詢語句就已經完成了一大不了,執行explain或者desc命令查看慢查詢語句,如下圖:

        問題很明顯,解決方式也很明顯,建索引了。

        mysql> create index text_index on wei(text); 
        Query OK, 4194304 rows affected (1 min 58.07 sec) 
        Records: 4194304 Duplicates: 0 Warnings: 0 

        然后在執行查詢操作,用時明顯少了很多。

        mysql> select * from wei where text='orange'; 
        +---------+--------+ 
        | id | text | 
        +---------+--------+ 
        | 4103519 | orange | 
        +---------+--------+ 
        1 row in set (0.33 sec) 

        Slow Query日志,雖然幫助你記錄了那些執行過了的SQL語句。但它不是萬能的,意義可能沒有你想象的那么大。它只告訴了你哪些語句慢,但是為什么慢?具體 原因,還是需要你自己去分析,不斷的調試。也許,你只需要換一條更有效的sql語句,也許你只需簡單地增加一個索引,但也有可能你需要調整你應用程序的設 計方案。比如,上面那條語句是很明顯,它檢查了600多萬行數據。不幸的是,并不是每條語句都這么明顯。也許還有別的原因,比如:

      9. *鎖表了,導致查詢處于等態狀態。lock_time顯示了查詢等待鎖被翻譯的時間
      10. *數據或索引沒有被緩存。常見于第一次啟動服務器或者服務器沒有調優
      11. *備份數據庫,I/O變慢
      12. *也許同時運行了其它的查詢,減少了當前查詢
      13. 所以,不要過于緊張日志文件某條記錄,而應該理性地審記,找出真正的原因。如果經常出現的slow query需要特別注意。如果個別出現,則做一些常規檢查即可。我們建議,統計并且形成基準報告,進行比較排除,比胡亂瞎撞有用。希望大家不要在這部分過于浪費時間與精力。

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Mysql開啟慢SQL并分析原因

        Mysql開啟慢SQL并分析原因:第一步.開啟mysql慢查詢 方式一:修改配置文件 Windows:Windows 的配置文件為 my.ini,一般在 MySQL 的安裝目錄下或者 c:\Windows 下。 Linux:Linux 的配置文件為 my.cnf ,一般在 /etc 下 在 my.ini 增加幾行: [mysqlld] l
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲色图国产精品| 国产日产亚洲系列最新| 久久久婷婷五月亚洲97号色 | 亚洲自国产拍揄拍| 9420免费高清在线视频| 亚洲精品国产啊女成拍色拍| 最近的中文字幕大全免费8| 亚洲视频免费观看| 日本成年免费网站| 亚洲AV无码成人精品区狼人影院 | 精品亚洲国产成人| 欧美三级在线电影免费| 亚洲中文字幕乱码一区| 波多野结衣久久高清免费| 国产偷国产偷亚洲高清人| 亚洲国产婷婷香蕉久久久久久| 国产VA免费精品高清在线| 亚洲AV日韩AV天堂一区二区三区| 黄色片免费在线观看| 亚洲精品午夜久久久伊人| 成人人观看的免费毛片| 污视频网站免费观看| 亚洲精品狼友在线播放| 成年人免费的视频| 老司机午夜在线视频免费观| 精品国产日韩亚洲一区| 在线看片免费人成视久网| WWW亚洲色大成网络.COM| 亚洲精品国自产拍在线观看| 久久免费国产精品一区二区| 亚洲人成综合在线播放| 亚洲国产成人影院播放| 午夜理伦剧场免费| 亚洲精品无码专区| 亚洲人成网77777亚洲色| 日本妇人成熟免费中文字幕| 青娱乐在线免费观看视频| 久久精品亚洲中文字幕无码网站| 永久免费AV无码国产网站| 一级毛片免费一级直接观看| 亚洲精品美女久久久久|