MySQL優化 如何定位效率較低的SQL

2021-05-22 14:18:56 字數 2362 閱讀 1053

hacms開源社群

一般通過以下兩種方式定位執行效率較低的 sql 語句。 慢查詢日誌在查詢結束以後才紀錄,所以在應用反映執行效率出現問題的時候查詢慢查詢日誌並不能定位問題,可以使用 show processlist 命令檢視當前 mysql 在進行的執行緒,包括執行緒的狀態、是否鎖表等,可以實時地查 ...

一般通過以下兩種方式定位執行效率較低的 sql 語句。 

下面我們舉例說明一下,如何通過慢查詢日誌定位執行效率底的 sql 語句: 

開啟慢查詢日誌 , 配置樣例: 

[mysqld] 

log-slow-queries 

在 my.cnf 配置檔案中增加上述配置項並重啟 mysql 服務,這時 mysql 慢查詢功能生效。慢查詢 日誌將寫入引數 datadir (資料目錄)指定的路徑下,預設檔名是 host_name-slow.log

和錯誤日誌、查詢日誌一樣,慢查詢日誌記錄的格式也是純文字,可以被直接讀取。下例中演示了慢查詢日誌的設定和讀取過程。 

( 1 )首先查詢一下 long_query_time 的值 。 

mysql> show variables like 'long%'; 

+-----------------+-------+ 

| variable_name | value | 

+-----------------+-------+ 

| long_query_time | 10 | 

+-----------------+-------+ 

1 row in set (0.00 sec) 

( 2 )為了方便測試,將修改慢查詢時間為 5 秒。 

mysql> set long_query_time=5; 

query ok, 0 rows affected (0.02 sec) 

( 3 )依次執行下面兩個查詢語句。 

第乙個查詢因為查詢時間低於 5 秒而不會出現在慢查詢日誌中: 

mysql> select count(*) from order2008; 

+----------+ 

| count(*) | 

+----------+ 

| 208 | 

+----------+ 

1 row in set (0.00 sec) 

第二個查詢因為查詢時間大於 5 秒而應該出現在慢查詢日誌中: 

mysql> select count(*) from t_user; 

+----------+ 

| count(*) | 

+----------+ 

| 6552961 | 

+----------+ 

1 row in set (11.07 sec) 

( 4 )檢視慢查詢日誌。 

[root@localhost mysql]# more localhost-slow.log 

# time: 081026 19:46:34 

# user@host: root[root] @ localhost  

# query_time: 11 lock_time: 0 rows_sent: 1 rows_examined: 6552961 

select count(*) from t_user;

從上面日誌中,可以發現查詢時間超過 5 秒的 sql ,而小於 5 秒的則沒有出現在此日誌中。 

如果慢查詢日誌中記錄內容很多,可以使用 mysqldumpslow 工具( mysql 客戶端安裝自帶)來對慢查詢日誌進行分類彙總。下例中對日誌檔案 mysql_master-slow.log 進行了分類彙總,只顯示彙總後摘要結果: 

[root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.log 

reading mysql slow query log from mysql_master-slow.log 

count: 2 time=11.00s (22s) lock=0.00s (0s) rows=1.0 (2), root[root]@mysql_master 

select count(n) from t_user; 

對於 sql 文字完全一致,只是變數不同的語句, mysqldumpslow 將會自動視為同乙個語句進行統計,變數值用 n 來代替。這個統計結果將大大增加使用者閱讀慢查詢日誌的效率,並迅速定位系統的 sql 瓶頸。 

注意:慢查詢日誌對於我們發現應用中有效能問題的 sql 很有幫助,建議正常情況下,開啟此日誌並經常檢視分析。 

MySQL優化 如何定位效率較低的SQL

一般通過以下兩種方式定位執行效率較低的 sql 語句。下面我們舉例說明一下,如何通過慢查詢日誌定位執行效率底的 sql 語句 開啟慢查詢日誌 配置樣例 mysqld log slow queries 在 my.cnf 配置檔案中增加上述配置項並重啟 mysql 服務,這時 mysql 慢查詢功能生效...

Mysql效率優化定位較低sql的兩種方式

關於mysql效率優化一般通過以下兩種方式定位執行效率較低的sql語句。通過慢查詢日誌定位那些執行效率較低的 sql 語句,用 log slow queries file name 選項啟動時,mysqld 會 寫乙個包含所有執行時間超過 long query time 秒的 sql 語句的日誌檔案...

mysql更新效率優化 MYSQL更新優化實錄

引言 今天 august 5,2015 5 34 pm 在給資料庫中一張表的結構做一次調整,新增了幾個字段,後面對之前的資料進行重新整理,重新整理的內容是 對其中的乙個已有欄位url進行匹配,然後更新新加的字段type和typeid。後來就寫了個shell指令碼來刷資料,結果執行shell指令碼後我...