mysql慢查詢開啟語句分析_mysql慢查詢語句分析總結

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

通過SHOW FULL PROCESSLIST查看問題

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

474ac19f75176543cd24960373960f15.png

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 ‘%關鍵字%’的方式查詢我們設置的屬性值

88109714d3fae161bfc6c55f3ea0cd22.png

slow

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

命令方式:

set global slow_query_log=1;

set global long_query_time=1;

set global slow_query_log_file='mysql-slow.log'

配置文件方式:

slow_query_log = 'ON'

slow_query_log_file = D:/Tools/mysql-8.0.16/slow.log

long_query_time = 1

log-queries-not-using-indexes

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

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

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

即可得出一個分析結果:

# Query 9: 0.00 QPS, 0.00x concurrency, ID 0xF914D8CC2938CE6CAA13F8E57DF04B2F at byte 499246

# This item is included in the report because it matches --limit.

# Scores: V/M = 0.22

# Time range: 2019-07-08T03:56:12 to 2019-07-12T00:46:28

# Attribute pct total min max avg 95% stddev median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count 8 69

# Exec time 1 147s 1s 3s 2s 3s 685ms 2s

# Lock time 0 140ms 2ms 22ms 2ms 3ms 2ms 2ms

# Rows sent 0 0 0 0 0 0 0 0

# Rows examine 0 23.96M 225.33k 482.77k 355.65k 462.39k 81.66k 345.04k

# Query size 2 17.72k 263 263 263 263 0 263

# String:

# Databases xxxx

# Hosts xx.xxx.xxx.xxx

# Users root

# Query_time distribution

# 1us

# 10us

# 100us

# 1ms

# 10ms

# 100ms

# 1s ################################################################

# 10s+

# Tables

# SHOW TABLE STATUS FROM `xxxx` LIKE 'xxxxx_track_exec_channel'G

# SHOW CREATE TABLE `xxxx`.`xxxxxxxx_exec_channel`G

# SHOW TABLE STATUS FROM `xxx` LIKE 'xxxxx_TRACK_ASSIGN'G

# SHOW CREATE TABLE `xxxx`.`xxxxx_EFFECTIVE_TRACK_ASSIGN`G

# SHOW TABLE STATUS FROM `xxx` LIKE 'xxxx_task_exec'G

# SHOW CREATE TABLE `xxxx`.`xxxxx_task_exec`G

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即可

facd803f7334f1dc0f66630bdc6bc805.png

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:表示查詢的列有非索引的列

[參考]

MySQL Explain詳解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378847.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378847.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378847.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

P2P技術詳解(三):P2P中的NAT穿越(打洞)方案詳解(進階分析篇)

目錄1、NAT和NAPT2、NAT帶來的問題3、P2P通信穿越NAT的技術、方法4、NAT穿越技術1:應用層網關4.1、原理4.2、限制5、NAT穿越技術2:中間件技術5.1、原理5.2、限制6、NAT穿越技術3:打洞技術(Hole Punching)6.1、原理6.2、方法6.2.1NAT行為類型與…

Java BufferedReader reset()方法及示例

BufferedReader類的reset()方法 (BufferedReader Class reset() method) reset() method is available in java.io package. reset()方法在java.io包中可用。 reset() method is used to reset the stream to the most recent mark of this stream. reset()方法用于將流重置為該…

將兩大小完全相同的照片進行加權混合對比

將兩張大小完全相同的照片進行加權混合對比 import cv2 img1cv2.imread(E:\Python-workspace\OpenCV\OpenCV/water1.png,1)#第一個參數為選擇照片的路徑,注意照片路徑最后一個為正斜杠其他都為反斜杠;第二個參數,其中1表示所選照片為彩色照片…

過了很久了

很久沒來這里了,一般也就找找資料會上一下子。差不多算是荒廢了吧 不要緊,開始寫了轉載于:https://www.cnblogs.com/Anykong/archive/2013/02/18/2916333.html

古文中驚艷的句子

-1】終于為那一身江南煙雨覆了天下,容華謝后,不過一場,山河永寂。-2】千秋功名,一世葬你,玲瓏社稷,可笑卻無君王命。-3】鳳凰臺上鳳凰游,負約而去,一夜苦等,從此江南江北…

java 方法 示例_Java ArrayDeque pollFirst()方法與示例

java 方法 示例ArrayDeque類pollFirst()方法 (ArrayDeque Class pollFirst() method) pollFirst() Method is available in java.lang package. pollFirst()方法在java.lang包中可用。 pollFirst() Method is used to return the first element of the queue denoted by this d…

P2P技術詳解(四):P2P技術之STUN、TURN、ICE詳解

目錄1、內容概述2、STUN詳解2.1 RFC3489/STUN2.1.1 報文結構2.1.2實現原理2.1.3STUN功能舉例2.2 RFC5389/STUN2.2.1STUN用途2.2.2報文結構2.3 RFC5389與RFC3489的區別2.4 新特性介紹2.4.1指紋機制2.4.2通過DNS發現服務器機制2.4.3認證和消息完整性機制2.4.4備份服務器機制2.5 R…

比較兩張大小相同的照片的差異,返回數值

比較兩張大小相同的照片的差異,返回數值 from PIL import Image import math import operator from functools import reducedef image_contrast(img1, img2):image1 Image.open(img1)image2 Image.open(img2)h1 image1.histogram()h2 image2.histogram()resul…

poj2115C Looooops

http://poj.org/problem?id2115 參考人家的 如下 如i65534,當i3時,i1 其實就是 i(655343)%(2^16)1 有了這些思想,設對于某組數據要循環x次結束,那么本題就很容易得到方程: x[(B-A2^k)%2^k] /C 即 Cx(B-A)(mod 2^k) 此…

ASP.NET調用javascript腳本的常見方法小結

http://www.codesky.net/article/doc/201004/2010041706872.htm轉載于:https://www.cnblogs.com/ZC_Mo-Blog/archive/2010/11/23/1885125.html

python wait方法_Python條件類| 帶有示例的wait()方法

python wait方法Python Condition.wait()方法 (Python Condition.wait() Method) wait() is an inbuilt method of the Condition class of the threading module in Python. wait()是Python中線程模塊的Condition類的內置方法。 Condition class implements condition variab…

return編程python_python3 第二十一章 - 函數式編程之return函數和閉包

我們來實現一個可變參數的求和。通常情況下,求和的函數是這樣定義的:def calc_sum(*args):ax0for n inargs:ax ax nreturn ax但是,如果不需要立刻求和,而是在后面的代碼中,根據需要再計算怎么辦?可以不返回…

黑色背景下,計算照片白色的區域面積和周長

黑色背景下,計算照片白色的區域面積和周長 import cv2 img cv2.imread(E:\Python-workspace\OpenCV\OpenCV/beyond.png,1)#第一個參數為選擇照片的路徑,注意照片路徑最后一個為正斜杠其他都為反斜杠;第二個參數,其中1表示所選照…

php連接mssql數據庫的幾種方式

數據庫查詢不外乎4個步驟,1、建立連接。2、輸入查詢代碼。3、建立查詢并取出數據。4、關閉連接。 php連接mssql數據庫有幾個注意事項,尤其mssql的多個版本、32位、64位都有區別。 首先,php.ini文件中;extensionphp_pdo_mssql.dll ;extensionp…

通俗易懂:快速理解P2P技術中的NAT穿透原理

目錄1、基礎知識1.1、什么是NAT?1.2、為什么會有NAT?1.3、NAT有什么優缺點?2、NAT的實現方式2.1、靜態NAT2.2、NAPT3、NAT的主要類型3.1、完全錐型NAT(Full Cone NAT,后面簡稱FC)3.2、受限錐型NAT&#xff…

duration java_Java Duration類| toNanos()方法與示例

duration javaDuration Class toNanos()方法 (Duration Class toNanos() method) toNanos() method is available in java.time package. toNanos()方法在java.time包中可用。 toNanos() method is used to convert this Duration into the number of nanoseconds. toNanos()方…

java 負載均衡_java負載均衡 - 歲月靜好I的個人空間 - OSCHINA - 中文開源技術交流社區...

作用對系統的高可用,網絡壓力的緩解,處理能力擴容的重要手段之一。服務器負載我們通常所說的負載是指:服務器負載軟硬件負載服務器負載又分為:軟件負載--硬件負載軟件負載:通過在服務器上安裝一些具有負載功能或模塊的…

b tree和b+tree_B TREE實施

b tree和btreeB TREE及其操作簡介 (Introduction to B TREE and its operations) A B tree is designed to store sorted data and allows search, insertion and deletion operation to be performed in logarithmic time. As In multiway search tree, there are so many nod…

黑色背景下,將照片內封閉空心圖案的空心區域染成Cyan并保存

在黑色背景下,將照片內封閉空心圖案的空心區域染色 import cv2 import numpy as np img cv2.imread(E:\Python-workspace\OpenCV\OpenCV/beyond.png,1)#第一個參數為選擇照片的路徑,注意照片路徑最后一個為正斜杠其他都為反斜杠;第二個參數…

Ubuntu輸入su提示認證失敗的解決方法

Ubuntu輸入su提示認證失敗的解決方法 啟動ubuntu服務時竟然提示權限不夠,用su切換,輸入密碼提示認證失敗,這下搞了吧,后來一經查閱原來Ubuntu安裝后,root用戶默認是被鎖定了的,不允許登錄,也不允…