慢日志
配置
1、 慢日志
#查看是否開啟
show variables like '%slow_query_log%';
#開啟
set global slow_query_log = 1;
#時(shí)間閾值
show variables like '%long_query_time%'
#設(shè)置
set global long_query_time = 1;
#重新打開鏈接,測(cè)試
SELECT sleep(4)
#查看慢日志條數(shù)
show global status like '%slow_queries%'
永久生效
vim /etc/mysql/my.cnf
slow_query_log =1
slow_query_log_file=/tmp/mysql_slow.log
慢日志分析
mysqldumpslow
-s ORDER 排序方式
c: 訪問計(jì)數(shù)
l: 鎖定時(shí)間
r: 返回記錄
t: 查詢時(shí)間
al:平均鎖定時(shí)間
ar:平均返回記錄數(shù)
at:平均查詢時(shí)間
-r 倒序排
-t NUM 只返回前幾條
-g PATTERN 正則表達(dá)式
用show profile進(jìn)行sql分析
show profile 用于查詢sql 執(zhí)行的資源消耗导狡,默認(rèn)關(guān)閉捻脖,只記錄最近15條
配置
#查詢是否開啟
show variables like '%profiling%';
#開啟
set profiling = on;
#查看記錄列表
show profiles
使用
show profile cpu, block io for query 5;
Show profile后面的一些參數(shù):
All:顯示所有的開銷信息
Block io:顯示塊IO相關(guān)開銷
Context switches: 上下文切換相關(guān)開銷
Cpu:顯示cpu相關(guān)開銷
Memory:顯示內(nèi)存相關(guān)開銷
Source:顯示和source_function,source_file,source_line相關(guān)的開銷信息
explain 執(zhí)行計(jì)劃
官方解釋:
https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
- id 查詢序列號(hào)例获,倒序執(zhí)行,從上至下
- select_type 查詢類型
- simple 簡(jiǎn)單查詢,不包含子查詢和union
- primary 包含子查詢的,最外層查詢
- subquery select或 where 里面包含子查詢
- derived 在from 列表中包含的子查詢
- union 并集的第二個(gè)select 查詢
- table 指定數(shù)據(jù)來源
- partitions 匹配的分區(qū)
- type 表的連接類型贞绵,性能由高到低排列
- system 表只有一行記錄,相當(dāng)于系統(tǒng)表
- const 通過索引查找恍飘,只匹配一行
- eq_ref 唯一索引掃描
- ref 非唯一索引掃描
- range 索引范圍查詢
- index 只遍歷索引樹
- ALL 全表掃描
- possible_keys 使用的索引
- key 實(shí)際使用的索引
- key_len 索引中使用的字節(jié)數(shù)
- ref 顯示該表的索引字段榨崩,關(guān)聯(lián)了哪張表
- rows 掃描的行數(shù)
- filtered 結(jié)果返回的行數(shù)占讀取的行數(shù)
- extra 額外信息
- using filesort 文件排序
- using temporary 使用臨時(shí)表
- using index 使用了覆蓋索引
- using where 使用了where 子句
- using join buffer 使用連接緩沖