<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL如何定位慢sql?

          共 4050字,需瀏覽 9分鐘

           ·

          2020-08-12 10:39


          MySQL“慢SQL”定位


          數(shù)據(jù)庫調(diào)優(yōu)我個人覺得必須要明白兩件事
          1.定位問題(你得知道問題出在哪里,要不然從哪里調(diào)優(yōu)呢)
          2.解決問題(這個沒有基本的方法來處理,因為不同的問題處理的方式方法不一樣,得從實踐中不斷的探索,如sql調(diào)優(yōu),配置優(yōu)化,硬件升級等等)


          步驟1:查詢是否開啟了慢查詢


          mysql> show variables like '%slow%';
          +---------------------------+--------------------------------+
          | Variable_name |?Value |
          +---------------------------+--------------------------------+
          |
          ?log_slow_admin_statements | OFF |
          | log_slow_slave_statements |?OFF |
          |
          ?slow_launch_time | 2 |
          | slow_query_log |?ON |
          |
          ?slow_query_log_file | /data/mysql/localhost-slow.log |
          +---------------------------+--------------------------------+
          5?rows in?set (0.01?sec)

          mysql>


          以MySQL5.7為例


          我這里是開啟了,沒有開啟的,直接set global slow_query_log=on;就ok了。


          mysql> set?global?slow_query_log=on;
          Query OK, 0?rows affected?(0.05?sec)


          步驟2:設(shè)置慢查詢的時間限制


          mysql默認(rèn)的慢查詢時間是10秒,可以設(shè)置成其它的時間。


          mysql>?show variables like 'long_query_time';
          +-----------------+-----------+
          | Variable_name | Value |
          +-----------------+-----------+
          | long_query_time | 10.000000 |
          +-----------------+-----------+
          1 row in set (0.03 sec)

          mysql>
          ?set?long_query_time=1;
          Query OK, 0 rows affected (0.00 sec)

          mysql>
          ?show variables like 'long_query_time';
          +-----------------+----------+
          | Variable_name | Value |
          +-----------------+----------+
          | long_query_time | 1.000000 |
          +-----------------+----------+
          1 row in set (0.00 sec)

          mysql>


          set global 只是全局session生效,重啟后失效,如果需要以上配置永久生效,需要在mysql.ini(linux my.cnf)中配置


          步驟3:查看慢查詢


          show?status?like?‘slow_queries’;


          它會顯示慢查詢sql的數(shù)目,具體的sql就在上面的Log file日志中可以看到。


          mysql>?show status like 'slow_queries';
          +---------------+-------+
          | Variable_name | Value |
          +---------------+-------+
          | Slow_queries | 0 |
          +---------------+-------+
          1 row in set (0.01 sec)

          mysql>


          其它命令


          show?processlist:查看哪些線程在運行;
          show?open?tables:查看哪些表在使用。


          慢查詢分析日志


          改一下慢查詢配置


          mysql>?set?long_query_time=0.1;
          Query OK, 0 rows affected (0.05 sec)


          執(zhí)行幾條慢的SQL


          mysql> select?count(*) from?users;
          +----------+
          | count(*) |
          +----------+
          | 100005?|
          +----------+
          1?row in?set?(0.28?sec)

          mysql> select?* from?users
          ;
          ...
          ...
          100005?rows in?set?(1.41?sec)

          mysql>

          mysql> select?count(*) from?user_address_copy;
          +----------+
          | count(*) |
          +----------+
          | 30006?|
          +----------+
          1?row in?set?(0.08?sec)

          mysql> select?* from?user_address_copy
          ;
          ...
          ...
          30006?rows in?set?(0.39?sec)

          mysql>


          vim 打開慢查詢記錄的文件slow_query_log_file ? ? ? | /data/mysql/localhost-slow.log


          vim /data/mysql/localhost-slow.log


          localhost-slow.log 內(nèi)容如下:


          /software/mysql/bin/mysqld, Version: 5.7.24 (MySQL Community Server (GPL)). started with:
          Tcp port: 3306 Unix socket: /software/mysql/mysql.sock
          Time Id Command Argument
          #?Time: 2018-12-08T03:08:23.877322Z
          #?User@Host: root[root] @ localhost [] Id: 24
          #?Query_time: 0.551358 Lock_time: 0.000514 Rows_sent: 1 Rows_examined: 100005
          use test;
          SET timestamp=1544238503;
          select count(*) from users;
          #?Time: 2018-12-08T03:09:06.038256Z
          #?User@Host: root[root] @ localhost [] Id: 24
          #?Query_time: 1.401716 Lock_time: 0.000220 Rows_sent: 100005 Rows_examined: 100005
          SET timestamp=1544238546;
          select * from users;
          #?Time: 2018-12-08T03:12:03.207302Z
          #?User@Host: root[root] @ localhost [] Id: 24
          #?Query_time: 0.395499 Lock_time: 0.000378 Rows_sent: 30006 Rows_examined: 30006
          SET timestamp=1544238723;
          select * from user_address_copy;


          Time :日志記錄的時間


          User@Host:執(zhí)行的用戶及主機


          Query_time:查詢耗費時間 Lock_time 鎖表時間 Rows_sent 發(fā)送給請求方的記錄條數(shù) Rows_examined 語句掃描的記錄條數(shù)


          SET timestamp 語句執(zhí)行的時間點


          select .... 執(zhí)行的具體語句


          慢查詢?nèi)罩痉治龉ぞ?/strong>


          分析慢查詢?nèi)罩臼切阅苷{(diào)優(yōu)中獲取信息的主要方式之一。


          如果slow log比較小,那么可以直接使用vi等文本編輯器或less、more命令打開。但如果slow log過大,載入慢查詢?nèi)罩緦⒑馁M大量時間,這個時候就要考慮使用其他工具來對慢查詢進行分析了。


          mysql的自帶工具mysqldumpslow,可以有效的幫助我們對slow log進行篩選和分析。


          官方文檔5.7版本地址:https://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html


          參看官方文檔可以略去本文。



          執(zhí)行mysqldumpslow –h可以查看幫助信息。


          主要介紹兩個參數(shù)-s和-t


          -s 這個是排序參數(shù),可選的有:
          al:?平均鎖定時間
          ar: 平均返回記錄數(shù)
          at:?平均查詢時間
          c: 計數(shù)
          l:?鎖定時間
          r: 返回記錄
          t:?查詢時間
          -t n 顯示頭n條記錄。


          實例:

          mysqldumpslow -s c?-t 20?host-slow.log
          mysqldumpslow -s r -t 20?host-slow.log


          上述命令可以看出訪問次數(shù)最多的20個sql語句和返回記錄集最多的20個sql。


          mysqldumpslow -t 10 -s t -g “l(fā)eft join” host-slow.log


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


          用了這個工具就可以查詢出來那些sql語句是性能的瓶頸,進行優(yōu)化,比如加索引,該應(yīng)用的實現(xiàn)方式等。


          出處:csdn.net/weixin_38028611/article/details/99355039





          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  影音先锋色五月 | 欧美精品99久久久 | 婷婷丁香激情五月天 | 日本一区视频在线 | 日皮视频在线免费看 |