5 Mysql效能分析

2021-10-22 11:58:32 字數 3624 閱讀 5842

1. 慢查詢日誌

2. 檢視問題sql的執行計畫

3. 優化慢sql

4. 檢視慢sql執行時的效能使用情況

5. 調整系統引數

6. 提公升伺服器硬體1. 引數,開啟sql

sql:

set global slow_query_log = on;

set global long_query_time = 1;

配置檔案:

[mysqld]

slow_query_log=on

long_query_time=1

2. 日誌格式
# time: 210317 10:12:45

# user@host: mysql[mysql] @ [192.168.233.1] id: 7

# query_time: 2.072475 lock_time: 0.000040 rows_sent: 1 rows_examined: 1197821

set timestamp = 1615947165;

select * from `t` where amount = 48342.84;

3. 慢查詢分析工具

1) 命令

​ mysqldumpslow -s t -t 10 -g 「left join」 /var/lib/mysql/slow.log

2)引數

-s:是表示按照何種方式排序

al 平均鎖定時間

ar 平均返回記錄時間

at 平均查詢時間(預設)

c 計數

l 鎖定時間

r 返回記錄

t 查詢時間

-t:是top n的意思,即為返回前面多少條的資料

-g:後邊可以寫乙個正則匹配模式,大小寫不敏感的

explain 命令

select 查詢的識別符號. 每個 select 都會自動分配乙個唯一的識別符號.

2. select_type

select 查詢的型別.

1)******

沒有union,沒有子查詢。
2)primary

乙個需要union操作或者含有子查詢的select,位於最外層的單位查詢的select_type即為primary。
3)union

union連線的兩個select查詢,第乙個查詢是dervied派生表,除了第乙個表外,第二個以後的表select_type都是union。
4)dependent union

與union一樣,出現在union 或union all語句中,但是這個查詢要受到外部查詢的影響。
5)union result

包含union的結果集,在union和union all語句中,因為它不需要參與查詢,所以id欄位為null。
6)subquery

除了from字句中包含的子查詢外,其他地方出現的子查詢都可能是subquery。
7)dependent subquery

與dependent union類似,表示這個subquery的查詢要受到外部表查詢的影響。
8)derived

from字句**現的子查詢,也叫做派生表,其他資料庫中可能叫做內聯檢視或巢狀select。
3. table

查詢的是哪個表

4. partitions

匹配的分割槽

5. type

顯示的是單位查詢的連線型別或者理解為訪問型別

根據效能:

system

表中只有一行資料或者是空表

const

使用唯一索引或者主鍵

eq_ref

唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃瞄

ref非唯一性索引掃瞄,返回匹配某個單獨值的所有行,本質上也是一種索引訪問,它返回所有匹配某個單獨值的行,然而,它可能會找到多個符合條件的行,所以他應該屬於查詢和掃瞄的混合體。

fulltext

ref_or_null

unique_subquery

index_subquery

range

索引範圍掃瞄,常見於使用》,

index_merge

index

select結果列中使用到了索引,type會顯示為index。

all全表掃瞄資料檔案,然後再在server層進行過濾返回符合要求的記錄。

6. possible_keys

此次查詢中可能選用的索引

7. key

此次查詢中確切使用到的索引.

8. ref

哪個欄位或常數與 key 一起被使用

如果是使用的常數等值查詢,這裡會顯示const

如果是連線查詢,被驅動表的執行計畫這裡會顯示驅動表的關聯字段

如果是條件使用了表示式或者函式,或者條件列發生了內部隱式轉換,這裡可能顯示為func

9. rows

顯示此查詢一共掃瞄了多少行. 這個是乙個估計值.

10. filtered

表示此查詢條件所過濾的資料的百分比

11. extra

額外的資訊

1) using filesort

說明mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取。mysql中無法利用索引完成的排序操作稱為「檔案排序」。需要優化sql。
2) using temporary

使用了用臨時表儲存中間結果,mysql在對查詢結果排序時使用臨時表。常見於排序order by和分組查詢group by。需要優化sql。
3) using index

查詢時不需要回表查詢,直接通過索引就可以獲取查詢的結果資料。
4) using where

表示mysql將對storage engine提取的結果進行過濾,過濾條件欄位無索引。
5) impossible where

where子句的值 總是false ,不能用來獲取任何元組。
1. 索引優化

2.limit 優化

3. 其他查詢優化query profiler是mysql自帶的一種query診斷分析工具,通過它可以分析出一條sql語句的硬體效能瓶頸在什麼地方。

1. 緩衝區優化

2. 降低磁碟寫入次數

3. mysql配置優化

5) MySQL插入資料

mysql insert語句允許您將一行或多行插入到表中。下面說明了insert語句的語法 insert into table column1,column2.values value1,value2,首先,在insert into子句之後,在括號內指定表名和逗號分隔列的列表。然後,將括號內的相應列...

5 mysql 常用儲存引擎

mysql5.5之前預設儲存引擎是myisam,5.5之後改為innodb。若要修改預設引擎,可以修改配置檔案中的default storage engine。可以通過show engines來檢視當前資料庫支援的引擎。使用select engine from information schema....

Flask學習 5 mysql基礎

未利用資料庫連線池 import pymysql db pymysql.connect host 127.0.0.1 user root port 3306,password 111111 db test cursor db.cursor 建立字典游標 cursor db.cursor pymysq...