sql語句預設值 MySQL中慢語句如何記錄?

2021-10-18 00:02:37 字數 2713 閱讀 1562

實際工作中經常會遇到資料庫操作突然變慢的情況,但是檢查了各種硬體設施以及網路監控後發現都沒有什麼問題;這時候就要從資料庫入手了,而慢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...