成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL慢查詢語句分析總結

數據庫 MySQL
我們經常會接觸到MySQL,也經常會遇到一些MySQL的性能問題。我們可以借助慢查詢日志和explain命令初步分析出SQL語句存在的性能問題

我們經常會接觸到MySQL,也經常會遇到一些MySQL的性能問題。我們可以借助慢查詢日志和explain命令初步分析出SQL語句存在的性能問題

通過SHOW FULL PROCESSLIST查看問題

SHOW FULL PROCESSLIST相當于select * from information_schema.processlist可以列出正在運行的連接線程,

 

mysql慢查詢語句分析總結
processlist

說明:

  • id 連接id,可以使用kill+連接id的方式關閉連接(kill 9339)
  • user顯示當前用戶
  • host顯示連接的客戶端IP和端口
  • db顯示進程連接的數據庫
  • command顯示當前連接的當前執行的狀態,sleep、query、connect
  • time顯示當前狀態持續的時間(秒)
  • state顯示當前連接的sql語句的執行狀態,copying to tmp table、sorting result、sending data等
  • info顯示sql語句,如果發現比較耗時的語句可以復制出來使用explain分析。

慢查詢日志

慢查詢日志是MySQL用于記錄響應時間超過設置閾值(long_query_time)的SQL語句,默認情況下未開啟慢查詢日志,需要手動配置。

下面我們要記住幾個常用的屬性:

  • slow_query_log:是否開啟慢查詢(ON為開啟,OFF則為關閉)
  • long_query_time:慢查詢閥值,表示SQL語句執行時間超過這個值就會記錄,默認為10s
  • slow_query_log_file:慢查詢日志存儲的文件路徑
  • log_queries_not_using_indexes: 記錄沒有使用索引查詢語句(ON為開啟,OFF為關閉)
  • log_output:日志存儲方式(FILE表示將日志寫入文件,TABLE表示寫入數據庫中,默認值為FILE,如果存入數據庫中,我們可以通過select * from mysql.slow_log的方式去查詢,一般性能要求相對較高的建議存文件)

我們可以通過show variables like ‘%關鍵字%’的方式查詢我們設置的屬性值

 

mysql慢查詢語句分析總結
slow

我們有兩種方式設置我們的屬性,一種是set global 屬性=值的方式(重啟失效),另一種是配置文件(重啟生效)

命令方式:

  1. set global slow_query_log=1; 
  2. set global long_query_time=1;  
  3. set global slow_query_log_file='mysql-slow.log' 

配置文件方式:

  1. slow_query_log = 'ON' 
  2. slow_query_log_file = D:/Tools/mysql-8.0.16/slow.log 
  3. long_query_time = 1 
  4. log-queries-not-using-indexes 

pt-qurey-digest分析慢查詢語句

percona-toolkit包含了很多實用強大的mysql工具包,pt-qurey-digest只是其中一個用于分析慢查詢日志是工具。需要去官網下載,使用方法也很簡單:

  1. ./pt-query-digest slow2.log >> slow2.txt 

即可得出一個分析結果:

  1. # Query 9: 0.00 QPS, 0.00x concurrency, ID 0xF914D8CC2938CE6CAA13F8E57DF04B2F at byte 499246 
  2. # This item is included in the report because it matches --limit.# Scores: V/M = 0.22 
  3. Time range: 2019-07-08T03:56:12 to 2019-07-12T00:46:28 
  4. # Attribute    pct   total     min     max     avg     95%  stddev  median 
  5. # ============ === ======= ======= ======= ======= ======= ======= =======# Count          8      69 
  6. Exec time      1    147s      1s      3s      2s      3s   685ms      2s 
  7. # Lock time      0   140ms     2ms    22ms     2ms     3ms     2ms     2ms 
  8. Rows sent      0       0       0       0       0       0       0       0 
  9. Rows examine   0  23.96M 225.33k 482.77k 355.65k 462.39k  81.66k 345.04k 
  10. # Query size     2  17.72k     263     263     263     263       0     263 
  11. # String:# Databases    xxxx# Hosts        xx.xxx.xxx.xxx# Users        root# Query_time distribution#   1us 
  12. #  10us 
  13. # 100us 
  14. #   1ms 
  15. #  10ms 
  16. # 100ms 
  17. #    1s  ################################################################ 
  18. #  10s+ 
  19. # Tables#    SHOW TABLE STATUS FROM `xxxx` LIKE 'xxxxx_track_exec_channel'\G 
  20. #    SHOW CREATE TABLE `xxxx`.`xxxxxxxx_exec_channel`\G 
  21. #    SHOW TABLE STATUS FROM `xxx` LIKE 'xxxxx_TRACK_ASSIGN'\G 
  22. #    SHOW CREATE TABLE `xxxx`.`xxxxx_EFFECTIVE_TRACK_ASSIGN`\G 
  23. #    SHOW TABLE STATUS FROM `xxx` LIKE 'xxxx_task_exec'\G 
  24. #    SHOW CREATE TABLE `xxxx`.`xxxxx_task_exec`\G 
  25. UPDATExxxxxx_effective_track_exec_channel a SET EXEC_CHANNEL_CODE=(SELECT GROUP_CONCAT(DISTINCT(channel_id)) FROM xxxxxx_EFFECTIVE_TRACK_ASSIGN WHERE status in (1,2,4) AND id IN (SELECT assgin_id FROM xxxxxx_task_exec WHERE task_id=a.task_id))\G 

explain分析SQL語句

上面幾點大概的介紹到了幾種獲取慢查詢SQL語句的方式,現在,我們就需要借助explain來分析查找SQL語句慢的原因。explain使用也很簡單,直接在SELECT|UPDATE等語句前加上EXPLAIN即可

 

mysql慢查詢語句分析總結
explain

id

表的執行順序,復制的sql語句往往會分為很多步,序號越大越先執行,id相同執行順序從上往下

select_type

數據讀取操作的操作類型:

  • SIMPLE(簡單SELECT,不使用UNION或子查詢等)
  • PRIMARY(子查詢中最外層查詢,查詢中若包含任何復雜的子部分,最外層的select被標記為PRIMARY)
  • UNION(UNION中的第二個或后面的SELECT語句)
  • DEPENDENT UNION(UNION中的第二個或后面的SELECT語句,取決于外面的查詢)
  • UNION RESULT(UNION的結果,union語句中第二個select開始后面所有select)
  • SUBQUERY(子查詢中的第一個SELECT,結果不依賴于外部查詢)
  • DEPENDENT SUBQUERY(子查詢中的第一個SELECT,依賴于外部查詢)
  • DERIVED(派生表的SELECT, FROM子句的子查詢)
  • UNCACHEABLE SUBQUERY(一個子查詢的結果不能被緩存,必須重新評估外鏈接的第一行)

table

數據來源于那張表,關聯等復雜查詢時會用臨時虛擬表

type

檢索數據的方式

  • system:表只有一行記錄
  • const:通過索引查找并且一次性找到
  • eq_ref:唯一性索引掃描
  • ref:非唯一行索引掃描
  • range:按范圍查找
  • index:遍歷索引樹
  • all:全表掃描

possible_keys

顯示可能使用的索引

Key

實際使用的索引

key_len

索引的長度,一般來說,長度越短越好

ref

列與索引的比較,表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值

rows

估算查找的結果記錄條數

Extra

SQL查詢的詳細信息

  • Using where:表示使用where條件過濾
  • Using temporary:使用了臨時表暫存結果
  • Using filesort:說明mysql對數據使用一個外部索引排序。未按照表內的索引順序進行讀取。
  • Using index:表示select語句中使用了覆蓋索引,直接從索引中取值
  • Using join buffer:使用了連接緩存
  • Using index condition:表示查詢的列有非索引的列

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2017-04-01 19:00:25

MySQL慢查詢

2023-11-30 15:37:37

MySQL數據庫

2010-06-02 13:46:19

MySQL慢查詢

2018-10-12 16:45:10

MySQL查詢日志數據庫

2010-11-25 11:07:28

MySQL慢查詢

2018-09-13 09:42:30

數據庫Redis慢查詢

2011-06-28 08:32:40

MySQL慢查詢日志

2021-04-07 10:38:43

MySQL數據庫命令

2010-05-06 17:30:56

Oracle查詢語句

2018-06-07 09:45:08

2010-11-25 13:32:57

MySQL系統效率

2010-10-14 15:07:44

MySQL慢查詢

2010-10-08 16:26:49

mysql查找

2010-11-24 17:36:02

MySQL條件查詢語句

2021-03-15 10:01:40

Mysql查詢語句

2022-05-17 08:24:58

查詢日志MySQL

2010-11-25 16:29:26

MySQL慢日志查詢

2011-07-21 13:44:52

MySQLmysqldumpsl

2021-07-05 09:24:06

MySQL SQL 語句數據庫

2020-06-05 09:21:20

MySQL慢查詢數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区免费 | 欧美二区在线 | 久久精品国产久精国产 | 午夜精品久久久久久久 | 中文字幕97| 午夜精品久久 | 国产伦精品一区二区三区精品视频 | 日本韩国欧美在线观看 | 中文字幕一区二区三区日韩精品 | 亚洲成人精选 | 国产激情在线观看视频 | 国产美女久久 | 亚洲成人一区 | 亚洲免费视频网站 | 91伊人 | 97免费视频在线观看 | 中文字幕av在线播放 | 国产成人精品视频在线观看 | 九九亚洲 | 天天综合国产 | 中文精品视频 | 黄色在线观看 | 免费久久久久久 | 国产精品一区二区三区在线 | 日日日日日日bbbbb视频 | 日日操夜夜操天天操 | 欧美日韩一区二区三区四区 | 国产欧美精品区一区二区三区 | 亚洲国产中文字幕 | 亚洲二区在线观看 | 精品久久国产 | 色视频网站在线观看 | 91精品国产综合久久精品 | 国产精品免费一区二区 | 亚洲日本一区二区 | 国产传媒视频在线观看 | 久久久久久亚洲精品 | 亚洲成人免费在线 | 一级片视频免费观看 | 国产精品免费在线 | 中文久久 |