實際工作中經常會遇到資料庫操作突然變慢的情況,但是檢查了各種硬體設施以及網路監控後發現都沒有什麼問題;這時候就要從資料庫入手了,而慢sql是我們工作中經常會遇到的影響查詢效能的情況。本文將介紹如何在mysql中獲取慢sql。
一、資料庫中通過日誌記錄慢sql的幾個配置項
1.slow_query_log 該配置用於配置是否捕獲執行時間超過一定數值的sql語句,預設值為off
查詢資料的配置方式為
show variables like 'slow_query_log';
開啟該配置的方式有兩種
#第一種為執行設定命令
set global slow_query_log='on';
#第二種為修改 my.cnf 中的配置
slow_query_log = 1 #開啟慢查詢
2.long_query_time 當sql執行時間超過該配置設定值後將被記錄,該值單位為秒設定時支援設定為小數,預設值為10秒
查詢資料的配置方式為
show variables like 'long_query_time';
開啟該配置的方式同樣也是有兩種
#第一種為執行設定命令
set global long_query_time=5;
#第二種為修改 my.cnf 中的配置
long_query_time = 1 #超過的時間為1s
3.slow_query_log_file 超時時間記錄的檔案路徑
查詢配置的方式為
show variables like 'slow_query_log_file';
開啟配置的方式為
#第一種為執行設定命令
set global slow_query_log_file='/var/***.log';
#第二種為修改 my.cnf 中的配置
log-slow-queries=/var/***.log
4.log_queries_not_using_indexes 當設定為 on 時,可以捕捉到所有未使用索引的sql語句,預設值為off
查詢資料的配置方式為
show variables like 'log_queries_not_using_indexes';
開啟配置的方式為
#第一種為執行設定命令
set global log_queries_not_using_indexes ='on';
#第二種為修改 my.cnf 中的配置
log-queries-not-using-indexes = 1 #開啟慢查詢
二、日誌內容分析當開啟了慢sql日誌後,可以在配置好的日誌輸出位置看到慢sql的記錄,檢視內容的方式有兩種
1.直接檢視日誌內容,我們可以通過直接開啟檔案的方式檢視日誌內容;但是使用此種方式就需要我們自行對日誌記錄的內容進行分析。日誌記錄結果如下:
# time: 201110 23:40:02
# user@host: data_base[datausername_rw] @ [ip] id: 55520890
# query_time: 0.530398 lock_time: 0.000042 rows_sent: 1 rows_examined: 2021690
set timestamp=1605022802;
select count(1) from table_name where 1 = 1;
2.使用mysql自帶的 mysqldumpslow 命令
#常用引數說明
-s 後面接下面的引數表示 mysqldumpslow 結果顯示的順序!
c query執行的次數
t sql執行的時間
l lock鎖表的時間
r sql返回的行數
#ac,at,al,ar,表示倒序排列
-t,是top n,即為返回前面n條資料
-g,後邊可以寫乙個正則匹配模式,大小寫不敏感
#語句示例
mysqldumpslow -s t -t 2 /opt/mysql/data/slowquery.log #顯示執行時間最長的前兩個sql
mysqldumpslow -s c -t 2 /opt/mysql/data/slowquery.log #顯示次數最多的前兩個sql
三、使用 show processlist 命令實時查詢執行語句1.show processlist命令可以將當前正在正在執行的執行緒進行列印,字段說明如下
2.state 列介紹,state只是語句執行過程中的某乙個狀態;比如執行查詢時,可能需要經過copying to tmp table,sorting result,sending data等狀態才可以完成。狀態的值主要有以下幾種:
MySQL預設值約束
1 預設值約束 特點 1 乙個表可以有很多的預設值約束 2 預設值約束只能針對某乙個字段來說 3 預設值約束意味著,該欄位如果沒有手動賦值,會按預設值處理 2 如何在建表時指定預設值約束?create table 資料庫名.表名稱 欄位名1 資料型別 primary key,欄位名2 資料型別 un...
mysql 筆記 預設值
1 指定列的預設值 columnname int default 1 2 integer 列 設定自增列 也是指定預設值的方式 3 預設值必須是常量 不能使用函式 表示式 特例 timestamp datetime 列可以指定current timestamp做為預設值 4 blob text ge...
sql語句刪除帶預設值的字段
方法一 前提是 當你知道預設值的約束名的名字。如 df 欄位名 alter table shangpin drop constraint df 欄位名 alter table shangpin drop column 欄位名 約束名與欄位名都不需要加單引號 方法二 declare df varcha...