mysql資料庫SQL執行分析,優化前必備分析

2022-07-30 07:12:12 字數 1900 閱讀 1898

一般我們在對mysql資料庫做優化,肯定需要對慢sql去做分析才能開始優化,那麼有什麼分析的方法呢?下面通過對sql執行時間和執**況來做分析。

通過找到執行時間長的 sql 語句,可以直觀的發現資料層的效率問題。

1.通過 show processlist 來檢視系統的執**況

mysql> show processlist;
2.通過 profiling 來進行檢視

這個命令是檢視 sql 的執行時間,能很直觀的看出快慢。

2.1 檢視 profiling 是否開啟

0 代表還是關閉著分析功能

mysql> select @@profiling;
2.2 開啟工具

mysql> set profiling=1;

mysql> select @@profiling;

2.3 檢視 sql 的執行時間

mysql> show profiles;
2.4 檢視 sql 執行耗時詳細資訊

語法:show profile for query query_id

mysql> show profile for query 1;
select * from information_schema.profiling where query_id = query_id;

3.慢查詢日誌

mysql 的慢查詢日誌,顧名思義就是把執行時間超過設定值(預設為10s)的 sql 記錄到日誌中。這項功能需要手動開啟,但是開啟後會造成一定的效能損耗。

3.1 檢視慢日誌是否開啟

預設情況下slow_query_log的值為off,表示慢查詢日誌是禁用的,可以通過設定slow_query_log的值來開啟。語法:set global slow_query_log=1

mysql> show variables like '%slow_query_log%';

mysql> set global slow_query_log=1;

3.2 設定超時時間

注意:修改後,需要重新連線或新開乙個會話才能看到修改值。

永久生效,修改 my.cnf

slow_query_log=1

long_query_time=10

slow_query_log_file=/path/mysql_slow.log

3.3 其他引數

3.3.1 log_output

引數是指定日誌的儲存方式。log_output='file'表示將日誌存入檔案,預設值是'file'。log_output='table'表示將日誌存入資料庫,這樣日誌資訊就會被寫入到mysql.slow_log表中。mysql資料庫支援同時兩種日誌儲存方式,配置的時候以逗號隔開即可,如:log_output='file,table'。日誌記錄到系統的專用日誌表中,要比記錄到檔案耗費更多的系統資源,因此對於需要啟用慢查詢日誌,又需要能夠獲得更高的系統效能,那麼建議優先記錄到檔案。

3.3.2 log-queries-not-using-indexes

未使用索引的查詢也被記錄到慢查詢日誌中(可選項)。如果調優的話,建議開啟這個選項。另外,開啟了這個引數,其實使用full index scan的sql也會被記錄到慢查詢日誌。

3.3.3 log_slow_admin_statements

表示是否將慢管理語句例如analyze table和alter table等記入慢查詢日誌

3.4 分析工具 mysqldumpslow

mysql 提供了慢日誌分析工具 mysqldumpslow。

3.4.1 命令示例

使用 explain 分析 sql 執**況。

mysql> explain select * from mysql.user;
說明:

mysql資料庫的sql執行計畫詳解

引言 實際專案開發中,由於我們不知道實際查詢的時候資料庫裡發生了什麼事情,資料庫軟體是怎樣掃瞄表 怎樣使用索引的,因此,我們能感知到的就只有 sql 語句執行的時間,在資料規模不大時,查詢是瞬間的,因此,在寫 sql 語句的時候就很少考慮到效能的問題。但是當資料規模增大,如千萬 億的時候,我們運 行...

資料庫監測sql執行

sql server profiler可以檢測在資料上執行的語句,特別是有的專案不直接使用sql語句,直接使用orm框架的系統處理資料庫的專案,在除錯sql語句時,給了很大的幫助。之前寫了使用sql server profiler追蹤死鎖的文章 sql server profiler追蹤資料庫死鎖 ...

資料庫監測sql執行

sql server profiler可以檢測在資料上執行的語句,特別是有的專案不直接使用sql語句,直接使用orm框架的系統處理資料庫的專案,在除錯sql語句時,給了很大的幫助。之前寫了使用sql server profiler追蹤死鎖的文章 sql server profiler追蹤資料庫死鎖 ...