MYSQL慢日志探索
Table of Contents?[hide]
- 1. 出現場景
- 2. 什么樣的慢查詢會記錄到slow log日志
- 2.1 慢日志查詢和鎖定時間介紹
- 2.2 何時記錄慢日志
- 2.2.1 設置開啟MySQL慢日志相關參數
- 2.2.2 準備測試數據
- 2.2.3 ?測試場景介紹
- 2.2.3 ?測試結果展示
- 3. 結論
1. 出現場景
?今天審計SQL慢查詢,發現一個很簡單的SQL語句出現在了滿日志里面,并且相應時間還很長,拿出去直接去查看執行計劃,并沒有發現什么問題。突然感覺為什么會記錄在慢日志中感覺很模糊。親自動手找一下原因吧
問題語句:select userid from tbl_name where mobile =?
2. 什么樣的慢查詢會記錄到slow log日志
2.1 慢日志查詢和鎖定時間介紹
在Slog慢日志中,會有類似這樣的數據,體現了2個參數,查詢時間和所等待時間
# Query_time: 27.620161 Lock_time: 25.615839 Rows_sent: 1 Rows_examined: 1
2.2 何時記錄慢日志
記錄到慢日志的SQL與Query_time,Lock_time,long_query_time有什么關系呢?為了解決這個問題,我特意做了一個下面的實驗,廢話不在多說,準備測試數據
2.2.1 設置開啟MySQL慢日志相關參數
我的設置如下:
slow_query_log=1
long_query_time=1
slow_query_log_file=/home/db/Main.Slow.log
2.2.2 準備測試數據
[localhost](dog) 11:17:45>CREATE TABLE Gbk_Null (
id int(11) NOT NULL AUTO_INCREMENT,
name char(10) DEFAULT NULL,
PRIMARY KEY (id),
KEY name(name)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=gbk;
[localhost](dog) 12:17:02>select * from Gbk_Null;
+—-+——-+
| id | name |
+—-+——-+
| 1 | aaa |
| 2 | bbbb |
| 3 | cccc |
| 4 | ddd |
| 5 | eeee |
| 6 | fffff |
+—-+——-+
6 rows in set (0.00 sec)
2.2.3 ?測試場景介紹
場景1:
session A:
begin;
select * from Gbk_Null where id =1 for update;
Session B;
begin:
select *,sleep(2) from Gbk_Null where id =1 for update;
然后去場景中commit事務,觀察是否有滿日志記錄到滿日志文件中
場景2:
session A:
begin;
select * from Gbk_Null where id =1 for update;
Session B;
begin:
select * from Gbk_Null where id =1 for update;
然后去場景中commit事務,觀察是否有滿日志記錄到滿日志文件中
場景3:
session A:
begin;
select * from Gbk_Null where id =1 for update;
Session B;
begin:
select *,sleep(0.5) from Gbk_Null where id =1 for update;
2.2.3 ?測試結果展示
通過上面場景的測試,發現了場景1的Session B中SQL被記錄到了滿日志中,而場景2,場景3 沒有任何的滿日志記錄信息,慢日志內容如下
# Time: 150227 11:12:52
#?User@Host: root[root] @ localhost [127.0.0.1] Id: 9
# Query_time: 9.623483 Lock_time: 7.623200 Rows_sent: 1 Rows_examined: 1
use dog;
SET timestamp=1425006772;
select *,sleep(2) from Gbk_Null where id =1 for update;
?
3. 結論
1)Query_time – Lock_time > long_query_time <==> 記錄
1)Query_time – Lock_time < long_query_time <==> 不記錄
總結
以上是生活随笔為你收集整理的MYSQL慢日志探索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB 查询时间差问题修复
- 下一篇: 禁止修改varchar到int|[运维规